Webseal 6.1 の背後にあるバックエンドに接続するネイティブ IOS アプリケーションがあります。これはもともと IOS 7 を対象として書かれており、バックエンド サーバーとの通信に NSURLConnection を多用しています。
デバイスを IOS 9 にアップグレードするまで、このアプリケーションは問題なく動作していました。そのため、問題の原因を調査したところ、IOS 9 で導入された App Transport Security が原因で、アプリケーションがバックエンドに強制的に接続されていることがわかりました。 TLS 1.2 接続プロトコルを使用します。
この問題の解決策を探すのに何時間も費やしましたが、常に次の解決策にたどり着きました。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>my-server-domain.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow insecure HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
</dict>
</dict>
上記の info.plist の追加は問題を解決せず、 を返してCFNetwork SSLHandshake failed (-9824)
います。それで、さらに答えを探したところ、使用できる別のキーがあることがわかりました。そこで、plist に以下を追加しました。 NSTemporaryExceptionRequiresForwardSecrecy
に設定しNO
ます。それでもSSLエラーは彼らのもので、これはエラーコードですCFNetwork SSLHandshake failed (-9801)
.
私が偶然見つけた別のブログではtemporary
、これは IOS 9 Beta を対象としているため、キー を使用しないでtemporary
ください。NSTemporaryExceptionAllowsInsecureHTTPLoads
NSExceptionAllowsInsecureHTTPLoads
NSTemporaryExceptionMinimumTLSVersion
NSExceptionMinimumTLSVersion
NSTemporaryExceptionRequiresForwardSecrecy
NSExceptionRequiresForwardSecrecy
上記のプロパティのキーと値のさまざまな組み合わせを試しましたが、エラーは同じです。
私が見つけた別の解決策は、IOS 9 の厳密なトランスポート チェックをオフにすることです。
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections -->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
しかし、これも機能していません。現在、この問題で立ち往生しており、アプリケーションが使用できません。
トランスポートに TLS 1.2 を使用するようにバックエンドを修正することでこれを修正できることはわかっていますが、現時点ではこれはオプションではありません。現時点で唯一受け入れられるのは、クライアント アプリを変更することです。
私のアプリケーションを機能させるために、誰かが不足している構成を教えてくれることを願っています。ありがとうございました。