No Chrome 58, ele não aceita mais certificados autoassinados que dependem de Common Name
: https://productforums.google.com/forum/#!topic/chrome/zVo3M8CgKzQ;context-place=topicsearchin/chrome/category $ 3ACanary% 7Cortar: relevância% 7Cspell: false
Em vez disso, requer o uso Subject Alt Name
. Anteriormente, segui este guia sobre como gerar um certificado autoassinado: https://devcenter.heroku.com/articles/ssl-certificate-self que funcionou muito bem porque exigi os arquivos server.crt
e server.key
para o que estou fazendo. Agora, preciso gerar novos certificados que incluam, no SAN
entanto, todas as minhas tentativas de fazê-lo não funcionaram com o Chrome 58.
Aqui está o que eu fiz:
Eu segui as etapas no artigo Heroku acima mencionado para gerar a chave. Eu então escrevi um novo arquivo de configuração do OpenSSL:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = san
extensions = san
[ req_distinguished_name ]
countryName = US
stateOrProvinceName = Massachusetts
localityName = Boston
organizationName = MyCompany
[ san ]
subjectAltName = DNS:dev.mycompany.com
Em seguida, gerou o server.crt
com o seguinte comando:
openssl req \
-new \
-key server.key \
-out server.csr \
-config config.cnf \
-sha256 \
-days 3650
Como estou em um Mac, abri o server.crt
arquivo com o Keychain e o adicionei aos meus Certificados do sistema. Eu então o defino Always Trust
.
Com exceção do arquivo de configuração para definir o valor da SAN, foram etapas semelhantes que usei nas versões anteriores do Chrome para gerar e confiar no certificado autoassinado.
No entanto, depois disso, ainda recebo o ERR_CERT_COMMON_NAME_INVALID
no Chrome 58.
fonte
-config <(cat /System/Library/OpenSSL/openssl.cnf ; printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')
dev.company.name
paralocalhost
e isso funcionou para servir o site de desenvolvimento local do localhost. No macOS, também tive que adicionar o certificado ao Keychain e definir o SSL como "Sempre confie".No Windows, salve este script na sua pasta SSL como makeCERT.bat. Ele criará esses arquivos: example.cnf, example.crt, example.key
fonte
Aqui está uma solução que funciona para mim:
Criar chave e certificado CA
Crie server_rootCA.csr.cnf
Criar arquivo de configuração v3.ext
Criar chave do servidor
Criar certificado de servidor
Adicione certificado e chave ao arquivo do site Apache2, seção HTTPS (porta 443)
Copie server_rootCA.pem do servidor para sua máquina.
.. e adicione-o ao navegador Chromium
VOCÊ ESTÁ TODO FEITO!
PS Em vez de criar um par de certificação CA e servidor funcional (conforme as instruções acima), você pode simplesmente desativar os cabeçalhos HSTS na configuração do servidor HTTP. Isso impedirá o Chromium de aplicar o HTTPS e permitirá que os usuários cliquem em "Avançado → avance para your.url (inseguro)" sem precisar obter e instalar seu certificado CA personalizado (server_rootCA.pem). Em outras palavras, ter que desativar o HSTS permitirá que seu site seja exibido publicamente por HTTP e / ou conexão HTTPS insegura (cuidado!).
Para o Apache2, adicione o seguinte ao arquivo do site, seção HTTP (porta 80)
Testado no Debian / Apache2.4 + Debian / Chromium 59
https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58
fonte
-config <( cat server_rootCA.csr.cnf )
vez de apenas-config server_rootCA.csr.cnf
?Existem várias ótimas respostas que dão exemplos de como fazer isso funcionar, mas nenhuma que explica onde as coisas deram errado em sua tentativa. O OpenSSL pode ser bastante intuitivo algumas vezes, por isso vale a pena percorrer.
Primeiro, como um aparte, o OpenSSL usa como padrão ignorar qualquer valor de nome distinto fornecido na configuração. Se você quiser usá-los, você deve adicionar
prompt = no
à sua configuração. Além disso, o comando conforme escrito gera apenas uma solicitação de certificado, não um certificado em si, portanto, o-days
comando não faz nada.Se você gerar sua solicitação de certificado usando este comando, você forneceu e inspecionou o resultado, o Nome Alt do Assunto está presente:
Mas se você gerar o certificado usando o comando no link heroku e inspecionar o resultado, o Nome Alt do Assunto estará ausente:
O motivo é que, por padrão, o OpenSSL não copia extensões da solicitação para o certificado. Normalmente, o certificado seria criado / assinado por uma CA com base em uma solicitação de um cliente, e algumas extensões poderiam conceder ao certificado mais poder do que a CA pretendia, caso confiassem cegamente nas extensões definidas na solicitação.
Existem maneiras de dizer ao OpenSSL para copiar as extensões, mas IMHO é mais trabalhoso do que apenas fornecer as extensões em um arquivo de configuração quando você gera o certificado.
Se você tentar usar seu arquivo de configuração existente, ele não funcionará porque a seção de nível superior está marcada
[req]
para que essas configurações se apliquem apenas ao comando req e não ao comando x509. Não é necessário ter um marcador de seção de nível superior; portanto, você pode simplesmente remover a primeira linha e, em seguida, funcionará bem para gerar solicitações ou certificado.Como alternativa, você pode usar o
-x509
argumento doreq
comando para gerar um certificado autoassinado em um único comando, em vez de primeiro criar uma solicitação e depois um certificado. Nesse caso, não é necessário remover a[req]
linha de seção, pois essa seção é lida e usada pelo comando req.Para recapitular, aqui está o arquivo de configuração modificado usado nos comandos acima:
fonte
Minha solução é manter o principal
openssl.cnf
como está e, no final, adicionar uma nova seção, como[ cert_www.example.com ]
onde www.example.com é o site para o qual desejo criar um certificado e, nele, colocar o quesubjectAltName
eu precisaria (e algo mais). Obviamente, a seção pode ter o nome que você desejar.Depois disso, eu posso executar o
openssl req
comando como antes, apenas adicionando-extensions cert_www.example.com
o conteúdo a ser escolhido e adiciono-subj
para adicionar diretamente todas as informações de DN.Não se esqueça de verificar o conteúdo do certificado após sua criação e antes de seu uso, com
openssl x509 -text
fonte
Script Bash com configuração criada em
Como um script de shell que deve funcionar em plataformas com bash. Assume um
HOSTNAME
conjunto de env para o shell ou fornece um nome de host de sua escolha, por exemploself_signed_cert.sh test
O procedimento acima injeta mais ou menos as informações mínimas necessárias sobre o openssl.
Observe que é incluído extra
DNS:localhost
como uma SAN para permitir testes via host local com mais facilidade. Remova esse bit extra do script, se você não quiser.Crédito
A resposta de bcardarella é ótima (não é possível comentar / votar devido à insuficiência de representantes). No entanto, a resposta usa um local de arquivo de configuração openssl existente que é específico da plataforma ... portanto:
Obviamente, seria necessário simplesmente encontrar o arquivo de configuração openssl para sua própria plataforma e substituir o local correto.
Teste
Para uma maneira de testar, importe
test.cert.pem
para as autoridades do chromechrome://settings/certificates
e:E depois do teste
fonte