在过去的几天里,我们一直在尝试使用 TLS 设置来设置 Fisheye。我们已经完成了使用公司内部 CA 设置 TrustStore 并使用主机级别证书设置单独密钥库的过程。然后,我们使用排除和包含协议的 ssl 设置更新了 config.xml 文件。这是这样的:
<web-server>
<http bind=":80"/>
<ssl truststore="/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts"
keystore="/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/hosts.jks"
keystore-password="****"
bind=":443" truststore-password="*****">
<proxy-info/>
<excludeProtocols>
<protocol>SSLv1</protocol>
<protocol>SSLv2</protocol>
<protocol>SSLv3</protocol>
<protocol>TLSv1</protocol>
<protocol>TLSv1.1</protocol>
</excludeProtocols>
<includeProtocols>
<protocol>TLSv1.2</protocol>
</includeProtocols>
</ssl>
</web-server>
经过测试,我们在浏览器中不断收到以下错误。
由于我们使用的是最新版本的 Chrome,我怀疑这与 Web 服务器使用的密码或密码套件有关。但是,我找不到任何关于如何为 fisheye config.xml 设置它们的文档。我发现了一些使用反向代理服务器的插件,但是,这不是我们的选择。我还找到了一篇与密钥库类型相关的文章,但这对我们没有帮助。如果有任何关于如何在 config.xml 文件中设置密码或密码套件的文档。这将对我们有很大帮助。
如果这需要直接对 apache 进行更改,我们也对此持开放态度。
最后,如果这是发布此类问题的错误论坛,请告诉我们,我们会将其移至正确的论坛。
2019 年 4 月 23 日更新:Tim Brigham,感谢您的指导,
在运行以下命令时:
openssl s_client -connect fisheyetest.us.corp:443 -tls1_2
我们收到以下输出:
CONNECTED(00000005)
140735531881416:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.3/libressl/ssl/s23_clnt.c:541:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 318 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
---
看来协商没有得到密码并且在尝试使用 SSLv3 时失败。有没有办法改变它。
更新:2019 年 4 月 25 日在昨晚和今天猛烈抨击这件事之后,我一直没能取得太大进展。这是我尝试过的: - 从 config.xml 文件中删除包含和排除的协议 - 检查密钥库的权限。- 查看日志(与 TLS 或 SSL 相关的错误或与密钥库或信任库相关的错误) - 将密钥库类型从 JKS 更改为 pkcs12,反之亦然
使用 openssl 命令提供了相同的确切错误。如果我删除 -tls1_2 参数,它也会这样做。
我被这个难住了。我真的很惊讶这是如此困难。任何额外的建议将不胜感激。
在您执行任何其他操作之前,您需要检查您的实例实际提供的密码。有几种方法可以做到这一点,使用openssl s_client 或 nmap或者我更喜欢使用Wireshark 来捕获 SSL 握手
一旦您确切地确定了您提供的内容,就应该很容易看出您的连接失败的原因。
编辑:根据您的输出,您没有提供服务器证书。它应该几乎在“已连接”输出下方列出。我建议暂时关闭所有 excludeprotocol 条目,然后找出为什么没有提供您的证书。它可能像密钥库的权限或 / 密钥库的格式 / 需要传入证书名称一样简单。
3天后我能够弄清楚。啊!。我必须将整个证书链包含在 p12 文件中,然后以非 pkcs12 格式导入密钥库。在信任库中有我的 ca 引用是不够的。这是我用来让它工作的命令
首先,我使用以下命令生成了一个组合的 pkcs12 格式文件 (cert.p12)。
二、新建一个带有pkcs12格式文件的store:
最后,我使用适当的设置更新了 config.xml 文件:
重新启动,它出现了。这是一个巨大的痛苦。没有日志,没有错误,文档方面也没有太多。
我尝试了 openssl 命令
但这没有帮助。它一直告诉我:
必须有一些更好的工具来帮助诊断这些问题,或者 Atlassian / Jetty / Tomcat 应该创建这个工具。
谢谢
我们在非常安静的码头遇到了同样的问题。
最终解决方案是:JKS 信任库必须包含与 JKS 信任库本身具有相同密码的密钥(私有/公共)。