我的公司向默认使用 http 的客户提供了一个基于 Tomcat/MySQL 的应用程序。应客户的要求,我通过创建自签名证书启用它以使用 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 的解决方案,但后来我遇到了其他错误,所以我现在完全陷入困境。
所有问题的根本原因是证书格式错误。
通过关注此处的信息,我发现证书实际上是 DER 格式。我将其转换如下:
错误消息有点像红鲱鱼。
在为Webfig https访问配置 MikroTik 时,如果您只是创建和使用未经 CA 签名的证书,您将收到此错误。当浏览器看到未签名的证书时,它会吐出错误:
“错误代码:SSL_ERROR_NO_CYPHER_OVERLAP ”
不要钻进兔子洞去调查不兼容的密码或类似的东西:你只需要用 CA 签署你的证书,事情就会按预期工作。
以下是MikroTik特定的清除错误的过程。
警告:
不要只是剪切粘贴:请用合理的值替换我的占位符;-)
创建 CA:
创建证书:
指定证书:
现在“ webfig ”证书已经被 CA 签名了,你最终需要在这里指定它才能使用它:
“ IP ”>“服务”并启用“ www-ssl ”并指定“ webfig ”证书创建和子网HTTPS访问是允许的