美文网首页iOS开发
苹果应用HTTP通信安全

苹果应用HTTP通信安全

作者: 金融程序员 | 来源:发表于2017-03-02 15:29 被阅读0次

    iOS 9和macOS 10.11及以上系统版本,苹果会默认开启App Transport Security(应用通讯安全)模式,要求所有HTTP请求都要使用HTTPS,如果开发者不做任何特殊处理,不规范HTTP请求都会失败。一个符合ATS要求的 HTTPS,应该满足如下条件:

    • HTTPS的TLS(Transport Layer Security)版本不低于1.2
    • HTTPS证书必须是授权机构颁发的证书,或者是用户、或系统已经认可的证书,而自签名证书
    • TLS加密算法Ciphers配置要支持Forward Secrecy(前向保密),即必须是以下算法之一
      • 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

    概念解释

    HTTPS即使用TLS加密的HTTP通信,避免了明文传播,防止第三方窃听;具有校验机制,防止第三方篡改内容;配备身份证书,防止第三方冒充。

    TLS是SSL增强版,具体介绍查看SSL与TLS 区别 以及介绍

    Forward secrecy的大致意思是:用来产生会话密钥(session key)的长期密钥(long-term key)泄露出去,不会造成之前通讯时使用的会话密钥(session key)的泄露,也就不会暴漏以前的通讯内容。如何理解前向安全性?

    ATS模式配置

    1,关闭ATS模式

    如果Server完全不支持HTTPS,我们只能关闭ATS模式。则需要在Info.plist增加配置:

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

    我们非常不建议关闭ATS,特别是应用有账号登陆、涉及到用户隐私、资金的HTTP的,是极其不安全的。

    2,某些服务器关闭ATS模式

    如果只是某个或几个服务器需要关闭ATS,可以增加NSExceptionDomains, 并设置NSExceptionAllowsInsecureHTTPLoadstrueNSIncludesSubdomains表示是否包括子域名.

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>video.futu5.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>
    

    3,降低某些服务器TLS要求

    如果要支持某些TLS低于1.2的服务器,可以增加NSTemporaryExceptionMinimumTLSVersion配置,可设置值为“TLSv1.0”、“TLSv1.1”。

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>video.futu5.com</key>
            <dict>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.0</string>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>
    

    调试工具

    1, 如何查看一个Server是否开启了HTTPS, 以及TLS版本可以用curl命令

    curl https://futu5.com  --verbose 
    * Rebuilt URL to: https://futu5.com/
    *   Trying 119.29.116.90...
    * Connected to futu5.com (119.29.116.90) port 443 (#0)
    * TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    * Server certificate: *.futu5.com
    * Server certificate: Symantec Class 3 Secure Server CA - G4
    * Server certificate: VeriSign Class 3 Public Primary Certification Authority - G5
    

    2, 对一个某个域名应该做怎样的ATS设置,苹果还提供了一个很方便的工具

    nscurl --verbose --ats-diagnostics  https://auth.futu5.com
    

    3, 在Xcode项目中增加环境变量,会有额外的日志

    CFNETWORK_DIAGNOSTICS=1
    

    一些资料

    相关文章

      网友评论

        本文标题:苹果应用HTTP通信安全

        本文链接:https://www.haomeiwen.com/subject/zyxkgttx.html