Camel 如何验证java是否在相互身份验证方案中发送客户端证书

4uqofj5v  于 2023-02-08  发布在  Apache
关注(0)|答案(2)|浏览(160)

我使用http conduit元素等设置了Camel和CXF的双向ssl。我向外部方进行了Web服务调用。所有证书均已正确安装(传入流量成功,这是在Tomcat中配置的)。在this发布有关安全重新协商的消息后,我终于收到了来自另一方的响应:HTTP响应403,已禁止。
我已经用javax.net.debug =all和this进行了调试,非常好的解释。我可以在日志中看到安全连接已经成功建立:

*** Finished
verify_data:  { 141, 25, 184, 254, 93, 9, 10, 48, 135, 161, 213, 57 }
***
%% Cached client session: [Session-2, SSL_RSA_WITH_RC4_128_MD5]

并且没有其他错误或警告。我如何验证我的客户端证书是否发送到服务器?(我不能使用Wireshark,但我有javax.net.debug日志记录)

utugiqy6

utugiqy61#

我在this post中找到了答案,并将javax.net.debug输出与客户端认证示例进行了比较。我在日志中没有看到CertificateVerify,只有单向ssl步骤,因此没有发送客户端证书。
原因是我从他们的网站上复制了CXF HTTP管道示例,但不知何故,其中包含的ciphersuite过滤器太严格了。

aelbi1ox

aelbi1ox2#

我需要追踪这个发现了以下内容。
首先,我使用以下命令启用SSL日志记录:-Djavax.net.debug=ssl:handshake:verbose:keymanager.
接下来,我运行了测试并研究了日志,我看到:

javax.net.ssl|DEBUG|22|http-bio-8443-exec-1|2023-02-06 18:01:35.705 GMT|CertificateMessage.java:366|Produced ClientHello handshake message

由于javax.net.ssl|DEBUG . . .是重复的,因此我将在此答案的其余部分只显示日志的内容。

Produced ClientHello handshake message
Consuming ServerHello handshake message
Consuming server Certificate handshake message
Consuming ServerHelloDone handshake message
<<<< THIS IS WHERE Client Cert would appear
Produced ECDHE ClientKeyExchange handshake message

SSL规范(参见https://www.rfc-editor.org/rfc/rfc5246#第7.4.6节)规定:
此[客户端证书消息]是客户端在收到ServerHelloDone消息后可以发送的第一条消息。仅当服务器请求证书时才发送此消息
一旦发送了ClientKeyExchange消息,我们就知道没有发送客户端证书,因为规范再次指出:
此消息始终由客户端发送。如果发送,它必须紧跟在客户端证书消息之后。否则,它必须是客户端收到ServerHelloDone消息后发送的第一条消息。
由于先打印ServerHelloDone消息,然后打印ClientKeyExchange消息,因此ClientCertificate消息未发送,因为如果要发送,则需要在SeverHelloDone之后和ClientKeyExchange之前立即发送。

  • 此测试使用Java 11执行。我手边没有Web库,但这不是SpringBoot应用程序。*

相关问题