Como adicionar SubjectAltNames ao certificado de entidade final na PKI privada?

3

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?

    
por Gatoyu 17.05.2017 / 17:54

1 resposta

4

O OpenSSL só copiará a extensão da solicitação para o certificado, se estiver configurada para isso.

A opção é chamada copy_extensions na seção [ca] do seu arquivo de configuração.

Se estiver faltando ou definido como none , nenhuma extensão será copiada de sua solicitação para seu certificado.

Se definido como copy , copiará extensões adicionais da solicitação que não estiverem no certificado.

Se definido como copyall , copiará todas as extensões, sobrescrevendo todas as que estiverem no certificado.

man ca irá informá-lo sobre isso. Também vem com um aviso. Se você assinar uma solicitação causal com o comando openssl ca , quando essa opção estiver configurada; você pode acabar emitindo certificados com extensões como CA:True . Verifique suas solicitações primeiro.

    
por 17.05.2017 / 19:31