Temos uma PKI interna / privada que emite certificados para que apenas os funcionários da empresa possam acessar alguns subdomínios (por exemplo, admin.example.com).
Aqui está o script que usamos para gerar os certificados:
names="john maria foo bar"
for name in $names; do
echo "$name"
openssl genrsa -aes256 -out $name.key 2048
# Creating the certificate signing request
openssl req -new -key $name.key -out $name.csr
# Signing the certificate
openssl ca -in $name.csr -out $name.crt
# Exporting both the key and the certificate in a p12 file
openssl pkcs12 -export -clcerts -in $name.crt -inkey $name.key -out $name.p12
# And now a bit of cleaning
rm $name.csr
done
O script gera um arquivo .key, .crt e .p12 para cada funcionário, o funcionário pode adicionar seu arquivo p12 ao navegador (juntamente com o certificado da CA Root da empresa) para acessar o subdomínio.
Mas, recentemente, não funcionava mais com o Chrome, aparentemente houve uma atualização e precisamos ter SANs (Subject Alt Names) nos certificados de personals usados pelos funcionários.
Seguindo FAQ / subjectAltName (SAN) , modifiquei o arquivo de configuração do OpenSSL:
[req]
req_extensions = v3_req
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = admin.example.com
DNS.2 = admindashboard.example.com
mas o certificado resultante não continha as SANs.
Eu removi a última parte do script que destruiu o arquivo .csr, relançou o script e testou um arquivo csr com o comando
openssl req -text -noout -in john.csr | grep DNS
Neste ponto, parece funcionar desde que cheguei
DNS:admin.example.com, DNS:admindashboard.example.com
como resultado.
Mas quando eu testo o arquivo crt com
openssl x509 -text -noout -in john.crt | grep DNS
não recebo nada.
Estou sentindo falta de algo?