Tools

mkcert: HTTPS ở máy dev không cảnh báo, ba lệnh là xong

Tóm tắt

mkcert tạo CA cục bộ, cài vào kho tin cậy, rồi cấp chứng chỉ cho bất kỳ tên nào bạn cần. mkcert -install một lần, mkcert tên-miền localhost; Node cần NODE_EXTRA_CA_CERTS. Không bao giờ chia sẻ rootCA-key.pem.

Nhiều tính năng web chỉ chạy trên HTTPS: cookie Secure, Service Worker trên tên miền khác localhost, OAuth callback, một số API trình duyệt. Khi dev ở máy, chứng chỉ tự ký (self-signed) làm trình duyệt báo "Không an toàn", và bạn phải bấm bỏ qua mỗi lần hoặc tắt kiểm tra chứng chỉ, một thói quen nguy hiểm. mkcert giải quyết gọn: tạo một CA (tổ chức cấp chứng chỉ) riêng trên máy bạn, cài nó vào kho tin cậy của hệ thống, rồi cấp chứng chỉ cho bất kỳ tên miền nào bạn cần. Trình duyệt tin ngay, không cảnh báo, không cần cấu hình.

Trang GitHub của FiloSottile/mkcert
Trang GitHub của FiloSottile/mkcert (ảnh chụp tháng 11/2026)

GitHub: https://github.com/FiloSottile/mkcert · khoảng 60 nghìn sao · Go · BSD-3-Clause

Cài đặt

brew install mkcert
brew install nss          # nếu dùng Firefox
# Linux: cài libnss3-tools rồi tải binary trên trang Releases
# Windows: choco install mkcert hoặc scoop install mkcert

Ba bước để có HTTPS ở máy dev

# 1. Tạo CA cục bộ và cài vào kho tin cậy (chạy một lần)
mkcert -install

# 2. Tạo chứng chỉ cho các tên bạn dùng
mkcert myapp.test localhost 127.0.0.1 ::1
#   → ./myapp.test+3.pem      (chứng chỉ)
#   → ./myapp.test+3-key.pem  (khoá riêng)

# 3. Đặt tên file cố định cho dễ cấu hình
mkcert -key-file key.pem -cert-file cert.pem "myapp.test" "*.myapp.test" localhost

Với tên miền tự đặt như myapp.test, nhớ thêm dòng 127.0.0.1 myapp.test vào file /etc/hosts.

Dùng với công cụ phổ biến

Công cụCách cấu hình
ViteTrong vite.config: server.https = { key: fs.readFileSync('key.pem'), cert: fs.readFileSync('cert.pem') }
Node.js (gọi API HTTPS cục bộ)Node không dùng kho tin cậy hệ thống; đặt NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
Nginx/Caddy cục bộTrỏ ssl_certificate và ssl_certificate_key tới hai file vừa tạo
Điện thoại thậtCài rootCA.pem (trong thư mục mkcert -CAROOT) lên thiết bị và bật tin cậy

Lệnh khác

  • mkcert -CAROOT: in thư mục chứa CA cục bộ.
  • mkcert -uninstall: gỡ CA khỏi kho tin cậy.
  • mkcert -client ...: tạo chứng chỉ client để test xác thực hai chiều (mTLS).

Lưu ý bảo mật quan trọng

  • File rootCA-key.pem cho phép giả mạo mọi trang HTTPS trên máy bạn. README cảnh báo rõ: không chia sẻ file này. Không commit, không gửi qua chat.
  • Mỗi dev tự chạy mkcert -install trên máy mình; không dùng chung một CA cho cả team.
  • Chỉ dùng cho môi trường phát triển. Production dùng chứng chỉ từ CA công khai như Let's Encrypt.
  • Thêm *.pem vào .gitignore của project.

Áp dụng thế nào?

  • Dev: Chạy app ở máy với HTTPS và tên miền giống production (app.myapp.test) để phát hiện sớm lỗi cookie, CORS, mixed content.
  • Tech Lead: Viết script setup (hoặc task trong justfile/mise) gọi mkcert, để mọi dev có môi trường HTTPS giống nhau, và ghi rõ cảnh báo về file khoá CA.
  • PM: Lỗi chỉ xuất hiện trên HTTPS (đăng nhập, thanh toán) được phát hiện ngay khi dev, không đợi đến staging.

Nguồn & tham khảo

  1. FiloSottile/mkcert — FiloSottile (GitHub)