修正方法に加えて、これがなぜ起こっているのかについてより多くのコンテキストが必要な場合は、以下をお読みください。
iOS 9の導入により、アプリとWebサービス間の接続のセキュリティを向上させるには、アプリとそのWebサービス間の安全な接続がベストプラクティスに従う必要があります。ベストプラクティスの動作は、App Transport Securityによって次のように実施されます。
- 偶発的な開示を防止し、
- 安全なデフォルトの動作を提供します。
App Transport Securityの技術情報で説明されているように、Webサービスと通信する場合、App Transport Securityには次の要件と動作があります。
- サーバーは、少なくともトランスポート層セキュリティ(TLS)プロトコルバージョン1.2をサポートする必要があります。
- 接続暗号は、転送秘密を提供するものに限定されます(以下の暗号のリストを参照してください)。
- 証明書は、SHA256以上の署名ハッシュアルゴリズムを使用して、2048ビット以上のRSAキーまたは256ビット以上の楕円曲線(ECC)キーで署名する必要があります。
- 無効な証明書はハード障害となり、接続されません。
言い換えると、Webサービスリクエストは次の条件を満たしている必要があります。a。)HTTPSを使用し、b。)前方秘密性を備えたTLS v1.2を使用して暗号化されている。
ただし、他の投稿で述べたように、アプリので安全でないドメインを指定することにより、App Transport Securityからこの新しい動作を上書きできますInfo.plist
。
上書きするには、NSAppTransportSecurity
> NSExceptionDomains
辞書プロパティをに追加する必要がありますInfo.plist
。次に、WebサービスのドメインをNSExceptionDomains
辞書に追加します。
たとえば、ホストwww.yourwebservicehost.com上のWebサービスのApp Transport Security動作をバイパスする場合は、次のようにします。
Xcodeでアプリを開きます。
Info.plist
Project Navigatorでファイルを見つけて「右マウス」でクリックし、[開く ] > [ ソースコード ]メニューオプションを選択します。プロパティリストファイルが右側のペインに表示されます。
次のプロパティブロックをメインのプロパティディクショナリ内に配置します(最初のの下<dict>
)。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
追加のドメインに例外を提供する必要がある場合は、その下に別のディクショナリプロパティを追加しますNSExceptionDomains
。
上記のキーの詳細については、このテクニカルノートをご覧ください。