Way*_*yne 38 security ssl ios11 xcode9
我使用"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
Run Code Online (Sandbox Code Playgroud)
以前适用于iOS 10的内容在IO 11中不再有效.
我知道iOS 11不再支持以下内容:
除了一个SHA-1指纹外,证书不使用这些,但也列出了SHA-256指纹.
通过添加以下内容,我们可以绕过ATS(App Transport Security)错误:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mydomain.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
通过将根/锚证书安装到手机本身也可以在不需要将mydomain.com列入白名单的情况下工作.
这是否意味着ATS不再支持自签名证书?
这曾经在iOS 10中工作:
SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)certs);
Run Code Online (Sandbox Code Playgroud)
使用NSMutableURLRequest在Mac上显示许多故障和安装根证书进入"系统"后密钥库SecTrustSetAnchorCertificates成功.这是在macOS 10.12.6上完成的.
nscurl --verbose --ats-diagnostics https://
Run Code Online (Sandbox Code Playgroud)
如何使用自定义证书进行此工作,但无需安装证书或将域列入白名单?
小智 3
不久前,macOS 开始强制要求 CA 证书不能同时用作终端实体(例如 Web 服务器)证书。有没有可能iOS在10到11之间添加了这个要求?
如果是这样,解决方法很简单:创建自签名 CA 证书,并使用该证书颁发 Web 服务器证书。CA 证书(basicConstraints:CA=True)是您的信任存储中的信任锚;终端实体证书(省略 basicConstraints;extendedKeyUsage=serverAuth)由 Web 服务器提供。只是不允许您再对两者使用完全相同的证书。
(这应该是一条评论,但我还没有足够的点来评论。)
| 归档时间: |
|
| 查看次数: |
9620 次 |
| 最近记录: |