文章目錄
- 自簽名
- 生成命令
- 安裝
- 安裝證書
- 瀏覽器證書管理器
自簽名
生成命令
使用openssl
生成私鑰和證書。
openssl req -x509 -newkey rsa:4096 -nodes -days 365 -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost" -keyout cert.key -out cert.crt
# or
openssl req -x509 -newkey rsa:2048 -nodes -days 365 -sha256 -subj '/CN=localhost' -addext "subjectAltName=DNS:localhost" -keyout private-key.pem -out certificate.pem
-x509
:生成自簽名證書-newkey rsa:4096
:生成 4096 位 RSA 密鑰-keyout
:指定私鑰輸出路徑-out
:指定證書輸出路徑-days 365
:證書有效期 365 天-nodes
:不加密私鑰-subj "/CN=localhost"
:設置證書主題為 localhost-addext "subjectAltName=DNS:localhost"
:配置SAN擴展
如果提示subject name
格式不正確,就修改-subj "//CN=localhost"
,多加一個/
。
subjectAltName
配置很重要,瀏覽器需要確保訪問的 URL
和證書中的CN/SAN
完全匹配
配置好之后,應該會在當前目錄生成cert.key
和cert.crt
兩個文件或private-key.pem
和certificate.pem
兩個文件。
安裝
如果要讓瀏覽器正確識別有兩種方法:安裝證書和瀏覽器證書管理器。
安裝證書
雙擊cert.crt
后點擊安裝證書或右擊cert.crt
選擇安裝證書。
將證書存儲為受信任的根證書頒發機構。
瀏覽器證書管理器
在瀏覽器中可以導入自定義證書。
可以在瀏覽器設置中直接搜索證書,一般在隱私或安全下面可以找到管理證書。
下面分別是Chrome和Edge的管理證書。
谷歌瀏覽器還支持自定義導入,不需要安裝證書到系統,只需要導入即可識別。
也可以選擇管理系統導入的證書。
點擊導入,選擇證書文件cert.crt
,選擇證書存儲在受信任的根證書頒發機構。
安裝完成后開始測試。
導入證書之前:
導入證書之后:
可以看到證書生效了。
使用 node 創建簡單的服務器測試代碼。
import express from 'express'
import https from 'node:https'
import fs from 'node:fs'
import path from 'node:path'const app = express()// 加載SSL證書,使用`cert.key, cert.crt`或者`private-key.pem, certificate.pem`
const sslOptions = {key: fs.readFileSync(path.resolve('D:/OpenSSL/ca', 'cert.key')),cert: fs.readFileSync(path.resolve('D:/OpenSSL/ca', 'cert.crt'))
}app.use(express.static(import.meta.dirname))// 創建HTTPS服務器
const server = https.createServer(sslOptions, app)server.listen(3000, () => {console.log('HTTPS 服務啟動成功,端口: 3000')
})
如果運行報錯:ERR_OSSL_X509_KEY_VALUES_MISMATCH
,這表明證書秘鑰不匹配。
首先確認證書和秘鑰是否匹配:
openssl x509 -noout -modulus -in cert.crt | openssl md5 && \
openssl rsa -noout -modulus -in cert.key | openssl md5
如果哈希值不匹配需要重新生成證書和秘鑰。如果問題還存在,那可能需要完全刪除舊證書并重新生成。