当我试图在服务器和客户端之间建立一个相互认证时,我会得到下面的错误。
服务器和客户端之间的时间完全相同,服务器和客户端的证书也是合适的。造成此错误的原因是什么?发生此错误的可能方法是什么?
Thread-10, WRITE: TLSv1 Change Cipher Spec, length = 1
[Raw write]: length = 6
0000: 14 03 01 00 01 01 ......
*** Finished
verify_data: { 130, 243, 38, 76, 253, 223, 88, 181, 223, 28, 110, 123 }
***
[write] MD5 and SHA1 hashes: len = 16
0000: 14 00 00 0C 82 F3 26 4C FD DF 58 B5 DF 1C 6E 7B ......&L..X...n.
Padded plaintext before ENCRYPTION: len = 48
0000: 14 00 00 0C 82 F3 26 4C FD DF 58 B5 DF 1C 6E 7B ......&L..X...n.
0010: F5 44 95 0D 5A D0 8E 6F 40 89 10 2D 00 5F BB CF .D..Z..o@..-._..
0020: 30 D1 C6 06 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0...............
Thread-8, WRITE: TLSv1 Handshake, length = 48
Thread-8, waiting for close_notify or alert: state 1
[Raw read]: length = 5
0000: 15 03 01 00 02 .....
[Raw read]: length = 2
0000: 02 2E ..
Thread-8, READ: TLSv1 Alert, length = 2
Thread-8, RECV TLSv1 ALERT: fatal, certificate_unknown
%% Invalidated: [Session-4, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA]
Thread-8, called closeSocket()
Thread-8, Exception while waiting for close javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
Thread-8, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
Thread-8, called close()
Thread-8, called closeInternal(true)非常感谢你的帮助。
发布于 2014-06-22 11:06:11
好吧,你说:
证书在服务器和客户端都是正确的。
但至少有一个系统不同意:
收到致命警报: certificate_unknown
此消息意味着一方(您没有说明您是显示客户端日志还是服务器端日志)收到了来自服务器的明确警告消息,即类“致命”和值46 (0x2E,又名"certificate_unknown")。正如TLS 1.0标准中所指定的:
certificate_unknown
Some other (unspecified) issue arose in processing the
certificate, rendering it unacceptable.“其他”意味着它不是证书过期或撤销的问题,也不是使用不受支持的加密算法的问题。接收到的证书可能有许多“不可接受”的原因,其中最重要的原因是无法从先验已知的可信根CA构建有效链,直到证书本身(通常,在这种情况下,系统应该发送"unknown_ca“警报,但许多系统在向证书报告错误时没有这样的精确性)。
为了进一步调查这一问题,你应该:
还请记住,客户端证书只对身份验证有意义,而不是作为授权。即使客户端发送了一个证书,服务器可以对受信任的根进行验证,这也只会告诉位于行另一端的服务器。仍然要由服务器来决定是否允许该特定客户端继续工作。这通常需要将客户端证书映射到身份或角色,例如从证书中提取特定字段。这个过程完全超出了TLS本身的范围,但是仍然必须发生,所以在服务器端有一些您可能希望检查的软件和一些配置。
在另一个方向(由客户机验证服务器的证书),规则是在RFC 2818中指定的,至少在HTTPS的上下文中是这样的:预期的服务器名称(从目标URL中提取)应该出现在服务器的证书中。在HTTPS之外,由每个客户端应用程序来决定他们从服务器获得的证书是否正确,即证书是否有效(由受信任的CA等正确地颁发),而且标识的服务器确实是客户应该与之交谈的服务器。再来一次配置。
https://security.stackexchange.com/questions/61578
复制相似问题