【发布时间】:2020-05-06 17:12:02
【问题描述】:
我正在尝试使用 SSLSocket 使用 TLS 连接到应该已经具有正确证书的服务器。但是客户端一直在崩溃。
这是网站上的 SSL 检查器:
虽然这是代码(主机名和端口已更正):
val SSLSocketFactory = SSLSocketFactory.getDefault() as SSLSocketFactory
val socket: SSLSocket = factory.createSocket(address, port) as SSLSocket
socket.startHandshake()
当代码到达握手时,它会因以下错误而崩溃:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
知道为什么会发生这种情况吗?我使用 TLS 对服务器进行的另一个 HTTPS 调用运行良好,所以我认为问题不在于服务器(而且我看到的所有答案都有这种类型的回复)。
【问题讨论】:
-
由于您尝试访问的域未知,我只能猜测:您正在尝试访问需要 SNI 的服务器。如果您不使用 SNI,您将获得与预期不同的证书,并且验证失败。通过 SSLLabs 检查您的域,以检查您的域是否需要 SNI 或是否存在其他问题。
-
我的总体评分为 A。看来我们不使用 SNI,因为我们现在只有一个域和一个证书。
-
很难说到底发生了什么。如果您可以共享域,则可以仔细查看。请注意,仅仅因为您只有一个域并不意味着您不需要 SNI - 这取决于服务器的设置。但是,如果 ssllabs 对 SNI 只字未提,那么您可能就不需要了。
-
我不认为 SNI 是问题所在。也许我必须将 GoDaddy 的证书添加到客户端?现在我使用的是默认值,仅此而已
标签: android sockets ssl tls1.2