CloudKit端点SSL证书主机名问题

时间:2016-03-15 20:18:03

标签: ssl apache-httpclient-4.x cloudkit

我正在使用Apache HttpClient 4.5.2来制作CloudKit Web API请求。当我向CloudKit端点URL(https://api.apple-cloudkit.com/[...])发送请求时,出现以下错误:

javax.net.ssl.SSLException: Certificate for <api.apple-cloudkit.com> doesn't match any of the subject alternative names: [*.icloud.com]

我不是SSL的专家,但看起来Apple正在为api.apple-cloudkit.com提供仅对*.icloud.com有效的证书。我明白了吗?

或者如果证书是正确的,那么为什么HttpClient会抱怨?

1 个答案:

答案 0 :(得分:1)

您使用的库或底层平台似乎不支持Server Name Indication (SNI)。如果没有SNI,你会得到:

$ openssl s_client -connect api.apple-cloudkit.com:443 | openssl x509 -text
...
Subject: CN=*.icloud.com, 

但是当使用SNI时,您会获得不同的证书:

$ openssl s_client -connect api.apple-cloudkit.com:443 \
   -servername api.apple-cloudkit.com | openssl x509 -text
...
Subject: ...CN=cdn.apple-cloudkit.com
X509v3 Subject Alternative Name: 
  DNS:api.apple-cloudkit.com, DNS:cdn.apple-cloudkit.com

已知旧版本的Apache HTTPClient库缺少对SNI的支持,因此请确保使用最新版本。