我明白了
发生SSL错误,无法与服务器建立安全连接.
在iOS 9上,如果我尝试从亚马逊s3下载文件:https: //s3.amazonaws.com/xyz/qer/IMG_0001.JPG
据我所知,亚马逊s3支持TLS 1.2,请参阅:https://forums.aws.amazon.com/thread.jspa? threadID = 192512
"S3和Kinesis此时支持TLS 1.2." 2015年8月23日晚上9点19分
不知道为什么我会收到此SSL错误.该帐户应配置为利用TLS 1.2?我猜想默认情况下应该"打开".
我不想把这个域放在信息plist上.
编辑:我最终使用
<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>
Run Code Online (Sandbox Code Playgroud)
Ana*_*hat 39
编辑2016-01-03: s3.amazonaws.com的续订证书使用SHA256算法并符合ATS要求.
原始答案:s3.amazonaws.com使用不符合ATS要求的SHA1证书,导致硬故障.根据App Transport Security Technote,iOS9中的ATS具有以下要求:
服务器必须至少支持传输层安全性(TLS)协议版本1.2.
连接密码仅限于那些提供前向保密的密码,即
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
证书必须使用SHA256或更好的签名哈希算法进行签名,使用2048位或更高的RSA密钥或256位或更高的椭圆曲线(ECC)密钥.
无效的证书导致硬故障并且没有连接.
SSL Labs的SSL服务器测试(https://www.ssllabs.com/ssltest/analyze.html?d=s3.amazonaws.com)包含iOS 9中ATS的握手模拟,表明s3.amazonaws.com失败.
mie*_*ciu 12
iOS 9应用程序成功到达SSL端点需要两件事(S3只是一个例子):
在服务器上启用了Forward Secrecy(https://www.wikiwand.com/en/Forward_secrecy).
AWS S3目前不支持此功能.解决方法是,您可以在S3存储桶前配置AWS CloudFront服务(支持FS).设置相当容易.如果您使用的是CORS,请记住需要通过CloudFront代理传递正确的标头.
SHA-256保护服务器上的SSL证书.
一旦您通过Cloudfront获得文件,当访问URL(https://somethinghashed1234wasdfawer421.cloudfront.net)时,您会注意到那里的SSL证书使用SHA-1.有多糟糕......解决方案是使用您的私有SHA-256 SSL证书来保护它.为此,您需要在域中为Cloudfront端点指定CNAME.这将允许您使用自己的SSL证书保护存储桶.只需将您的DNS配置为将条目指向cloudfront-bucket.mydomain.com即可查看丑陋的内容1234wasdfawer421.cloudfront.net.将您的SSL证书上传到amazon并在Cloudfront分发设置中设置SSL保护.瞧!
提到的所有内容都可以从AWS控制台轻松点击(除了上传SSL证书,需要通过AWS CLI完成).
mar*_*ada 11
S3是目前不完全符合,按照这个帖子在AWS的博客,他们的官方建议是,加入该组按键到你排除从应用传输安全S3 Info.plist
:
<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>
Run Code Online (Sandbox Code Playgroud)
2015年10月27日更新:正如Pol在评论中指出的那样,即使这是AWS的官方回答,支持论坛中的Apple工程师也说这实际上是一个错误:
事实证明,NSExceptionRequiresForwardSecrecy放宽SHA-2/256要求是一个错误; NSExceptionRequiresForwardSecrecy的预期行为是App Transport Security Technote中记录的行为,即它应该只启用特定的密码套件.
我们的计划是在将来的某个时候解决这个问题.我们希望以某种兼容的方式解决这个问题,因此错误地使用NSExceptionRequiresForwardSecrecy来禁用SHA-2/256要求的人不会破坏.然而,预测未来总是一个挑战.这带给我们你现在应该做的事情.[这篇文章的先前版本给出了较少的具体建议.以下是一个收紧的更新.]在与ATS Engineering讨论后,我们的建议如下:
如果您使用的是特定的托管服务,则应咨询您的托管服务以获取最新的建议.
在这种情况下,除了SHA-2/256证书签名要求外,服务器与ATS完全兼容,我们建议您使用NSExceptionAllowsInsecureHTTPLoads准确记录该事务状态.
您应该尽快使服务器与ATS完全兼容.
发生这种情况时,您应该使用更安全的ATS设置更新您的应用.
我应该强调NSExceptionAllowsInsecureHTTPLoads实际上并不安全.当它在iOS 8上运行时,它与您的应用程序一样安全.相反,它意味着您的应用程序无法从ATS提供的额外安全性中受益.分享和享受
强调我的.请注意,当前的计划是以不会破坏过去NSExceptionRequiresForwardSecrecy
解决此问题的人的行为来修复错误,因此上述内容仍然是可行的答案.
只是张贴指出亚马逊证书的问题是他们使用SHA-1和app传输安全性需要SHA-2/256.
NSExceptionRequiresForwardSecrecy工作的事实是apple dev论坛中记录的错误.根据文档和链接线程中的Apple工程师,"更好"的解决方案将是
<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>
Run Code Online (Sandbox Code Playgroud)
我非常宽松地使用"更好"这个术语,并且只是意味着一个解决方案不能解决Apple最终会修复的错误.现在这只是证书问题的修复:)
归档时间: |
|
查看次数: |
8920 次 |
最近记录: |