Como herdar o commonName ao nome alternativo do assunto

3

No meu pc com o Windows 10 instalado, eu tenho que usar o OpenSSL. Eu fiz o download da versão 1.0.2n e seguindo este guia: Criando um certificado SSL com vários nomes de host Eu modifiquei o openssl arquivo de configuração .cfg (localizado em C: \ OpenSSL-Win64 \ bin).

Após alguns testes, posso gerar sem problemas chaves e certificados.

Meu problema é o seguinte: minhas indicações para a geração de certificados são tais que o Subject Alternative Name deve ter apenas 1 valor e deve corresponder ao campo Common Name . Portanto, se (preenchendo o certificado) eu preencher o campo commonName com example.com , também o nome alternativo de assunto deverá ser example.com . Eu sei que eu posso mudar cada vez que o arquivo cfg e definir manualmente o valor para a SAN na seção v3-req, mas eu quero evitar isso; Estou procurando uma maneira de copiar o valor que solicito para o nome comum no campo SAN.

Então, eu tentei isso: no arquivo openss.cfg eu fui para a seção v3 req e eu mudei desta forma:

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE 
keyUsage = nonRepudiation, digitalSignature, keyEncipherment 
subjectAltName = @alt_names

[alt_names] 
DNS.1 = commonName:copy

isto é, tentei explorar a função: copy mas, infelizmente, esta ação não funciona. Se, após a geração do certificado, eu iniciar o comando

req -text -noout -in <filename.csr>

para verificar meu certificado, na seção específica, recebo isso:

X509v3 Subject Alternative Name:
    DNS:commonName.copy 

Como você pode ver, a saída é o lado direito da minha declaração na seção [alt_names] .

Portanto, as perguntas são: Existe um método para herdar o commonName ao nome alternativo do assunto? E se sim, como?

    
por Luca Sepe 28.02.2018 / 17:27

1 resposta

5

Use ${section::name} para ler variáveis previamente definidas.

Veja um exemplo que funciona:

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_dn
req_extensions     = req_ext

[ req_dn ]

# Or traditional org style:
countryName = gb
organizationName = example
commonName = acme.example.test

[ req_ext ]

subjectAltName = @alt_names

[alt_names]
DNS.1 = ${req_dn::commonName}
DNS.2 = alt.example.test

Seguido por:

openssl req -nodes -new -keyout test.key -out test.csr -config ./openssl.cnf

Isso resulta em:

openssl req -noout -text -in test.csr 

dando:

 ...
    Attributes:
    Requested Extensions:
        X509v3 Subject Alternative Name:
            DNS:acme.example.test, DNS:alt.example.test
Signature Algorithm: sha256WithRSAEncryption
     92:1c:e0:0e:6d:7d:2e:b4:64:c5:ab:ff:6a:37:dd:35:98:58:
 ...
    
por 28.02.2018 / 19:42

Tags