我使用 NSMutableURLRequest
租赁自签名证书,当证书使用 SecTrustSetAnchorCertificates
IOS 11
的自定义证书锚定时,出现以下错误消息:
refreshPreferences: HangTracerEnabled: 1
refreshPreferences: HangTracerDuration: 500
refreshPreferences: ActivationLoggingEnabled: 0 ActivationLoggingTaskedOffByDA:0
ATS failed system trust
System Trust failed for [1:0x1c417dc40]
TIC SSL Trust Error [1:0x1c417dc40]: 3:0
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
Task <721D712D-FDBD-4F52-8C9F-EEEA28104E73>.<1> HTTP load failed (error code: -1200 [3:-9802])
Task <721D712D-FDBD-4F52-8C9F-EEEA28104E73>.<1> finished with error - code: -1200
过去在 IOS 10
中起作用的东西现在在 IOS 11
中不起作用了。
我知道 IOS 11
不再支持以下内容:
除了一个指纹 SHA-1
之外,证书不使用这些指纹,但是也列出了一个 SHA-256
指纹。
通过添加以下内容,我们可以绕过 ATS (App Transport Security)错误:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mydomain.example</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
通过安装根/锚证书到电话本身也工作,而不需要白名单的 mydomain.example
。
这是否意味着 ATS 不再支持自签名证书?
以下人员在 IOS 10
工作:
SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)certs);
在 Mac 电脑上使用 nscurl
会出现很多故障,在将根证书安装到“ System”Keystore 之后,nscurl
就成功了。
这是我在 macOS 10.12.6
上做的。
nscurl --verbose --ats-diagnostics https://
我如何使用一个自定义证书,但不需要安装证书或白名单的域工作?