Crucible Fisheye 服务器的 TLS 设置

Crucible Fisheye 服务器的 TLS 设置

过去几天,我们一直在尝试使用 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 进行更改,我们也可以接受。

最后,如果这是发布此类问题的错误论坛,请告知我们,我们会将其移至正确的论坛。

更新 4/23/19: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 参数,也会出现同样的错误。

我对这个问题感到困惑。我真的很惊讶这个问题竟然如此困难。如果您能提供任何额外的建议,我将不胜感激。

答案1

在执行任何其他操作之前,您需要检查实例实际提供的密码。有几种方法可以做到这一点,使用openssl s_client 或 nmap或者我更喜欢使用使用 Wireshark 捕获 SSL 握手

一旦您明确了您所提供的内容,就应该很容易明白为什么您的连接失败。

编辑:根据您的输出,您没有提供服务器证书。它应该列在“已连接”输出的正下方。我建议暂时关闭所有 excludeprotocol 条目,然后找出未提供证书的原因。这可能是密钥库上的权限或密钥库的格式需要传入证书名称之类的简单问题。

答案2

三天后我终于搞清楚了。哎呀!我必须将整个证书链包含在 p12 文件中,然后以非 pkcs12 格式导入密钥库。信任库中有我的 ca 引用还不够。以下是我用来使它工作的命令

首先,我使用以下命令生成了一个组合的 pkcs12 格式的文件 (cert.p12)。

openssl pkcs12 -export -out cert.p12 -in host.pem -inkey key.pem -CAfile cacerts_root.pem -caname root -name jetty -certfile cacerts_int.pem

第二,创建一个具有 pkcs12 格式文件的新商店:

keytool -importkeystore -deststorepass ***** -destkeypass ***** -destkeystore /path/to/jks-file/host.p12 -srckeystore cert.p12 -srcstoretype PKCS12 -srcstorepass **** -alias jetty

最后,我使用适当的设置更新了 config.xml 文件:

<web-server>
<http bind=":80"/>
<ssl truststore="/path/to/trust-file/cacerts"
truststore-password="*******"
keystore="/path/to/jks-file/host.p12"
keystore-password="********" bind=":443"><proxy-info/>
</ssl>
</web-server>

重启后,它就出现了。这真是太麻烦了。没有日志,没有错误可参考,文档方面也没有什么内容。 

我尝试了 openssl 命令

openssl s_client -connect my.web.site:443

但这没有帮助。它一直告诉我:

No client certificate CA names sent 

必须有一些更好的工具来帮助诊断这些问题,或者 Atlassian / Jetty / Tomcat 应该创建这个工具。 

谢谢

答案3

我们也遇到了同样的问题,码头非常安静。

最终的解决方案是:JKS 信任库必须包含一个与 JKS 信任库本身具有相同密码的密钥(私有/公共)。

相关内容