Você adicionou SAN ao CSR , mas não disse ca
para incluir extensões do CSR no certificado. Vejo
link ou a página do manual para ca
< a href="https://www.openssl.org/docs/man1.1.0/apps/ca.html"> também na web em copy_extensions
EDIT: Você também precisa especificar x509_extensions
no ca
config, ou equivalente, mas menos conveniente na opção de linha de comando -extensions
, em ambos os casos apontando para uma seção que existe, mas pode fique vazio se você não quiser nenhuma extensão necessária para a CA. Eu não percebi isso no começo porque eu nunca tinha tentado o caso de extensões do CSR somente e não a configuração, o que não é realista para a maioria das CAs. Se você especificar copy_extensions
diferente de none
(e o CSR tiver alguns), mas não especificar x509_extensions
, então ca
faz colocar as extensões no certificado, mas não defina a versão cert para v3 conforme exigido pelos padrões (como rfc5280) quando as extensões estiverem presentes.
É discutível se isso é um bug; a manpage diz que x509_extensions/extensions
controla a configuração v3, e não dizendo que qualquer coisa semelhante sobre copy_extensions
implica que não, mas IMHO é certamente uma característica muito abaixo do ideal. EDIT: é um bug e será corrigido, mas até então usar a solução alternativa, consulte link
NO ENTANTO: no meu teste, isso não resolveu o seu problema. Mesmo que o certificado tenha *.local
em SAN e CN e seja (agora) válido, meu Firefox (53.0.2) e Chrome (59.0.3071.109) ainda o rejeitam com SSL_ERROR_CERT_DOMAIN_ERROR e ERR_CERT_COMMON_NAME_INVALID respectivamente. Eu acho que eles podem não estar excluindo local
da lógica de nível 2 + normal e tentei *.example.local
: o Chrome aceita isso, mas o Firefox não aceita. Eu também tentei *.example.org
e o Chrome e o IE11 como isso mas ainda não o Firefox (e é claro atribuir nomes para você em TLDs reais como .org
não é o modo como o DNS deve funcionar). / p>
Isso me deixa preso. Com algum trabalho OpenSSL pode ser feito para gerar um certificado contendo quase tudo o que você quiser, mas o que o Firefox eo Chrome aceitarão eu não sei. Vou tentar investigar e atualizar se encontrar algo.
Espero que você queira dizer que você forneceu *.local
como o CommonName apenas para o CSR do servidor e NÃO para o certificado da CA (autoassinado). Se os nomes de assunto para CA e certs de folha forem os mesmos, nada funcionará de maneira confiável. EDIT: seu Q editado confirma que eles foram corretamente diferentes. Embora não mencione também a especificação de País, Estado e Organização, conforme exigido pela política ca
que você usou.
Nota 'auto-assinado' é um termo de arte e significa assinado com a mesma chave . Seu certificado da CA é autoassinado. O certificado do servidor é assinado por você mesmo usando sua própria chave, mas não é <-> assinado . Tentar aplicar instruções para um certificado autoassinado a um certificado não auto-assinado fazia parte do seu problema.
E o ponto de Gilles sobre md5 para o algoritmo de assinatura também está correto.
EDIT: 'redefinir' serial (e índice) para uma configuração de openssl ca
é uma má idéia, a menos que você descarte permanentemente o certificado da CA e o nome para o qual foram usados. Os padrões dizem que uma determinada CA não deve emitir mais de um certificado com o mesmo valor serial no certificado, e o arquivo serial é o caminho que o openssl ca
(e também x509 -req
) implementa. CAs 'reais' (públicas) atualmente não usam mais um contador simples, mas incluem entropia para bloquear ataques de colisão no PKI - google hashclash - mas isso não é um problema para uma CA pessoal como a sua. Eu posso prontamente acreditar que um navegador (ou outro relier) está insatisfeito se ele vê vários certs com o mesmo nome de CA e serial, embora eu NÃO espere que um navegador armazene persistentemente um cert leaf - e, portanto, veja os antigos e os novos em um processo, a menos que seja de longa duração - a menos que você o importe para a loja aplicável, inclusive no Firefox, se você torná-lo uma "exceção" permanente.