签名证书出现 SSL_ERROR_NO_CYPHER_OVERLAP 错误

签名证书出现 SSL_ERROR_NO_CYPHER_OVERLAP 错误

我的公司向客户提供了一款基于 Tomcat/MySQL 的应用程序,该应用程序默认使用 http。应客户的要求,我通过创建自签名证书启用了该应用程序以使用 https。使用自签名证书时,此方法有效,但会出现预期的浏览器错误。

经过渗透测试后,他们决定我们需要禁用一些弃用的 SSL 协议和密码,因此我修改了 tomcat server.xml 中的 SSL 连接器,使其如下所示:

    <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" />

这满足了渗透测试的要求,应用程序继续在三种主流浏览器(Chrome、Firefox 和 IE)中运行。然而,渗透测试还指出,我们最好不要使用自签名证书,因此,按照以下方法操作这些 指南,我创建了一个 CSR 并让客户创建一个签名到他们内部域的证书(服务器可以通过几个不同的 URL 访问,因此需要创建一个带有 SAN 的 CSR)。

我将证书添加到新的密钥库并适当修改了 server.xml 文件中的路径。现在,当我尝试连接时,出现以下错误(这是来自 Firefox,但所有浏览器都会产生类似的错误):

安全连接失败

连接到 172.31.1.36:8443 时发生错误。无法与对方安全通信:没有通用加密算法。错误代码:SSL_ERROR_NO_CYPHER_OVERLAP

无法显示您尝试查看的页面,因为无法验证所接收数据的真实性。请联系网站所有者以告知他们此问题。

我的理解是,证书不控制应该使用什么密码或协议,所以我不明白为什么会发生这种情况。这是我在生成 CSR 时犯的错误,还是客户在生成证书时犯的错误?

-编辑-

我似乎到处都遇到错误。如果我尝试将密钥导入密钥库,我会得到以下结果:

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

或这个:

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

我让客户向我发送证书链,但当我尝试导入时出现此错误:

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

我找到了一些关于如何将 pkcs 文件转换为 x.509 的解决方案,但随后我又遇到了其他错误,所以我现在完全陷入了困境。

答案1

一切问题的根源都是证书格式错误。

通过关注信息这里我发现该证书实际上是 DER 格式。我将其转换如下:

openssl x509 -inform der -in certfile.cer -out new_certfile.pem

答案2

该错误信息有点误导人。

在配置 MikroTik 时网页图 https访问时,如果您创建并使用未经 CA 签名的证书,则会收到此错误。当浏览器看到未签名的证书时,它会发出以下错误:

错误代码:SSL_ERROR_NO_CYPHER_OVERLAP

不要深入研究不兼容的密码或类似的东西:您只需使用 CA 签署您的证书,一切就会按预期工作。

以下是MikroTik- 清除错误的特定程序。

警告:

不要只是剪切粘贴:请用合理的值替换我的占位符;-)

  • CA你的域名“:将“yourDomain”替换为您组织的域名
  • 状态“:为居住在美国境外的人指定一个县
  • 主题替代名称“: 指定民众路由器的IP
  • ca-crl 主机“:再次指定民众路由器的IP
  • 加州密钥大小“:请注意使用“4096“签名时可以最大化 CPU 并挂起精简配置的模型
  • 根据需要调整其他参数

创建 CA:

/certificate add name=CAyourDomain-template common-name=CAyourDomain country=GB days-valid=3650 key-size=4096 locality="Your City" organization="Your Organization" state=Hertfordshire trusted=yes unit="Technical Services" subject-alt-name="IP:XXX.XXX.XXX.XXX" key-usage=digital-signature,key-cert-sign,crl-sign;

/certificate sign CAyourDomain-template ca-crl-host="XXX.XXX.XXX.XXX" name=CAyourDomain

创建证书:

/certificate add name=webfig-template common-name="webfig" country=GB days-valid=3650 key-size=4096 locality="Your City" organization="Your Organization" state=Hertfordshire trusted=yes unit="Technical Services" subject-alt-name="IP:XXX.XXX.XXX.XXX" key-usage=digital-signature,key-encipherment,data-encipherment,tls-server,tls-client;

/certificate sign webfig-template ca=CAyourDomain name=webfig

/certificate set webfig trusted=yes

指定证书:

现在 ”网页图“证书已经由 CA 签名,您最后需要在这里指定它才能使用它:

知识产权“ > ”服务“并启用”www-ssl“并指定”网页图“证书已创建,子网 HTTPS 访问将允许来自

相关内容