---
# System prepended metadata

title: C# .NET がサポートする TLS 暗号スイート（Cipher Suite） 2023-05-24
tags: [.NET Framework, .NET, .NET Core, 暗号スイート, C#, Cipher Suite]

---

---
lang: ja-jp
breaks: true
---
# C# .NET がサポートする TLS 暗号スイート（Cipher Suite） 2023-05-24

> TLS Cipher Suites
> https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-4

> TLS 1.2
> https://datatracker.ietf.org/doc/html/rfc5246

> TLS 1.3
> https://datatracker.ietf.org/doc/html/rfc8446

## .NET Core

> TlsCipherSuite 列挙型
> https://learn.microsoft.com/ja-jp/dotnet/api/system.net.security.tlsciphersuite

:::warning
注釈
フィールド名と値はどちらも、インターネット割り当て番号機関 (IANA) の TLS 暗号スイート の一覧 に基づいています。 この列挙体は、特定のバージョンの .NET がリリースされた時点で認識されていた値を表します。 マップされていない値はプロパティまたはメソッドによって返される場合があり、値がシステムの基になる TLS 実装との間で透過的に渡される可能性があるため、メソッドは通常、列挙型内で特定の入力が定義されたことを確認しないでください。 この列挙体に含めることは、.NET プラットフォームが特定の暗号スイートをサポートしていることを示すものではありません。
:::

## .NET Framework

> .NET Framework でのトランスポート層セキュリティ (TLS) のベスト プラクティス
> https://learn.microsoft.com/ja-jp/dotnet/framework/network-programming/tls

:::warning
* .NET Framework アプリケーションのセキュリティ保護を維持するため、TLS のバージョンを**ハードコーディングしないでください**。
* .NET Framework アプリケーションでは、オペレーティング システム (OS) がサポートしている TLS のバージョンを使う必要があります。
:::

### 推奨事項

:::warning
* TLS 1.2 の場合、アプリでは .NET Framework 4.7 以降のバージョンを対象にし、WCF アプリでは .NET Framework 4.7.1 以降のバージョンを対象とします。
* TLS 1.3 の場合は、.NET Framework 4.8 以降を対象とします。
* TLS のバージョンを指定しない。 OS に TLS のバージョンを決定させるようにコードを構成します。
* コードの監査を徹底的に実行し、TLS または SSL のバージョンを指定していないことを確認する。

OS が TLS のバージョンを選ぶようにアプリを構成すると、次のようになります。

* 将来的に追加される新しいプロトコル (TLS 1.3 など) を自動的に利用します。
* セキュリティで保護されていないことが検出されたプロトコルを OS がブロックします。
:::

* WCF は、.NET Framework 4.7 での既定値として TLS 1.0、1.1、1.2 をサポートしています。
* .NET Framework 4.7.1 以降の WCF の既定値は、オペレーティング システムで構成されている TLS のバージョンです。 
* アプリケーションが `SslProtocols.None` で明示的に構成されている場合、WCF は、NetTcp トランスポートを使うとき、オペレーティング システムの既定の設定を使います。

:::warning
> Transport Layer Security (TLS) best practices with the .NET Framework #4675
> https://github.com/dotnet/docs/issues/4675
:::

> .NET Framework で TLS 1.1 および TLS 1.2 を有効化する方法 - まとめ -
> https://jpdsi.github.io/blog/internet-explorer-microsoft-edge/dotnet-framework-tls12/
> 
> ご利用対象の Windows OS 自体が TLS 1.1 および 1.2 を利用することができない場合には、.NET Framework 側でいくら対応しても TLS 1.1 および 1.2 に対応することはできません。
> .NET Framework での対応の前に、**Windows OS 自体を TLS 1.1 および 1.2 を利用できるように構成する必要があります。**
> 

## SecurityProtocolType 列挙型

https://learn.microsoft.com/ja-jp/dotnet/api/system.net.securityprotocoltype

### .NET Framework 4.7.2 以前

![](https://hackmd.io/_uploads/r1zOuxsBn.png)

### .NET Framework 4.8 以降

![](https://hackmd.io/_uploads/By-j_xsH3.png)

:::info
`Tls13` が増えている。
:::

## Windows OSごとの `TLS 1.3` サポート状況

> TLS/SSL のプロトコル (Schannel SSP)
> https://learn.microsoft.com/ja-jp/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-

![](https://hackmd.io/_uploads/rk163eiS3.png)

![](https://hackmd.io/_uploads/By8Jaljr3.png)

![](https://hackmd.io/_uploads/BkIlaesrn.png)

## SslProtocols 列挙型

https://learn.microsoft.com/ja-jp/dotnet/api/system.security.authentication.sslprotocols

### .NET Framework 4.7.2 以前

![](https://hackmd.io/_uploads/B16bNWoH3.png)


### .NET Framework 4.8 以降

![](https://hackmd.io/_uploads/Hy0f4ZoS2.png)

:::info
`Tls13` が増えている。
:::


###### tags: `C#` `.NET` `暗号スイート` `Cipher Suite` `.NET Core` `.NET Framework`
