7

您运行此代码:

let URL = "https://www.nasa.gov/sites/default/files/wave_earth_mosaic_3.jpg"
let imageData = NSData(contentsOfURL: NSURL(string: URL)!)
UIImage(data: imageData!)

你得到这个:

2015-09-11 16:33:47.433 Cassini [21200:447896] NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)

深入挖掘显示使用了 SHA1 签名。

maximveksler$ openssl s_client -connect www.nasa.gov:443 < /dev/null 2>/dev/null | openssl x509 -text -in /dev/stdin | grep "Signature Algorithm"
    Signature Algorithm: sha1WithRSAEncryption
    Signature Algorithm: sha1WithRSAEncryption

因此,截至 2015 年 9 月 11 日,NASA 正在使用不安全的连接,现在该怎么办?

4

1 回答 1

13

为什么会这样?

因为使用不安全的网络不利于您的用户隐私。

从 iOS9 开始,Apple 将强制您的应用与通过 HTTP 访问的任何资源建立安全连接。这意味着您要连接的服务器需要遵循最新的安全连接最佳实践。

截至 2015 年 9 月,这些包括:

更多信息可以在应用传输安全技术说明中找到

你能做什么?

管理自己的服务器?修理它!确保它们坚固且安全。您可以通过使用shaaaaaaaaaaaaa.com在线测试或使用此处概述的任何方法在本地测试您的服务器是否良好

如果您要连接到其他服务器,则可以选择“白名单”有问题的资源,这是不鼓励的。

降低特定 URL 的安全性

转到您的Info.plist并添加以下条目:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.nasa.gov</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

您的 plist 应如下所示: 在此处输入图像描述

全局关闭应用传输安全

请注意,这是一个非常糟糕的主意。

转到您的Info.plist并添加以下条目:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

您的 plist 应如下所示: 在此处输入图像描述

于 2015-09-11T14:22:24.237 回答