Eu realmente descobri o problema central, e foi preciso muita pesquisa. Finalmente encontrei uma resposta no StackOverflow , que combinou com a minha investigação sobre os dados reais no próprio certificado com openssl req -text -noout -verify -in CSR.csr
para leia os dados no CSR, e openssl x509 -in certificate.crt -text -noout
para dissecar o certificado gerado e comparar esses dois, apontou para o problema central.
Aparentemente , o OpenSSL estava ignorando a seção do nosso arquivo de configuração relacionado às extensões V3, e não faz as extensões v3, a menos que você diga para ele corretamente no etapa de assinatura da CA real ...
Estes foram os dados do arquivo de configuração que foram passados para o comando openssl req
:
[ req ]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = v3_req
[ dn ]
C=US
ST=Pennsylvania
L=Somewhere
O=No Man's Land
OU=Internal
CN = chat.foo.bar.baz
[ v3_req ]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage=serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = chat.foo.bar.baz
DNS.2 = chat
DNS.3 = 10.1.2.151
Uma chamada padrão dos seguintes itens não respeita as extensões v3 de alguma forma:
openssl req -new -sha256 -out cert.csr -key cert.key -config csrgen.cnf
... no entanto, este funcionou:
openssl req -new -sha256 -out cert.csr -key cert.key -config csrgen.cnf -extensions v3_req
... e quando assina o certificado com o CA, nós tivemos que usar algo assim, executando isso de onde todos os certificados foram armazenados (incluindo o CSR e a chave, para gerar o certificado em primeiro lugar - os certificados e chaves da CA estão em uma seção /certauthority/...
separada em nosso sistema):
openssl x509 -req -days 3650 -in ./cert.csr -CA /certauthority/certs/cacert.pem -CAkey /certauthority/private/cakey.pem -CAserial /certauthority/CA/serial -CAcreateserial -out certificate.crt -extfile csrgen.cnf -extensions v3_req
Este comando colocou corretamente as extensões v3 no certificado e, de alguma forma, ignorou as extensões reais do arquivo. Isso, por sua vez, solucionou os problemas de CN e SAN, e agora o sistema retorna o certificado como "válido" para sites internos e (mais) serviços internos.