SSL_ERROR_NO_CYPHER_OVERLAP erro com certificado assinado

3

Minha empresa forneceu um aplicativo baseado em Tomcat / MySQL para um cliente que, por padrão, usa http. A pedido do cliente, eu habilitei isso para usar https, criando um certificado autoassinado. Isso funcionou sujeito ao erro esperado do navegador ao usar um certificado autoassinado.

Depois de um teste de caneta, decidimos que precisamos desabilitar alguns protocolos ssl e cifras reprovados, então alterei o conector ssl no meu tomcat server.xml para ficar assim:

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="150" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2,TLSv1.1" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_WITH_AES_128_GCM_SHA256"
    keystoreFile="/path/to/keystore/file"
    keystorePass="password" />

Isso satisfez o teste da caneta e o aplicativo continuou funcionando nos três principais navegadores (Chrome, Firefox e IE). No entanto, o teste da caneta também sinalizou que, idealmente, não deveríamos estar usando um certificado autoassinado, seguindo estes guias , criei um CSR e consegui que o cliente criasse um certificado assinado em seu domínio interno (o servidor pode ser acessado por um par de URLs diferentes, portanto, a necessidade de criar um CSR com uma SAN).

Eu adicionei o certificado a um novo keystore e alterei o caminho no arquivo server.xml apropriadamente. Agora, quando tento conectar recebo o seguinte erro (isso é do Firefox, mas todos os navegadores produzem um erro semelhante):

Secure Connection Failed

An error occurred during a connection to 172.31.1.36:8443. Cannot communicate securely with peer: no common encryption algorithm(s). Error code: SSL_ERROR_NO_CYPHER_OVERLAP

The page you are trying to view cannot be shown because the authenticity of the received data could not be verified. Please contact the web site owners to inform them of this problem.

Meu entendimento é que o certificado não controla quais cifras ou protocolos devem ser usados, então não entendo por que isso aconteceu. Este é um erro que cometi ao produzir o CSR ou poderia ser um erro que o cliente fez ao gerar o certificado?

-EDIT -

Parece que estou recebendo erros em todos os lugares que viro. Se eu tentar importar a chave para um armazenamento de chaves, recebo isto:

cat <keyfile> | openssl  pkcs12 -export -out <keystore>.p12
Enter pass phrase:
unable to load certificates

Ou isto:

keytool -importkeystore -srckeystore <keyfile> -srcstoretype pkcs12 -destkeystore <keystore>.jks
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
keytool error: java.io.IOException: toDerInputStream rejects tag type 45

Eu tenho o cliente para me enviar a cadeia de certificados e quando tento importar que recebo este erro:

keytool -import -trustcacerts -alias tomcat -file <certchain>.p7b -keystore <keystorefile>.jks
Enter keystore password:
keytool error: java.lang.Exception: Input not an X.509 certificate

Eu encontrei algumas soluções sobre como converter o arquivo pkcs para x.509, mas depois recebi outros erros, então estou totalmente preso agora.

    
por Darren 09.03.2017 / 17:47

1 resposta

1

A causa principal de todos os problemas foi que o certificado estava no formato errado.

Seguindo as informações aqui Descobri que o certificado estava realmente no formato DER. Eu converti da seguinte forma:

openssl x509 -inform der -in certfile.cer -out new_certfile.pem
    
por 13.03.2017 / 11:17