我使用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日志记录)
2条答案
按热度按时间utugiqy61#
我在this post中找到了答案,并将javax.net.debug输出与客户端认证示例进行了比较。我在日志中没有看到CertificateVerify,只有单向ssl步骤,因此没有发送客户端证书。
原因是我从他们的网站上复制了CXF HTTP管道示例,但不知何故,其中包含的ciphersuite过滤器太严格了。
aelbi1ox2#
我需要追踪这个发现了以下内容。
首先,我使用以下命令启用SSL日志记录:
-Djavax.net.debug=ssl:handshake:verbose:keymanager
.接下来,我运行了测试并研究了日志,我看到:
由于
javax.net.ssl|DEBUG . . .
是重复的,因此我将在此答案的其余部分只显示日志的内容。SSL规范(参见https://www.rfc-editor.org/rfc/rfc5246#第7.4.6节)规定:
此[客户端证书消息]是客户端在收到ServerHelloDone消息后可以发送的第一条消息。仅当服务器请求证书时才发送此消息
一旦发送了
ClientKeyExchange
消息,我们就知道没有发送客户端证书,因为规范再次指出:此消息始终由客户端发送。如果发送,它必须紧跟在客户端证书消息之后。否则,它必须是客户端收到ServerHelloDone消息后发送的第一条消息。
由于先打印
ServerHelloDone
消息,然后打印ClientKeyExchange
消息,因此ClientCertificate
消息未发送,因为如果要发送,则需要在SeverHelloDone
之后和ClientKeyExchange
之前立即发送。