Estou tentando instalar um certificado SSL automaticamente com certutil e fiz isso com sucesso com o seguinte comando:
certutil -addstore -user -f "My" "$CERT_FILE_CERT"
Examinando os certificados em certmgr, o certificado instalado aparece em Pessoal > Certificados conforme o esperado. Isso não parece ser suficiente para meus navegadores (Chrome, Edge) validarem o certificado quando ele é usado para servir uma página de um dos nomes de host mencionados na lista SAN.
Para validar com sucesso o certificado e aceitar que ele é legítimo, também preciso instalar o certificado nas Autoridades de Certificação Raiz Confiáveis. Existe uma maneira de alterar o arquivo de configuração que uso com o OpenSSL para que apenas a entrada Pessoal > Certificados seja necessária? Ou sempre preciso instalar o certificado em dois lugares?
Para contextualizar, pretendo simplificar ao máximo o processo de criação do ambiente de desenvolvimento local na minha empresa. Uma coisa que exigimos é que os serviços locais sejam servidos por HTTPS (um serviço é um serviço de identidade, e "Fazer login com o Google" não funciona se seu URL de redirecionamento não for seguro).
Eu usei o OpenSSL com a seguinte configuração para gerar um certificado:
[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
E os seguintes comandos:
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"
Isso resultou no seguinte certificado:
-----BEGIN CERTIFICATE-----
MIICODCCAd6gAwIBAgIUNrzhFtF68r7gVL5isCrZNUoOzS4wCgYIKoZIzj0EAwIw
cDELMAkGA1UEBhMCSlAxETAPBgNVBAgMCFNoaXp1b2thMRIwEAYDVQQHDAlIYW1h
bWF0c3UxEDAOBgNVBAoMB0NPTVBBTlkxFDASBgNVBAsMC0RldmVsb3BtZW50MRIw
EAYDVQQDDAlsb2NhbGhvc3QwHhcNMjEwODI2MDMyMjMyWhcNMzEwODI0MDMyMjMy
WjBwMQswCQYDVQQGEwJKUDERMA8GA1UECAwIU2hpenVva2ExEjAQBgNVBAcMCUhh
bWFtYXRzdTEQMA4GA1UECgwHQ09NUEFOWTEUMBIGA1UECwwLRGV2ZWxvcG1lbnQx
EjAQBgNVBAMMCWxvY2FsaG9zdDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJRO
TwcPcq2ZI8y6vDqiKaxJ1IGcIsVup1xpBdgGOTpKMQ5IZWyIttFEXjBVytSPJXJx
4NXiryNnWdMEPNdu7JujVjBUMAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEF
BQcDATAwBgNVHREEKTAnhwR/AAABgglsb2NhbGhvc3SCFGhvc3QuZG9ja2VyLmlu
dGVybmFsMAoGCCqGSM49BAMCA0gAMEUCIQDC6qzBjPB8Wj/G7a4x8O8ccX3Gqs5O
W2vwk78A/dDaJAIgdsBlg8kc1MNPuHHXEfp1PvOFAR0DWEilUPJDgbQw6eA=
-----END CERTIFICATE-----