Hướng Dẫn Sử Dụng Tên Máy Của Bạn Với HTTPS Trên ASP.NET Core
Khi bạn chạy dotnet dev-certs https --trust, .NET sẽ tạo và tin tưởng một chứng chỉ phát triển chỉ cho localhost. Điều này tuyệt vời cho https://localhost:1234, nhưng không bao gồm https://my-machine:1234.
Nếu bạn muốn truy cập dịch vụ của mình bằng tên máy (ví dụ: https://my-machine:7164), bạn cần tạo một chứng chỉ tự ký của riêng bạn, liệt kê tất cả các tên mà bạn sẽ sử dụng (tên máy, localhost, và tùy chọn 127.0.0.1) và sau đó cấu hình Kestrel để sử dụng nó. Bạn cũng cần tin tưởng chứng chỉ đó cho trình duyệt — và hướng dẫn Node.js cách tin tưởng nó.
Dưới đây là các bước rõ ràng, dễ sao chép cho Windows/PowerShell.
1) Tạo chứng chỉ tự ký (.pfx) cho tên máy của bạn
powershell
# Các tên mà bạn muốn chứng chỉ này bao gồm (thêm/xóa khi cần)
$dns = @("my-machine", "localhost", "127.0.0.1")
# Tạo một chứng chỉ gốc trong CurrentUser\My
$cert = New-SelfSignedCertificate -DnsName $dns -CertStoreLocation Cert:\CurrentUser\My
# Xuất một PFX với mật khẩu (thay YOUR-PASSWORD và FILENAME)
$pwd = ConvertTo-SecureString "YOUR-PASSWORD" -AsPlainText -Force
Export-PfxCertificate -Cert $cert -FilePath "$env:USERPROFILE\FILENAME.pfx" -Password $pwd
Mẹo: Giữ
localhostvà127.0.0.1trong danh sách SAN để công cụ hiện có tiếp tục hoạt động.
2) (Tùy chọn) Thay thế chứng chỉ mặc định dotnet dev-certs
Nếu bạn muốn chứng chỉ mới của bạn trở thành chứng chỉ phát triển mặc định:
powershell
dotnet dev-certs https --clean `
--import "$env:USERPROFILE\FILENAME.pfx" `
-p YOUR-PASSWORD --trust
3) Hoặc: Chỉ định Kestrel đến PFX của bạn trong appsettings.json
Nếu bạn không muốn thay thế chứng chỉ phát triển toàn cục, cấu hình ứng dụng của bạn một cách rõ ràng:
json
{
"Kestrel": {
"Certificates": {
"Default": {
"Path": "C:/Users/USER/FILENAME.pfx",
"Password": "YOUR-PASSWORD"
}
}
}
}
4) Tin tưởng chứng chỉ (cho trình duyệt)
Xuất một .cer (chứng chỉ công khai) từ chứng chỉ bạn đã tạo, sau đó nhập nó vào Cơ Quan Chứng Nhận Gốc Được Tin Cậy cho Người Dùng Hiện Tại.
powershell
$cer = "$env:USERPROFILE\FILENAME.cer"
# Xuất phần công khai của chứng chỉ ra .cer
Export-Certificate -Cert $cert -FilePath $cer
# Nhập vào CurrentUser\Root (Cơ Quan Chứng Nhận Gốc Được Tin Cậy)
Import-Certificate -FilePath $cer -CertStoreLocation Cert:\CurrentUser\Root
Khuyến nghị: Đừng tạo trực tiếp vào kho tin cậy. Tạo chứng chỉ trong
CurrentUser\My, sau đó xuất/nhập. Khóa riêng của bạn sẽ nằm cùng chứng chỉ gốc; giữ cho quy trình rõ ràng giúp giảm sai sót.
5) Làm cho nó hoạt động với Node.js
Node.js 22.x
Node 22 không sử dụng kho tin cậy của Windows theo mặc định và cũng không chấp nhận .cer qua NODE_EXTRA_CA_CERTS. Chuyển đổi .cer sang .pem và thiết lập NODE_EXTRA_CA_CERTS:
powershell
# Chuyển đổi CER -> PEM (Base64)
certutil -encode C:\Users\USER\FILENAME.cer C:\Users\USER\FILENAME.pem
# Đối với phiên PowerShell hiện tại:
$env:NODE_EXTRA_CA_CERTS = "C:\Users\USER\FILENAME.pem"
# Hoặc duy trì cho các shell mới:
# setx NODE_EXTRA_CA_CERTS "C:\Users\USER\FILENAME.pem"
node
Bây giờ fetch("https://my-machine:7164/...") sẽ không còn báo lỗi về chứng chỉ tự ký.
Node.js 23.8+
Phiên bản Node mới hơn hỗ trợ sử dụng kho tin cậy của hệ điều hành trực tiếp:
powershell
node --use-system-ca your-script.js
6) Xóa chứng chỉ sau này
Nếu bạn vẫn có đối tượng $cert từ việc tạo:
powershell
$thumb = $cert.Thumbprint
# Xóa từ CurrentUser\My và xóa cả khóa riêng
Remove-Item "Cert:\CurrentUser\My\$thumb" -DeleteKey -Force
(Nếu bạn không còn có $cert, hãy tìm nó theo chủ đề/nhà phát hành trong Cert:\CurrentUser\My và xóa theo dấu vân tay.)
Những Lỗi Thường Gặp
- Mismatched Name: Máy chủ URL phải được liệt kê trong các tên DNS của chứng chỉ (SAN). Nếu bạn truy cập
https://my-machine:7164,my-machinephải có trong chứng chỉ. - Node vẫn thất bại: Trên Node 22, hãy đảm bảo
NODE_EXTRA_CA_CERTStrỏ đến một tệp PEM, không phải.cer. Khởi động lại shell hoặc thiết lập nó trong cùng một phiên. - Tin cậy của trình duyệt: Đảm bảo bạn đã nhập chứng chỉ công khai vào Người Dùng Hiện Tại → Cơ Quan Chứng Nhận Gốc Được Tin Cậy.
- Đường dẫn: Sử dụng đường dẫn tuyệt đối của Windows cho
"Path"của Kestrel.
Tóm Tắt
- Tạo một PFX tự ký với SAN cho
my-machine,localhost, và127.0.0.1. - Hoặc nhập nó làm chứng chỉ phát triển toàn cầu hoặc tham chiếu nó trong Kestrel.
- Xuất
.cervà nhập vào Cơ Quan Chứng Nhận Gốc để trình duyệt tin tưởng. - Đối với Node: sử dụng
NODE_EXTRA_CA_CERTSvới.pem(Node 22) hoặc--use-system-ca(Node 23.8+).
Thiết lập này cho phép bạn phát triển và thử nghiệm các điểm cuối HTTPS bằng cách sử dụng tên máy của bạn, tránh những hạn chế của phạm vi mặc định localhost của dotnet dev-certs.