TopGit
Đánh giá repo GitHub

mkcert: local development certificates

MTopGit review image for FiloSottile/mkcert
Review by Topgit.dev for FiloSottile/mkcert, with GitHub repository stats and README context.
Nhận định nhanh

mkcert là công cụ bạn dùng ngay khi trình duyệt báo lỗi tin cậy với một chứng chỉ tự ký trên localhost. mkcert bỏ qua toàn bộ quy trình thủ công tạo CA — sinh CA gốc, import vào trust store của từng trình duyệt, rồi cấp lại chứng chỉ bằng tay — chỉ còn hai lệnh. Với HTTPS cục bộ, đây gần như là mức zero-config tối đa mà một công cụ chứng chỉ có thể đạt được.

Sao
★ 59.6k
Fork
⑂ 3.1k
Ngôn ngữ
Go
Giấy phép
BSD-3-Clause
Chủ đề
Security
Cập nhật
Aug 2024
Trang chủ
GitHub

Nỗi đau HTTPS trong local development

HTTPS cục bộ hỏng theo một cách rất cụ thể: trình duyệt từ chối thẳng chứng chỉ tự ký, còn xin một chứng chỉ CA thật cho `localhost` hay `example.test` thì không thể vì các tên đó không resolve công khai được. Giải pháp thay thế thường gặp — tự dựng CA bằng openssl rồi mò từng UI trust store riêng của mỗi trình duyệt và hệ điều hành để import — là kiểu việc lặp lại vài tháng một lần mà developer luôn làm sai vì chẳng ai nhớ nổi flag. Rắc rối, chứ không khó.

Một CA cục bộ zero-config

mkcert là một command-line tool nhỏ viết bằng Go, đóng vai trò CA cục bộ ngay trên máy của bạn. Thay vì để trình duyệt cảnh báo vì chứng chỉ tự ký, mkcert tạo một CA gốc, cài nó vào trust store của hệ thống, Firefox NSS và Java (khi có `JAVA_HOME`), rồi ký chứng chỉ TLS cho bất kỳ tên nào bạn đưa vào, kể cả localhost, 127.0.0.1, ::1 và các domain `.test`.

mkcert làm được những gì

  • ✓Tạo và cài CA gốc cục bộ chỉ bằng một lệnh (`mkcert -install`), phủ luôn trust store hệ thống, NSS store của Firefox, và store của Java khi có `JAVA_HOME`
  • ✓Cấp chứng chỉ TLS cho nhiều tên cùng lúc — domain, wildcard như `*.example.com`, localhost, địa chỉ IPv4/IPv6, và TLD `.test`
  • ✓Tự sinh chứng chỉ S/MIME khi một trong các tên truyền vào là địa chỉ email
  • ✓Hỗ trợ khóa ECDSA qua `-ecdsa` và gói PKCS#12 (`.p12`/`.pfx`) qua `-pkcs12` cho các app cần định dạng chứng chỉ cũ
  • ✓Có thể ký thẳng một CSR có sẵn bằng flag `-csr` thay vì sinh cặp khóa mới
  • ✓Cho phép export riêng CA gốc (`rootCA.pem`) để cài lên máy khác mà không lộ private key
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao ↗

Cài đặt mkcert

macOS: `brew install mkcert` (thêm `brew install nss` nếu dùng Firefox), hoặc qua MacPorts với `sudo port install mkcert`. Linux: cài `certutil` trước (ví dụ `sudo apt install libnss3-tools`), rồi `brew install mkcert` qua Homebrew on Linux, build từ source với Go 1.13+, hoặc tải binary dựng sẵn từ trang releases — người dùng Arch cũng có thể chạy `sudo pacman -Syu mkcert`. Windows: `choco install mkcert` qua Chocolatey, hoặc `scoop bucket add extras && scoop install mkcert` qua Scoop; nếu gặp lỗi permission, hãy chạy với quyền Administrator. Sau khi cài xong binary, chạy `mkcert -install` một lần để tạo và tin cậy CA cục bộ.

Sinh chứng chỉ được tin cậy bằng mkcert

Chạy `mkcert -install` một lần trên mỗi máy để tạo CA cục bộ và đăng ký nó với hệ thống (và Firefox, nếu đã cài `nss`) — bạn sẽ thấy dòng xác nhận cho từng trust store. Sau đó sinh chứng chỉ bằng `mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1`, lệnh này ghi ra file `.pem` chứng chỉ và file `-key.pem` khóa, đặt tên theo domain đầu tiên, ví dụ `example.com+5.pem`. mkcert chỉ tạo ra file chứng chỉ và khóa; nó không tự cấu hình server để dùng chúng. Với Node.js, vì Node không đọc trust store hệ thống, hãy set biến môi trường `NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"` trước khi chạy app.

Điểm mạnh

  • ✓Gộp một quy trình tạo CA thủ công nhiều bước thành hai lệnh, thay vì phải tự chạy openssl rồi mò trust store riêng
  • ✓Phủ nhiều trust store hơn trong một lần so với một CA tự dựng thường làm được — hệ thống, Firefox/NSS, và Java khi đã cấu hình
  • ✓Xử lý được nhiều kiểu tên khác nhau (domain, wildcard, IP, TLD `.test`) trong một lần gọi lệnh thay vì tách riêng từng loại
  • ✓CA gốc có thể export và copy sang máy khác, nên cả team dùng chung một CA được tin cậy thay vì mỗi người tự sinh CA riêng

Lưu ý bảo mật và những gì mkcert không phải là

  • △File `rootCA-key.pem` mà mkcert tự sinh ra nắm toàn quyền chặn đọc HTTPS traffic được CA đó tin cậy — README cảnh báo thẳng là không được chia sẻ file này, và đây là rủi ro thật chứ không phải giả định
  • △mkcert chỉ tạo và cài chứng chỉ; nó không tự cấu hình web server, proxy hay app để dùng chứng chỉ đó
  • △Node.js hoàn toàn không đọc trust store hệ thống, nên mỗi process Node cần set biến `NODE_EXTRA_CA_CERTS` thủ công, nếu không nó vẫn từ chối chứng chỉ của mkcert
  • △Đây rõ ràng là công cụ cho development: README nói thẳng không nên dùng trên máy người dùng cuối hay trong production, vì như vậy đồng nghĩa phát tán một CA mà bạn nắm private key
  • △Việc thiết lập tin cậy trên mobile phải làm thủ công theo từng hệ điều hành — iOS cần AirDrop hoặc gửi email file CA rồi bật full trust trong Settings, còn Android cần cài CA và bật user roots trong bản development build

Các lựa chọn thay thế và công cụ tương tự

Caddy — chế độ automatic HTTPS của nó tự cấp và gia hạn chứng chỉ cục bộ ngay khi bạn chạy site bằng `caddy run`, gộp luôn việc sinh chứng chỉ vào chính tool phục vụ app ↗OpenSSL — cách làm thủ công: tự dựng CA và chứng chỉ tự ký bằng tay, không có phần tự động hóa trust storestep-ca (Smallstep) — một CA riêng đầy đủ tính năng dành cho team cần policy, xoay vòng khóa, và hỗ trợ ACME vượt ra ngoài phạm vi một máy dev đơn lẻ

Câu hỏi thường gặp

Dùng mkcert cho development có an toàn không?

mkcert an toàn cho local development vì nó chỉ đụng đến trust store trên chính máy bạn và giữ file private key của CA, `rootCA-key.pem`, trên đĩa dưới quyền kiểm soát của bạn. Điểm cần lưu ý là bất kỳ ai lấy được file khóa đó đều có thể tạo ra chứng chỉ mà trình duyệt của bạn tin cậy, nên hãy coi nó như một secret và không bao giờ commit hay chia sẻ.

mkcert có hoạt động với Firefox trên Linux không?

mkcert có hỗ trợ Firefox trên Linux, đây là một trong các trust store được liệt kê, cùng với macOS. Bạn cần cài `certutil` trước — ví dụ gói `libnss3-tools` trên Debian/Ubuntu hoặc `nss-tools` trên Fedora/RHEL — nếu không mkcert vẫn tạo được CA nhưng không đăng ký được vào trust store NSS riêng của Firefox.

Làm sao để chứng chỉ mkcert được tin cậy trên iOS hoặc Android?

Trên iOS, bạn AirDrop hoặc gửi email cho chính mình file `rootCA.pem` lấy từ thư mục mkcert in ra qua `mkcert -CAROOT`, mở file đó để cài profile trong Settings > Profile Downloaded, rồi bật full trust cho nó ở một bước riêng. Trên Android, bạn cài cùng file CA đó rồi bật user roots trong bản development build của app, vì chỉ riêng trust store hệ điều hành là chưa đủ.

Làm sao để dùng chứng chỉ mkcert với Node.js?

Chứng chỉ mkcert cần thêm một bước cho Node.js vì Node không đọc trust store của hệ điều hành như trình duyệt vẫn làm. Hãy set biến môi trường `NODE_EXTRA_CA_CERTS` trỏ tới đường dẫn `rootCA.pem`, ví dụ `export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"`, trước khi chạy process Node.

Chứng chỉ mkcert có dùng được trong production không?

Chứng chỉ mkcert không dành cho production — dự án tự mô tả mình là công cụ development, và dùng chứng chỉ của nó trên máy người dùng cuối đồng nghĩa phát tán một CA mà bạn nắm private key, đi ngược lại mục đích xác thực chứng chỉ công khai. HTTPS cho production cần chứng chỉ từ một CA được tin cậy công khai.

Làm sao để cài CA gốc của mkcert lên máy khác?

Cài CA gốc của mkcert lên máy khác chỉ cần chứng chỉ, không cần private key: copy file `rootCA.pem` từ thư mục hiển thị qua `mkcert -CAROOT` sang máy kia, trỏ biến môi trường `CAROOT` vào thư mục đó, rồi chạy `mkcert -install` trên máy đó để đăng ký vào trust store.

Trường hợp sử dụng tốt nhất

  • •Chạy dev server cục bộ qua HTTPS mà không bị cảnh báo chứng chỉ mỗi lần reload
  • •Test OAuth callback, service worker, hay các API trình duyệt chỉ chạy trên secure context
  • •Sinh chứng chỉ client-auth hoặc S/MIME để test mutual TLS hay ký email cục bộ
  • •Chia sẻ một CA gốc chung cho vài máy trong team để một setup staging `*.test` dùng chung vẫn được tin cậy

Ai nên dùng — và ai nên bỏ qua

Nên dùng mkcert nếu bạn đang set up bất kỳ dev server cục bộ nào cần HTTPS — OAuth callback, service worker, webhook receiver — và đã chán phải click qua cảnh báo trình duyệt. Nó cũng hợp với team muốn dùng chung một CA gốc trên vài máy dev thay vì mỗi người tự dựng CA riêng. Bỏ qua nếu bạn cần cấp chứng chỉ chuẩn production hay gia hạn tự động — mkcert không hỗ trợ ACME và README nói rõ nó không dành cho máy người dùng cuối.

Repo liên quan

Nguồn & ghi công

Dựa trên repository GitHub FiloSottile/mkcert và README của dự án.

Dữ liệu GitHub · đồng bộ lần cuối 14 thg 8, 2026Đánh giá bởi Henry
← Về TopGit

Vẫn đang phân vân về mkcert?

Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về mkcert.

GitHub