トランスポート層セキュリティ (TLS) 1.2
確実にアプリケーション ネットワーク通信をセキュリティで保護するには、最新バージョンの "トランスポート層セキュリティ" (TLS) を使用することが重要です。
警告
2018 年 4 月 – PCI コンプライアンスを含むセキュリティ要件の増加により、主要なクラウド プロバイダーと Web サーバーは、1.2 より古い TLS バージョンのサポートを停止する予定です。 以前のバージョンの Visual Studio で作成された Xamarin プロジェクトでは、既定で古いバージョンの TLS が使用されます。
アプリをこれらのサーバーやサービスで引き続き動作させるには、次の設定を使うように Xamarin プロジェクトを更新してから、アプリをリビルドしてユーザーに再展開する必要があります。
プロジェクトで System.Net.Http アセンブリを参照し、次のように構成する必要があります。
Xamarin.Android を TLS 1.2 に更新する
[HttpClient 実装] と [SSL/TLS 実装] オプションを更新して、TLS 1.2 セキュリティを有効にします。
Note
Android 5.0 以降が必要です。
これらの設定は、[プロジェクトのプロパティ] > [Android オプション] で [詳細設定] ボタンをクリックすると見つかります。
Xamarin.iOS を TLS 1.2 に更新する
TSL 1.2 セキュリティを有効にするには、[HttpClient 実装] オプションを更新します。
この設定は、[プロジェクトのプロパティ] > [iOS ビルド] で見つかります。
Xamarin.Mac を TLS 1.2 に更新する
Visual Studio for Mac で Xamarin.Mac アプリの TLS 1.2 を有効にするには、[プロジェクト オプション] > [ビルド] > [Mac ビルド] タブで [HttpClient 実装] オプションを更新します。
警告
今度の Xamarin.Mac 4.8 リリースでは、macOS 10.9 以降のみをサポートします。 以前のバージョンの Xamarin.Mac では macOS 10.7 以降をサポートしていましたが、これらの古い macOS バージョンは TLS 1.2 をサポートするための十分な TLS インフラストラクチャがありませんでした。 macOS 10.7 または macOS 10.8 をターゲットにするには、Xamarin.Mac 4.6 以前を使用してください。
代わりの構成オプション
このセクションでは、上で示した TLS 1.2 でサポートされる構成の代わりになるものについて説明します。 アプリケーション開発者は、異なるレベルの TLS サポートを使うリスクを理解している場合にのみ、これらの代替手段を検討する必要があります。
HttpClient の実装
Xamarin 開発者は常にコードでネイティブ ネットワーク クラスを使用できましたが、HttpClient
クラスで使われるネットワーク スタックを決定するオプションもあります。 これにより、ネイティブ プラットフォームの速度とセキュリティが向上する使い慣れた .NET API が提供されます。
オプションは次のとおりです。
- マネージド スタック – Mono で提供されるネットワーク機能。
- ネイティブ スタック – 基になるプラットフォーム (Android、iOS、または macOS) によって提供されるさまざまなネットワーク API。
マネージド スタックは、既存の .NET コードとの最高レベルの互換性を備えていますが、速度が低下し、実行可能ファイルのサイズが大きくなる可能性があります。
ネイティブ オプションは、速度とセキュリティが向上する場合がありますが (TLS 1.2 を含む)、HttpClient
クラスのすべての機能とオプションが提供されないことがあります。
SSL/TLS の実装 (Android)
Android プロジェクトのオプションでは、サポートする SSL/TLS の実装を選ぶこともできます。
- Mono/マネージド – Android 上の TLS 1.1
- ネイティブ – Android 上の TLS 1.2。
新しい Xamarin プロジェクトの既定値は TLS 1.2 をサポートするネイティブ実装ですが (すべてのプロジェクトで推奨されます)、互換性上の理由から必要に応じてマネージド コードに戻すことができます。
重要
[Mono/マネージド] オプションは、iOS と Mac プロジェクトのオプションから削除されています。
iOS および Mac プラットフォームでは、[ネイティブ] オプションが常に 使われます。
プラットフォーム固有の詳細
上記の概要は、Xamarin プロジェクトでの HttpClient と SSL/TLS の実装のプロジェクト レベルの設定についての説明です。 HttpClient の実装は、コード内で動的に設定することもできます。 詳しくは、次のプラットフォーム固有のガイドを参照してください。
まとめ
アプリケーションでは、可能な限りトランスポート層セキュリティ (TLS) 1.2 を使う必要があります。 この記事の説明に従って既存のアプリケーションの設定を更新した後、リビルドして顧客に展開し直す必要があります。
関連リンク
- アプリケーション トランスポート セキュリティ
- Xamarin.Android の環境
- Xamarin Cycle 9 (2017 年 2 月)
- TLS (Wikipedia)
- Mono 4.8 リリース ノート - TLS 1.2 サポート
- BoringSSL
- HttpClient、HttpClientHandler、WebRequestHandler の説明
- System.Net.HttpClient
- System.Net.HttpClientHandler
- System.Net.HttpMessageHandler
- System.Net.HttpWebRequest
- System.Net.WebClient
- System.Net.WebRequest
- java.net.URLConnection
- Foundation.CFNetwork
- Foundation.NSUrlConnection
- System.Net.WebRequest