从Amazon S3下载iOS 9应用程序SSL错误:TLS 1.2支持
我明白了 发生SSL错误,无法与服务器建立安全连接 被制造出来 在iOS 9上,如果我尝试从amazon s3下载文件: 据我所知,AmazonS3支持TLS1.2 见: S3和Kinesis此时支持TLS 1.2 “此时S3和运动支持TLS 1.2。”2015年8月23日晚上9:19 不确定为什么会出现这个SSL错误。应将帐户配置为利用TLS 1.2? 我猜这应该是默认的“开” 我不想把这个域名放在信息列表上 编辑: 我最终使用了从Amazon S3下载iOS 9应用程序SSL错误:TLS 1.2支持,ssl,ios9,tls1.2,Ssl,Ios9,Tls1.2,我明白了 发生SSL错误,无法与服务器建立安全连接 被制造出来 在iOS 9上,如果我尝试从amazon s3下载文件: 据我所知,AmazonS3支持TLS1.2 见: S3和Kinesis此时支持TLS 1.2 “此时S3和运动支持TLS 1.2。”2015年8月23日晚上9:19 不确定为什么会出现这个SSL错误。应将帐户配置为利用TLS 1.2? 我猜这应该是默认的“开” 我不想把这个域名放在信息列表上 编辑: 我最终使用了 <key>NSAppTransportSecur
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>s3.amazonaws.com</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
NSAppTransportSecurity
NSExceptionDomains
s3.amazonaws.com
NSExceptionRequiresForwardSecretary
n包括多个域
编辑2016-01-03:s3.amazonaws.com的更新证书使用SHA256算法,并符合ATS要求
原始答案:s3.amazonaws.com使用不符合ATS要求的SHA1证书,导致硬故障。根据,iOS9中的ATS具有以下要求:
要使iOS 9应用程序成功到达SSL端点,您需要两件事(S3只是一个示例):
- 服务器上已启用前向保密() AWS S3目前不支持此功能。解决方法是,您可以在S3存储桶前面配置AWS CloudFront服务(支持FS)。 设置是相当容易的。如果您使用的是CORS,请记住需要通过CloudFront代理传递适当的头
- 服务器上受SHA-256保护的SSL证书 一旦您的文件通过Cloudfront可用,当点击URL()时,您会注意到那边的SSL证书使用SHA-1。真糟糕。。。 解决方案是使用您的私有SHA-256 SSL证书来保护此功能。为此,您需要为域中的Cloudfront端点指定CNAME。这将允许您使用自己的SSL证书保护bucket。只需将您的DNS配置为具有指向cloudfront-bucket.mydomain.com的条目,指向丑陋的东西hashed1234wasdfawer421.cloudfront.net。将SSL证书上载到amazon,并在Cloudfront分发设置中设置SSL保护。瞧
所有提到的内容都可以从AWS控制台轻松点击(除了上传SSL证书,这需要通过AWS CLI完成)。根据AWS博客上的说法,由于S3目前不完全兼容,他们的官方建议是通过将这组密钥添加到您的
Info.plist
,将S3从应用程序传输安全中排除:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>amazonaws.com</key>
<dict>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>amazonaws.com.cn</key>
<dict>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
NSAppTransportSecurity
NSExceptionDomains
亚马逊网站
第三方例外最小版本
TLSv1.0
N第三方例外要求转发保密
n包括多个域
亚马逊网站
第三方例外最小版本
TLSv1.0
N第三方例外要求转发保密
n包括多个域
2015年10月27日更新:正如Pol在评论中指出的那样,尽管这是AWS的官方答案,但一位苹果工程师表示这实际上是一个bug: 事实证明,NSExceptionRequiremesForwardSecretary放松了SHA-2/256需求是一个bug;NSExceptionRequiresForwardSecretary的预期行为是应用程序传输安全技术说明中记录的行为,即它应该只启用特定的密码套件 我们的计划是在将来的某个时候修复这个bug。我们希望以某种兼容的方式解决这个问题,因此那些错误地使用NSExceptionRequiresForwardSecretary禁用SHA-2/256要求的人不会违反。然而,预测未来总是一个挑战。 这让我们想到你现在应该做什么。[这篇文章的前一个版本给出了不太具体的建议。以下是一个更新,它使事情变得更加紧张。]在与ATS工程部门讨论后,我们的建议是: 如果你正在使用一个特定的托管服务,你应该咨询你的托管服务,以获得最新的建议 在这种情况下,如果服务器与ATS完全兼容(SHA-2/256证书签名要求除外),我们建议您使用NSExceptionAllowsInsecureHTTPLoads准确记录该状态 您应尽快尝试使您的服务器与ATS完全兼容 那是什么时候
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>s3.amazonaws.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>amazonaws.com</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>