背景
某機房內部訪問需要配置 HTTPS,網上找的一些證書教程都不是特別好,有些直接生成證書,沒有根 CA 的證書導致信任不了 Ubuntu 機器,有些教程只有域名生成,沒有 IP 生成,有些甚至報錯。故發一個筆者在 Ubuntu 22.04 機器上測試正確可用的流程,這裡使用 10.12.0.2 作為例子生成一個證書。
生成
-
生成根 CA 的私鑰和證書
# 生成根 CA 的私鑰 openssl genrsa -out rootCA.key 2048 # 使用私鑰生成根 CA 的證書 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
-
為
10.12.0.2
生成私鑰和證書請求檔案(CSR)# 生成 10.12.0.2 的私鑰 openssl genrsa -out 10.12.0.2.key 2048 # 使用私鑰生成證書請求檔案 openssl req -new -key 10.12.0.2.key -out 10.12.0.2.csr
-
建立證書擴充套件檔案
為了確保為
10.12.0.2
簽名的證書能夠用作伺服器身份驗證,需要為它建立一個擴充套件檔案。建立一個名為v3.ext
的檔案,並新增以下內容:authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] # 這裡 IP 替換成 DNS 就可以簽名域名了 IP.1 = 10.12.0.2
-
使用根 CA 的證書為
10.12.0.2
簽名證書openssl x509 -req -in 10.12.0.2.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out 10.12.0.2.crt -days 500 -sha256 -extfile v3.ext
此時資料夾內應該有以下檔案:
rootCA.key
- 根 CA 的私鑰。rootCA.crt
- 根 CA 的證書。10.12.0.2.key
- 10.12.0.2 的私鑰。10.12.0.2.csr
- 10.12.0.2 的證書請求檔案。10.12.0.2.crt
- 由根 CA 簽名的 10.12.0.2 的證書。
信任
Ubuntu
sudo cp rootCA.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
CentOS
sudo cp rootCA.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
Windows
右鍵檔案,選擇安裝證書,選擇本地計算機,指定安裝到受信任的根證書頒發機構,即可
使用
這裡拿 ASP.NET CORE 無反代部署舉例,複製 10.12.0.2.key
和 10.12.0.2.crt
檔案到應用釋出目錄,之後在 appsettings.json 里加入或修改如下內容,並重啟服務即可。
{
// 上面是其他內容
"Kestrel": {
"Endpoints": {
"Https": {
"Url": "https://*",
"Certificate": {
"Path": "./10.12.0.2.crt",
"KeyPath": "./10.12.0.2.key"
}
}
}
}
}