允许任意加载在 iOS 9.1 模拟器中不起作用
Allow Arbitrary Loads does not work in iOS 9.1 Simulator
尝试在我本地计算机上的 VirtualBox VM 上建立到服务器的 NSURLConnection。服务器是一个带有自签名 RSA 2048 位证书的测试环境。
Apache SSL 是这样配置的:
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
SSLCompression off
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
<VirtualHost *:443>
ServerName mydomain.com
DocumentRoot "/var/www/html/example/Web"
SSLEngine On
SSLOptions +StrictRequire
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>
Wireshark 显示客户端 hello 和服务器 hello 发生得很好。但是我们在 /usr/bin/nscurl --ats-diagnostics https://example.com --verbose
中看到客户端应用程序拒绝服务器的证书,因为它无效(它是自签名的;我知道它无效)。
据说您可以将 "Allow Arbitrary Loads" 添加到 Info.plist 以在 iOS 9 中禁用 ATS,但我这样做了,但它什么也没做。客户仍然拒绝自签名证书。
有什么办法可以让这项工作成功吗?我想这可能是 iOS 模拟器特有的问题?
允许任意加载仅覆盖以下内容:
- 禁止 HTTP 请求
- HTTPS 的密钥长度和加密类型要求
它对自签名证书没有影响。要了解如何使用自签名证书,请阅读 Apple 开发者网站上的 Overriding SSL Chain Validation Correctly。基本上,您实现了一个自定义身份验证质询处理程序,如果保护 space 的身份验证方法不是 "server trust",则告诉 URL 加载系统执行默认处理。否则,要么:
一个。检查证书的 public 密钥以确保它是您的,或者
乙。修改信任对象,评估如下:
- 在您的应用中提供证书副本。
- 加载证书。
- 将其添加为信任对象中的锚点
- 评估信任对象,
Apple 文档提供了应该有所帮助的详细示例。
尝试在我本地计算机上的 VirtualBox VM 上建立到服务器的 NSURLConnection。服务器是一个带有自签名 RSA 2048 位证书的测试环境。
Apache SSL 是这样配置的:
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
SSLCompression off
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
<VirtualHost *:443>
ServerName mydomain.com
DocumentRoot "/var/www/html/example/Web"
SSLEngine On
SSLOptions +StrictRequire
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>
Wireshark 显示客户端 hello 和服务器 hello 发生得很好。但是我们在 /usr/bin/nscurl --ats-diagnostics https://example.com --verbose
中看到客户端应用程序拒绝服务器的证书,因为它无效(它是自签名的;我知道它无效)。
据说您可以将 "Allow Arbitrary Loads" 添加到 Info.plist 以在 iOS 9 中禁用 ATS,但我这样做了,但它什么也没做。客户仍然拒绝自签名证书。
有什么办法可以让这项工作成功吗?我想这可能是 iOS 模拟器特有的问题?
允许任意加载仅覆盖以下内容:
- 禁止 HTTP 请求
- HTTPS 的密钥长度和加密类型要求
它对自签名证书没有影响。要了解如何使用自签名证书,请阅读 Apple 开发者网站上的 Overriding SSL Chain Validation Correctly。基本上,您实现了一个自定义身份验证质询处理程序,如果保护 space 的身份验证方法不是 "server trust",则告诉 URL 加载系统执行默认处理。否则,要么:
一个。检查证书的 public 密钥以确保它是您的,或者
乙。修改信任对象,评估如下:
- 在您的应用中提供证书副本。
- 加载证书。
- 将其添加为信任对象中的锚点
- 评估信任对象,
Apple 文档提供了应该有所帮助的详细示例。