
No meu pc com Windows 10 instalado, tenho que usar OpenSSL. Baixei a versão 1.0.2n e segui este guia:Criando um certificado SSL com vários nomes de hostModifiquei o arquivo de configuração openssl.cfg (localizado em C:\OpenSSL-Win64\bin).
Após alguns testes, consigo gerar sem problemas chaves e certificados.
Meu problema é o seguinte: minhas indicações para a geração de certificados são tais que oNome alternativo do assuntodeve ter apenas 1 valor e deve corresponder aoNome comumcampo. Então, se (preenchendo o certificado) eu preencher o campo commonName comexemplo.com, também o nome alternativo do assunto deve serexemplo.com. Eu sei que posso alterar sempre o arquivo cfg e definir manualmente o valor da SAN na seção v3-req, mas quero evitar isso; Estou procurando uma maneira de copiar o valor solicitado para o nome comum no campo SAN.
Então, tentei isto: no arquivo openss.cfg fui para a seção v3 req e 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
ou seja, 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 isto:
X509v3 Subject Alternative Name:
DNS:commonName.copy
Como você pode ver, a saída está no lado direito da minha declaração na [alt_names]
seção.
Então, as questões são: Existe um método para herdar o commonName para o nome alternativo do assunto? E se sim, como?
Responder1
Use ${section::name}
para ler variáveis previamente definidas.
Aqui está 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 pela:
openssl req -nodes -new -keyout test.key -out test.csr -config ./openssl.cnf
Isto 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:
...