2017-09-15 23 views
0

Mac 10.6 sdkに対して構築された従来のアプリケーションがあります。我々は、Web呼び出しを行うためにNSURLMutableRequestNSURLConnectionを使用しています。 Wiresharkを使用して、私は10.9 - 10.11.2でこれらの呼び出しがすべてTLSv1上で行われることに気付きました。 10.11.6以降(また、10.13ベータ)これらは、TLSv1.2で作成されます。NSURLConnectionを使用している場合、Mac OS 10.9のデフォルトのSSLLevel

CFURLRequestSetSSLProperties(dlsym)を使用してコードをTLSv1.2に変更しました。私はkCFStreamSSLLevelを "kCFStreamSocketSecurityLevelTLSv1_2"に設定しました。これらの後、私はTLSv1.2上で呼び出しが行われるのを見ることができます。

kCFStreamSSLLevelアップルのドキュメントから:デフォルトで

、ストリームのセキュリティレベルが kCFStreamSocketSecurityLevelNegotiatedSSLです。

kCFStreamSocketSecurityLevelNegotiatedSSLから:

は がネゴシエートすることができる最高レベルのセキュリティプロトコルはソケット・ストリームのためのセキュリティプロトコルとして設定することを指定します。

TLSv1.2は10.9でサポートされています。テストとして、私は kCFStreamSocketSecurityLevelNegotiatedSSLkCFStreamSSLLevelを設定し、10.9に、それはまだTLSv1のへの呼び出しを行いました。

私は2つの質問がある:呼び出しが10.9-10.11.2ためTLSv1のに作られますなぜ

  1. ?利用可能な最高のバージョン、つまりTLSv1.2を自動的に選択するべきではありません。

  2. kCFStreamSocketSecurityLevelTLSv1_2を使用して、そこにサーバがTLSv1.2をサポートしていない場合のバージョンを下げるためにフォールバックまたはコールが単純に失敗しているのですか?両方のセットのために、ストリーム プロパティ値とコピー操作:

kCFStreamSocketSecurityLevelNegotiatedSSL

ディスカッション: 私はこのしばらくのチェックを発見しました。 TLS またはSSLを使用してバージョンを下げることを示します。これは、 インスタンスのHTTPSの動作です。

kCFStreamSocketSecurityLevelTLSv1_2あるいはkCFStreamSocketSecurityLevelTLSv1には、このような宣言がありません。それで、彼らはバージョンを下げるためにフォールバックするかどうか?

答えて

1

IIRCでは、バージョン固有の定数は特定のバージョンを設定し、他のバージョンはネゴシエートしません。対照的に、Negotiateは、セキュリティ上の問題(例えば、SSLv3)のためにAppleによってブラックリストに登録されていないバージョンについては、交渉することができます。

このように、新しいバージョンのSSL/TLSを使用できないホストや特定のバージョンを使用するために特定のバージョンを使用する必要がある場合を除き、一般的なアドバイスは常にクライアント側でネゴシエートを使用することです。サーバーは、ネゴシエーションを正しくサポートしていないサーバーを設定し、最新のバージョンのみを受け入れるようにサーバーを設定します(古いクライアントをサポートする必要がある場合は、若干古い)。

このアプローチのメリットは、アップルが新しいバージョンを追加して古いバージョンを廃止して、クライアントコードが変更される必要はなく、サーバーはおそらくあなたの直接の管理下にあるため、強制することなくいつでも変更できますソフトウェアアップデートをダウンロードするユーザー。

関連する問題