web-dev-qa-db-ja.com

IIS 7.5 iOS \ TLSをiOS 9 ATSで動作するように設定する方法

問題:iOS 9では現在ATSが使用されているため、モバイルアプリはWebサービスへの安全な接続を確立できなくなりました。

背景:iOS 9ではApp Transport Securityが導入されています

サーバーセットアップ:Windows Server 2008 R2 SP1(VM)IIS 7.5、digicertからのSSL証明書。Windowsファイアウォールはオフです。

鍵RSA 2048ビット(e 65537)

発行者DigiCert SHA2セキュアサーバーCA

署名アルゴリズムSHA512withRSA

App Transport Securityの要件は次のとおりです:

サーバーは少なくともトランスポート層セキュリティ(TLS)プロトコルバージョン1.2をサポートする必要があります。接続暗号は、前方秘密を提供するものに限定されます(以下の暗号のリストを参照してください)。証明書は、2048ビット以上のRSAキーまたは256ビット以上の楕円曲線を使用して、SHA256以上の署名ハッシュアルゴリズムを使用して署名する必要があります(ECC)キー。無効な証明書はハード障害を引き起こし、接続されません。これらは受け入れられた暗号です:

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

試行されたもの:

  1. モバイルアプリに例外を追加してドメインを機能させることができますが、この安全でない方法を使用したくないので、SSLを修正します。
  2. 使用 IIS暗号 「ベストプラクティス」、「pci」、およびカスタムセットアップを使用しました。暗号スイートを上記のリストだけに変更して、並べ替えてみました。試行するたびにサーバーが再起動し、 SSL Labs が実行されました(キャッシュをクリアした後)。私はFレーティングからA、さらにはA-に成功しましたが、iOS 8と9が安全な接続を確立できなくなっただけです。 (NSURLErrorDomain Code = -1200および_kCFStreamErrorCodeKey = -9806) enter image description here
  3. 復元VMとPowerShellスクリプトを試しました SSL Perfect Forward SecrecyとTLS 1.2の場合はIISをセットアップします パワースクリプトから暗号を編集して、必要なものの最小限のリストに変更しました。

結果:常に類似、AまたはA-の評価。 iOS8とiOS9は安全な接続をネゴシエートできません。ハンドシェイクシミュレーションの結果、SafariおよびiOS製品で「プロトコルまたは暗号スイートの不一致」が発生します。 enter image description hereenter image description here

[〜#〜] update [〜#〜]Apple supportで作業した後、パケットトレースキャプチャを行いました:

$ tcpdump -n -r trace.pcap
reading from file trace.pcap, link-type EN10MB (Ethernet)
client > server [S], seq 1750839998, win 65535, length 0
server > client [S.], seq 2461151276, ack 1750839999, win 8192, length 0
client > server [.], ack 1, win 4104, length 0
client > server [P.], seq 1:175, ack 1, win 4104, length 174
server > client [R.], seq 1, ack 175, win 0, length 0

最初の3つのパケットは、古典的なSYN-SYN-ACK-ACKの3ウェイハンドシェイクで、TCP接続をセットアップします。4番目のパケットは、サーバーにTLSクライアントのHelloメッセージを送信するiOSです。最初のステップTCP接続を介してTLS接続を設定します。このメッセージを引き離してみましたが、十分に合理的です。5番目のパケットでは、サーバーは(RSTを送信することによって)接続をドロップします。

IIS 7.5がRSTを実行する理由を誰か知っていますか?

11
RobDigital

質問は古いですが、検索中に見つかります。同じ問題の解決策を見つけるのに少し時間を費やしました。したがって、私は自分の結果を他の人と共有するための答えを書くことにしました。

短い回答:IIS Cryptoを使用して暗号スイートの順序を指定することはできません。「デフォルト」ボタンをクリックして、以前に設定した順序を削除してから、グループポリシー(「コンピュータの構成」を使用することをお勧めします。 "\"管理用テンプレート "\"ネットワーク "\" SSL構成設定 ")を使用して、ローカルポリシーで暗号化スイートを構成します。

「プロトコルまたは暗号スイートの不一致」エラーの理由は、以下のいずれかです

  • サーバーが「不正な暗号スイート」をサポートしています
  • お使いのサーバーは、TLS仕様に対応する必要がある暗号スイートをサポートしていません。
  • お使いのサーバーはHTTP/2をサポートしており、他のプロトコル ブラックリスト上記からいくつかのプロトコルがあります。リストにありません。通常、問題を修正するには、暗号スイートの順序を変更するだけで十分です。

正確なブラックリストは、システムによって異なる場合があります。インターネットでブラックリストを見つけることができます。たとえば、RFC 7540(ハイパーテキスト転送プロトコルバージョン2(HTTP/2))の 付録A には1つのリストが含まれています。暗号スイートは、TLS 1.2のTLS_RSA_WITH_AES_128_CBC_SHAこちら を参照)とTLS 1.3のTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256こちら を参照)です。 TLS_ECDHE_ECDSA_*は、楕円曲線の証明書を使用する場合にのみ重要です。その他の非常に優れた暗号スイートTLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256は、まだMicrosoftによって実装されていません。さらに、少なくともTLS_ECDHE_RSA_WITH_AES_256_CBC_SHAを追加して古いシステムからの接続をサポートし、TLS_RSA_WITH_AES_128_CBC_SHAを追加して非常に古いシステム(Android 2.3.7 、、 Java 6u45、OpenSSL 0.9.8y)とTLS_RSA_WITH_3DES_EDE_CBC_SHAあなたはサポートが必要ですIE 8/XP。したがって、たとえば今日使用できます

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

TLS 1.0、TLS 1.1を無効にしてセキュリティを強化するか、または

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

優れたセキュリティと最高のパフォーマンスが必要な場合。

たとえば、問題を解決するために、次の暗号スイートの短いセットを設定できます。

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

以下に、Windows 10での構成の例を示します。IIS 10 to haveA + rating from Qualys SSL Labs with RSA 2048 key and free SSL certificate from暗号化しましょう

enter image description here

無効にしたDES 56/56、RC2 128/128、RC2 40/128、RC2 56/128、RC4 128/128、RC4 40/128、RC4 56/128、RC4 64/128 、トリプルDES 168/168、NULL、MD5、マルチプロトコルUnified Hello、PCT 1.0、SSL 2.0、SSL 3.0およびTLS 1.0/1.1手動でレジストリKB2450 を参照)IISこれまでは、A +の評価 www.ssllabs.com を取得することは不可能になっています。これは不利な点だと思いますが、TLS 1.2は現在非常に広くサポートされています。 DisabledByDefault: 1、ただしTLS 1.0およびTLS 1.1の場合はEnabled: 1。コンピューターでSQL Server 2008/2012を実行する場合に役立ちます。WebサーバーはTLS 1.0およびTLS 1.1を使用しませんが、SQL Serverは使用します。

多くの時間を費やし、あなたの主な問題である最も重要なステップは、暗号スイートの構成でした。私はgpedit.mscを使用してそれを作成しました。 「コンピュータの構成」\「管理用テンプレート」\「ネットワーク」\「SSL構成の設定」を選択し、「SSL暗号スイートの順序」の値を次のように構成しました

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

上記の順序は最適ではない可能性があり、上記のすべてのプロトコルがIIS 7.5でサポートされていることを確信していません(私はIIS 10.0を使用しました) 。それにもかかわらず、私はあなたの問題が暗号スイートのリストに関連していると確信しています。私が暗号スイートのリストを使った実験中に説明したのとまったく同じ問題があったからです。

いずれにせよ、グループポリティで上記の設定を構成し、コンピューターを再起動した後gpupdate /force /target:computerは私のテストでは十分ではありませんでした)、A +評価と次のテスト結果のリストを取得します。 「ハンドシェイクシミュレーション」パート:

enter image description hereenter image description hereenter image description hereenter image description here

IOSが次のクライアントで正常にサポートされていることがわかります。

Safari 6 / iOS 6.0.1
Safari 7 / iOS 7.1
Safari 8 / iOS 8.4
Safari 9 / iOS 9

TLS 1.2をサポートしていないクライアントは今のところそれほど重要ではないように思われ、上記の構成はレガシークライアントのサポートと安全なプロトコルの使用との間の良い妥協点だと思います。

5
Oleg

私はこれに数日間苦労しました。特に、Xamarin Forms PCLを使用してiOSアプリから接続し、OAuth2 Bearer Token認証を使用してASP.NET Web Api 2レストサービスに接続していました。

最後に私のために働いたのは、IIS Cryptoのベストプラクティスを使用することでした。次に、暗号スイートの順序に設定されているレジストリキーを編集します。

KEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002\Function

私は次の価値で成功しました:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256、TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384、 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_ SHA256_P256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P521、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P521、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256、TLS_DHE_RSA_WITH_AES_256_GCM_SHA384、TLS_DHE_RSA_WITH_AES_128_GCM_SHA256、TLS_DHE_DSS_WITH_AES_256_CBC_SHA256、TLS_DHE_DSS_WITH_AES_256_CBC_SHA、TLS_DHE_DSS_WITH_AES_128_CBC_SHA256、TLS_DHE_DSS_WITH_AES_128_CBC_SHA、TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_RC4_128_SHA、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_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、 TLS_RSA_WITH_RC4_128_MD5、TLS_RSA_WITH_DES_CBC _SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

最後のものは、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256を自動的にネゴシエートしたCharlesプロキシを使用して見つかりました。これに私を導いたのは、Charles Proxyがオン(シミュレーター証明書がインストールされている)で接続は成功しましたが、それ以外は失敗したことです。ネゴシエーションで使用したスイートを追加するとうまくいきました。プロキシは私のサーバーでサポートされているものとiOSサービスではサポートされていないサービスと再交渉しているようです(?).

暗号スイートの多くは、ssllabsのさまざまなiOS/OSXデバイスの優先スイートの仕様から取得されたものです。 上記の値は、IE 6以外のすべてとハンドシェイクする必要があります。

0
user42134

IIS暗号イメージが最近のものである場合は、設定をそのまま維持しますが、SHA、Diffie-Hellman、およびPKCSを有効にします。これにより、Aの評価が得られますが、iOS 8以下は接続できます。

0
Persistent13