更新时间:2024-08-01 GMT+08:00
如何检查SSL/TLS认证异常?
当您使用ELB的HTTPS或TLS监听器时,可能会遇到SSL/TLS认证协商失败导致的错误。由于协商过程涉及多个步骤,因此可能出现多种错误,您可以参考以下内容从客户端收到响应进行排查。
本文以java语言为例,提供常见错误排查建议。
排查项一:服务器未提供证书满足客户端校验要求
- 报错信息:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
- 异常原因:ELB服务器没有提供证书或者提供的证书不符合客户端的校验要求,导致握SSL/TLS手失败。
- 解决方案:
- 请检查监听器上配置的证书是否正确。
- 请确认监听器的TLS安全策略使用的加密套件是否满足客户端要求。
排查项二:证书验证报错
- 报错信息:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
- 异常原因:服务器证书校验时,证书验证报错,可能是证书链不完整或证书颁发机构不受信任。
- 解决方案:将监听器的证书更换为有效的由证书颁发机构(CA)签发的证书。
排查项三:客户端收到的服务器证书主机名与请求主机名不匹配
- 报错信息:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching localhost found
- 异常原因:通常发生在双向认证场景,客户端接收到服务器证书主机名与客户端请求连接的主机名不匹配,即验证localhost失败。
- 解决方案:请检查请求客户端是否携带包含localhost的证书。
排查项四:TLS安全策略的版本不匹配
- 报错信息:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
- 异常原因:客户端和服务器之间无法找到共同支持的SSL/TLS协议版本或加密套件。
- 解决方案:请检查客户端和ELB监听器使用的TLS安全策略的TLS协议版本、加密套件的版本是否匹配。
父主题: 异常检查