SSL握手因'证书未知'而失败
我们有一个当前正在通过HTTP协议运行的应用程序。我们的目标是将其迁移到HTTPS。我们已经做了必要的更改,但是在登录到应用程序时,我收到了“未通过身份验证”的错误消息。SSL握手因'证书未知'而失败
我完全新的SSL世界,所以我在Google上搜索并已抓获Wireshark的跟踪和通信看起来如下:
- 客户端发送[SYN]服务器。
- 服务器向客户端发送[SYN,ACK]。
- 客户端向服务器发送[ACK]。
- 客户端向服务器发送消息“Client Hello”。
- 服务器发送带有消息“服务器您好,证书,服务器您好完成”的公钥
- 警报61,致命级别,说明:证书未知//在此处失败。
请分享你的意见可能出错的地方。我们被困在这里,无法继续前进。
修订
这是一个奇怪的错误。所述Certificate Unknown
应通常由和不一个警报代码陪同。
如果你看到,SSL警告61没有在
enum {
close_notify(0),
unexpected_message(10),
bad_record_mac(20),
decryption_failed_RESERVED(21),
record_overflow(22),
decompression_failure(30),
handshake_failure(40),
no_certificate_RESERVED(41),
bad_certificate(42),
unsupported_certificate(43),
certificate_revoked(44),
certificate_expired(45),
certificate_unknown(46),
illegal_parameter(47),
unknown_ca(48),
access_denied(49),
decode_error(50),
decrypt_error(51),
export_restriction_RESERVED(60),
protocol_version(70),
insufficient_security(71),
internal_error(80),
user_canceled(90),
no_renegotiation(100),
unsupported_extension(110),
(255)
} AlertDescription;
提到不看的痕迹,也很难进一步调查。
它看起来像服务器证书提供的服务器你好是不信任的客户端。
我会建议对此进行测试使用cURL.exe
与-v
选项。
未能提供客户端证书在TLS中并不是真正的错误,并且在此没有发生:服务器只能访问ServerHelloDone。如果服务器'需要'客户端证书并且没有获得,则它会继续或发送handshake_failure警报。客户端发送不受信任的证书或错误的类型是违反TLS协议的。 – EJP
是的,它看起来并没有发生在这里。但是,未能提供客户端证书可能会导致握手失败。这又取决于,目前我还没有看到网络痕迹确实发生了什么。 61也不是我所期望的。不过,我会编辑帖子以删除该帖子以避免混淆。 –
如果将服务器安全证书导入客户端,我们看到此问题得到解决。我们尝试了三种不同的客户端。这是否意味着什么?为什么应该在客户端上安装属于服务器的证书? – Pavan
请添加wireshark trace的屏幕截图,以便我们知道警报来自哪里(客户端或服务器)。 –
听起来客户端无法验证服务器证书,可能是因为客户端不知道或不信任用于签署服务器证书的根证书颁发机构。客户端必须知道根权限,或者客户端需要禁用证书验证(这对安全性不利)。 –
如果我将服务器安全证书导入客户端,我们看到此问题得到解决。我们尝试了三种不同的客户端。这是否意味着什么?为什么应该在客户端上安装属于服务器的证书? – Pavan