我正在尝试使用 certutil 自动安装 SSL 证书,并且我已使用以下命令成功完成此操作:
certutil -addstore -user -f "My" "$CERT_FILE_CERT"
查看 certmgr 中的证书,安装的证书按预期显示在 Personal > Certificates 下。当我的浏览器(Chrome、Edge)用于提供来自 SAN 列表中提到的主机名之一的页面时,这似乎不足以验证证书。
为了成功验证证书并接受它的合法性,我还必须将证书安装到受信任的根证书颁发机构。有没有办法可以更改与 OpenSSL 一起使用的配置文件,以便只需要 Personal > Certificates 条目?还是我总是需要在两个地方安装证书?
就上下文而言,我的目标是尽可能简化在我的公司中设置本地开发环境的过程。我们要求的一件事是通过 HTTPS 提供本地服务(一项服务是身份服务,如果您的重定向 URL 不安全,“使用 Google 登录”将不起作用)。
我使用 OpenSSL 和以下配置来生成证书:
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = JP
ST = Shizuoka
L = Hamamatsu
O = COMPANY
OU = Development
CN = localhost
[v3_req]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
IP.1 = 127.0.0.1
DNS.1 = localhost
DNS.2 = host.docker.internal
以及以下命令:
openssl ecparam -genkey -name prime256v1 | openssl ec -aes256 -out $CERT_FILE_KEY -passout "pass:$CERT_PWD"
openssl req -new -x509 -nodes -days 3650 -key $CERT_FILE_KEY -out $CERT_FILE_CERT -passin "pass:$CERT_PWD" -passout "pass:$CERT_PWD" -config cert-input.conf
openssl pkcs12 -export -out $CERT_FILE_PFX -inkey $CERT_FILE_KEY -in $CERT_FILE_CERT -passin "pass:$CERT_PWD" -passout "pass:$CERT_PWD" -name "Local Dev"
这导致了以下证书:
-----BEGIN CERTIFICATE-----
MIICODCCAd6gAwIBAgIUNrzhFtF68r7gVL5isCrZNUoOzS4wCgYIKoZIzj0EAwIw
cDELMAkGA1UEBhMCSlAxETAPBgNVBAgMCFNoaXp1b2thMRIwEAYDVQQHDAlIYW1h
bWF0c3UxEDAOBgNVBAoMB0NPTVBBTlkxFDASBgNVBAsMC0RldmVsb3BtZW50MRIw
EAYDVQQDDAlsb2NhbGhvc3QwHhcNMjEwODI2MDMyMjMyWhcNMzEwODI0MDMyMjMy
WjBwMQswCQYDVQQGEwJKUDERMA8GA1UECAwIU2hpenVva2ExEjAQBgNVBAcMCUhh
bWFtYXRzdTEQMA4GA1UECgwHQ09NUEFOWTEUMBIGA1UECwwLRGV2ZWxvcG1lbnQx
EjAQBgNVBAMMCWxvY2FsaG9zdDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJRO
TwcPcq2ZI8y6vDqiKaxJ1IGcIsVup1xpBdgGOTpKMQ5IZWyIttFEXjBVytSPJXJx
4NXiryNnWdMEPNdu7JujVjBUMAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEF
BQcDATAwBgNVHREEKTAnhwR/AAABgglsb2NhbGhvc3SCFGhvc3QuZG9ja2VyLmlu
dGVybmFsMAoGCCqGSM49BAMCA0gAMEUCIQDC6qzBjPB8Wj/G7a4x8O8ccX3Gqs5O
W2vwk78A/dDaJAIgdsBlg8kc1MNPuHHXEfp1PvOFAR0DWEilUPJDgbQw6eA=
-----END CERTIFICATE-----