.NET Core と .NET 5 でのクロスプラットフォーム暗号化Cross-Platform Cryptography in .NET Core and .NET 5

.NET Core と .NET 5 での暗号化操作は、オペレーティングシステム (OS) ライブラリによって行われます。Cryptographic operations in .NET Core and .NET 5 are done by operating system (OS) libraries. この依存関係には、次のような利点があります。This dependency has advantages:

  • .NET アプリは OS の信頼性を向上します。.NET apps benefit from OS reliability. 暗号化ライブラリを脆弱性から保護することは、OS ベンダーにとって高い優先順位です。Keeping cryptography libraries safe from vulnerabilities is a high priority for OS vendors. これを行うには、システム管理者が適用する必要がある更新プログラムを提供します。To do that, they provide updates that system administrators should be applying.
  • OS ライブラリが FIPS 検証されている場合、.NET アプリは FIPS 検証アルゴリズムにアクセスできます。.NET apps have access to FIPS-validated algorithms if the OS libraries are FIPS-validated.

OS ライブラリに対する依存関係は、OS がサポートする暗号化機能のみを .NET アプリで使用できることも意味します。The dependency on OS libraries also means that .NET apps can only use cryptographic features that the OS supports. すべてのプラットフォームで特定のコア機能がサポートされますが、.NET でサポートされている一部のプラットフォームでは、一部の機能を使用できません。While all platforms support certain core features, some features that .NET supports can't be used on some platforms. この記事では、各プラットフォームでサポートされている機能について説明します。This article identifies the features that are supported on each platform.

この記事では、.NET での暗号化に関する実用的な知識があることを前提としています。This article assumes you have a working familiarity with cryptography in .NET. 詳細については、「 .Net 暗号化モデル.net 暗号化サービス」を参照してください。For more information, see .NET Cryptography Model and .NET Cryptographic Services.

ハッシュ アルゴリズムHash algorithms

クラスを含むすべてのハッシュアルゴリズムとハッシュベースメッセージ認証 (HMAC) クラスは、 *Managed OS ライブラリに従います。All hash algorithm and hash-based message authentication (HMAC) classes, including the *Managed classes, defer to the OS libraries. さまざまな OS ライブラリはパフォーマンスが異なりますが、互換性がある必要があります。While the various OS libraries differ in performance, they should be compatible.

対称暗号化Symmetric encryption

基になる暗号とチェーンはシステムライブラリによって行われ、すべてのプラットフォームでサポートされています。The underlying ciphers and chaining are done by the system libraries, and all are supported by all platforms.

暗号 + モードCipher + Mode WindowsWindows LinuxLinux macOSmacOS
AES-CBCAES-CBC ✔️✔️ ✔️✔️ ✔️✔️
AES-ECBAES-ECB ✔️✔️ ✔️✔️ ✔️✔️
3DES-CBC3DES-CBC ✔️✔️ ✔️✔️ ✔️✔️
3DES-ECB3DES-ECB ✔️✔️ ✔️✔️ ✔️✔️
DES-CBCDES-CBC ✔️✔️ ✔️✔️ ✔️✔️
DES-ECBDES-ECB ✔️✔️ ✔️✔️ ✔️✔️

認証された暗号化Authenticated encryption

認証済み暗号化 (AE) のサポートは、およびクラスを使用して、AES CCM と AES GCM に対して提供され System.Security.Cryptography.AesCcm System.Security.Cryptography.AesGcm ます。Authenticated encryption (AE) support is provided for AES-CCM and AES-GCM via the System.Security.Cryptography.AesCcm and System.Security.Cryptography.AesGcm classes.

Windows および Linux では、AES-CCM と AES-GCM の実装は OS ライブラリによって提供されます。On Windows and Linux, the implementations of AES-CCM and AES-GCM are provided by the OS libraries.

AES-CCM と AES-macOS での GCMAES-CCM and AES-GCM on macOS

MacOS では、システムライブラリはサードパーティコード用の AES-CCM または AES GCM をサポートしていないため、 AesCcm クラスとクラスは、 AesGcm サポートのために OpenSSL を使用します。On macOS, the system libraries don't support AES-CCM or AES-GCM for third-party code, so the AesCcm and AesGcm classes use OpenSSL for support. MacOS のユーザーは、これらの型を機能させるために OpenSSL (libcrypto) の適切なコピーを取得する必要があります。また、既定では、システムがライブラリを読み込むパスにする必要があります。Users on macOS need to obtain an appropriate copy of OpenSSL (libcrypto) for these types to function, and it must be in a path that the system would load a library from by default. Homebrew などのパッケージマネージャーから OpenSSL をインストールすることをお勧めします。We recommend that you install OpenSSL from a package manager such as Homebrew.

libcrypto.0.9.7.dylib libcrypto.0.9.8.dylib MacOS に含まれるおよびライブラリは、以前のバージョンの OpenSSL からのものであり、使用されません。The libcrypto.0.9.7.dylib and libcrypto.0.9.8.dylib libraries included in macOS are from earlier versions of OpenSSL and will not be used. libcrypto.35.dyliblibcrypto.41.dylib 、およびの各 libcrypto.42.dylib ライブラリは、libressl からのものであり、使用されません。The libcrypto.35.dylib, libcrypto.41.dylib, and libcrypto.42.dylib libraries are from LibreSSL and will not be used.

AES-CCM キー、nonce、タグAES-CCM keys, nonces, and tags

  • キーサイズKey Sizes

    AES は128、192、および256ビットのキーで動作します。AES-CCM works with 128, 192, and 256-bit keys.

  • Nonce のサイズNonce Sizes

    クラスは、 AesCcm 56、64、72、80、88、96、および104ビット (7、8、9、10、11、12、13バイト) nonce をサポートしています。The AesCcm class supports 56, 64, 72, 80, 88, 96, and 104-bit (7, 8, 9, 10, 11, 12, and 13-byte) nonces.

  • タグサイズTag Sizes

    クラスは、 AesCcm 32、48、64、80、96、112、および128ビット (4、8、10、12、14、16バイト) のタグの作成または処理をサポートしています。The AesCcm class supports creating or processing 32, 48, 64, 80, 96, 112, and 128-bit (4, 8, 10, 12, 14, and 16-byte) tags.

AES-GCM キー、nonce、タグAES-GCM keys, nonces, and tags

  • キーサイズKey Sizes

    AES-GCM は128、192、および256ビットのキーで動作します。AES-GCM works with 128, 192, and 256-bit keys.

  • Nonce のサイズNonce Sizes

    クラスは、 AesGcm 96 ビット (12 バイト) の nonce のみをサポートしています。The AesGcm class supports only 96-bit (12-byte) nonces.

  • タグサイズTag Sizes

    クラスは、 AesGcm 96、104、112、120、および128ビット (12、13、14、15、16バイト) のタグの作成または処理をサポートしています。The AesGcm class supports creating or processing 96, 104, 112, 120, and 128-bit (12, 13, 14, 15, and 16-byte) tags.

非対称暗号化Asymmetric cryptography

ここでは、次のサブセクションについて説明します。This section includes the following subsections:

RSARSA

RSA (Rivest – Rivest-shamir-adleman – Rivest-shamir-adleman) キーの生成は OS ライブラリによって実行され、サイズの制限とパフォーマンス特性が適用されます。RSA (Rivest–Shamir–Adleman) key generation is performed by the OS libraries and is subject to their size limitations and performance characteristics.

RSA キー操作は OS ライブラリによって実行され、読み込むことができるキーの種類は OS の要件に従います。RSA key operations are performed by the OS libraries, and the types of key that can be loaded are subject to OS requirements.

.NET は、"未加工の" (埋め込まれていない) RSA 操作を公開しません。.NET does not expose "raw" (unpadded) RSA operations.

OS ライブラリは、暗号化と復号化の埋め込みに使用されます。The OS libraries are used for encryption and decryption padding. すべてのプラットフォームで同じパディングオプションがサポートされているわけではありません。Not all platforms support the same padding options:

パディングモードPadding Mode Windows (CNG)Windows (CNG) Linux (OpenSSL)Linux (OpenSSL) macOSmacOS Windows (CAPI)Windows (CAPI)
PKCS1 暗号化PKCS1 Encryption ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
OAEP-1OAEP - SHA-1 ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
OAEP (SHA256、SHA384、SHA512)OAEP - SHA-2 (SHA256, SHA384, SHA512) ✔️✔️ ✔️✔️ ✔️✔️
PKCS1 署名 (MD5、SHA-1)PKCS1 Signature (MD5, SHA-1) ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
PKCS1 Signature (SHA-1)PKCS1 Signature (SHA-2) ✔️✔️ ✔️✔️ ✔️✔️ ⚠️*
PSSPSS ✔️✔️ ✔️✔️ ✔️✔️

* Windows CryptoAPI (CAPI) は、SHA-1 アルゴリズムを使用して署名を PKCS1 ことができます。* Windows CryptoAPI (CAPI) is capable of PKCS1 signature with a SHA-2 algorithm. ただし、個々の RSA オブジェクトは、それをサポートしていない暗号化サービスプロバイダー (CSP) に読み込むことができます。But the individual RSA object may be loaded in a cryptographic service provider (CSP) that doesn't support it.

Windows での RSARSA on Windows

  • Windows CryptoAPI (CAPI) は、が使用されるたびに使用され new RSACryptoServiceProvider() ます。Windows CryptoAPI (CAPI) is used whenever new RSACryptoServiceProvider() is used.
  • Windows Cryptography API Next Generation (CNG) は、が使用されるたびに使用され new RSACng() ます。Windows Cryptography API Next Generation (CNG) is used whenever new RSACng() is used.
  • によって返されるオブジェクト RSA.Create は、内部的に WINDOWS CNG を利用しています。The object returned by RSA.Create is internally powered by Windows CNG. この Windows CNG の使用は実装の詳細であり、変更される可能性があります。This use of Windows CNG is an implementation detail and is subject to change.
  • GetRSAPublicKeyの拡張メソッドは、 X509Certificate2 インスタンスを返し RSACng ます。The GetRSAPublicKey extension method for X509Certificate2 returns an RSACng instance. このの使用 RSACng は実装の詳細であり、変更される可能性があります。This use of RSACng is an implementation detail and is subject to change.
  • GetRSAPrivateKey現在、の拡張メソッドは X509Certificate2 インスタンスを推奨して RSACng いますが、が RSACng キーを開けない場合は、 RSACryptoServiceProvider が試行されます。The GetRSAPrivateKey extension method for X509Certificate2 currently prefers an RSACng instance, but if RSACng can't open the key, RSACryptoServiceProvider will be attempted. 優先プロバイダーは実装の詳細であり、変更される可能性があります。The preferred provider is an implementation detail and is subject to change.

RSA ネイティブ相互運用RSA native interop

.NET は、.NET 暗号化コードが使用する OS ライブラリとプログラムが相互運用できるようにする型を公開します。.NET exposes types to allow programs to interoperate with the OS libraries that the .NET cryptography code uses. 関連する型はプラットフォーム間で変換されないため、必要な場合にのみ直接使用する必要があります。The types involved do not translate between platforms, and should only be directly used when necessary.

TypeType WindowsWindows LinuxLinux macOSmacOS
RSACryptoServiceProvider ✔️✔️ ⚠️1⚠️1 ⚠️1⚠️1
RSACng ✔️✔️
RSAOpenSsl ✔️✔️ ⚠️3⚠️2

1 MacOS と Linux では、 RSACryptoServiceProvider 既存のプログラムとの互換性のために使用できます。1 On macOS and Linux, RSACryptoServiceProvider can be used for compatibility with existing programs. この場合、名前付きキーを開くなど、OS の相互運用を必要とするメソッドは、をスロー PlatformNotSupportedException します。In that case, any method that requires OS interop, such as opening a named key, throws a PlatformNotSupportedException.

2 macOS では 2 RSAOpenSsl 。 OpenSSL がインストールされていて、ダイナミックライブラリの読み込みによって適切な libcrypto .dylib が検出された場合に機能します。2 On macOS, RSAOpenSsl works if OpenSSL is installed and an appropriate libcrypto dylib can be found via dynamic library loading. 適切なライブラリが見つからない場合は、例外がスローされます。If an appropriate library can't be found, exceptions will be thrown.

ECDSAECDSA

ECDSA (楕円曲線デジタル署名アルゴリズム) キーの生成は OS ライブラリによって行われ、サイズの制限とパフォーマンス特性が適用されます。ECDSA (Elliptic Curve Digital Signature Algorithm) key generation is done by the OS libraries and is subject to their size limitations and performance characteristics.

ECDSA のキー曲線は OS ライブラリによって定義され、制限が適用されます。ECDSA key curves are defined by the OS libraries and are subject to their limitations.

楕円曲線Elliptic Curve Windows 10Windows 10 Windows 7-8.1Windows 7 - 8.1 LinuxLinux macOSmacOS
NIST P-256 (secp256r1)NIST P-256 (secp256r1) ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
NIST P-384 (secp384r1)NIST P-384 (secp384r1) ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
NIST P-521 (secp521r1)NIST P-521 (secp521r1) ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
Brainpool 曲線 (名前付き曲線として)Brainpool curves (as named curves) ✔️✔️ ⚠️1⚠️1
その他の名前付き曲線Other named curves ⚠️3⚠️2 ⚠️1⚠️1
明示的な曲線Explicit curves ✔️✔️ ✔️✔️
明示的にエクスポートまたはインポートExport or import as explicit ✔️✔️ 3 ✔️✔️ 3

1 Linux ディストリビューションでは、同じ名前付き曲線がサポートされていません。1 Linux distributions don't all have support for the same named curves.

2 名前付き曲線のサポートは、windows 10 の windows CNG に追加されました。2 Support for named curves was added to Windows CNG in Windows 10. 詳細については、「 CNG 名前付き楕円曲線」を参照してください。For more information, see CNG Named Elliptic Curves. 名前付き曲線は、Windows 7 の3つの曲線を除き、以前のバージョンの Windows では使用できません。Named curves are not available in earlier versions of Windows, except for three curves in Windows 7.

3 明示的な曲線パラメーターを使用してエクスポートするには、os ライブラリのサポートが必要です。これは、macOS または以前のバージョンの Windows では使用できません。3 Exporting with explicit curve parameters requires OS library support, which is not available on macOS or earlier versions of Windows.

ECDSA ネイティブ相互運用ECDSA Native Interop

.NET は、.NET 暗号化コードが使用する OS ライブラリとプログラムが相互運用できるようにする型を公開します。.NET exposes types to allow programs to interoperate with the OS libraries that the .NET cryptography code uses. 関連する型はプラットフォーム間で変換されないため、必要な場合にのみ直接使用する必要があります。The types involved don't translate between platforms and should only be directly used when necessary.

TypeType WindowsWindows LinuxLinux macOSmacOS
ECDsaCng ✔️✔️
ECDsaOpenSsl ✔️✔️ ⚠️*

* MacOS では、 ECDsaOpenSsl OpenSSL がシステムにインストールされ、適切な libcrypto .dylib がダイナミックライブラリの読み込みによって検出された場合に機能します。* On macOS, ECDsaOpenSsl works if OpenSSL is installed in the system and an appropriate libcrypto dylib can be found via dynamic library loading. 適切なライブラリが見つからない場合は、例外がスローされます。If an appropriate library can't be found, exceptions will be thrown.

ECDHECDH

ECDH (楕円曲線 Diffie-hellman) キーの生成は OS ライブラリによって行われ、サイズの制限とパフォーマンス特性が適用されます。ECDH (Elliptic Curve Diffie-Hellman) key generation is done by the OS libraries and is subject to their size limitations and performance characteristics.

クラスは、 ECDiffieHellman ECDH 計算の "生" の値を返しません。The ECDiffieHellman class doesn't return the "raw" value of the ECDH computation. 返されるすべてのデータは、キー派生関数に関して次のようになります。All returned data is in terms of key derivation functions:

  • ハッシュ (Z)HASH(Z)
  • HASH (先頭の | |Z | |追記HASH(prepend || Z || append)
  • HMAC (キー, Z)HMAC(key, Z)
  • HMAC (キー、先頭に | |Z | |追記HMAC(key, prepend || Z || append)
  • HMAC (Z, Z)HMAC(Z, Z)
  • HMAC (Z、先頭に | |Z | |追記HMAC(Z, prepend || Z || append)
  • Tls11Prf (ラベル、シード)Tls11Prf(label, seed)

ECDH キー曲線は OS ライブラリによって定義され、制限が適用されます。ECDH key curves are defined by the OS libraries and are subject to their limitations.

楕円曲線Elliptic Curve Windows 10Windows 10 Windows 7-8.1Windows 7 - 8.1 LinuxLinux macOSmacOS
NIST P-256 (secp256r1)NIST P-256 (secp256r1) ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
NIST P-384 (secp384r1)NIST P-384 (secp384r1) ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
NIST P-521 (secp521r1)NIST P-521 (secp521r1) ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
brainpool 曲線 (名前付き曲線として)brainpool curves (as named curves) ✔️✔️ ⚠️1⚠️1
その他の名前付き曲線other named curves ⚠️3⚠️2 ⚠️1⚠️1
明示的な曲線explicit curves ✔️✔️ ✔️✔️
明示的にエクスポートまたはインポートExport or import as explicit ✔️✔️ 3 ✔️✔️ 3

1 Linux ディストリビューションでは、同じ名前付き曲線がサポートされていません。1 Linux distributions don't all have support for the same named curves.

2 名前付き曲線のサポートは、windows 10 の windows CNG に追加されました。2 Support for named curves was added to Windows CNG in Windows 10. 詳細については、「 CNG 名前付き楕円曲線」を参照してください。For more information, see CNG Named Elliptic Curves. 名前付き曲線は、Windows 7 の3つの曲線を除き、以前のバージョンの Windows では使用できません。Named curves are not available in earlier versions of Windows, except for three curves in Windows 7.

3 明示的な曲線パラメーターを使用してエクスポートするには、os ライブラリのサポートが必要です。これは、macOS または以前のバージョンの Windows では使用できません。3 Exporting with explicit curve parameters requires OS library support, which is not available on macOS or earlier versions of Windows.

ECDH ネイティブ相互運用ECDH native interop

.NET では、.NET が使用する OS ライブラリとプログラムが相互運用できるように型を公開しています。.NET exposes types to allow programs to interoperate with the OS libraries that .NET uses. 関連する型はプラットフォーム間で変換されないため、必要な場合にのみ直接使用する必要があります。The types involved don't translate between platforms and should only be directly used when necessary.

TypeType WindowsWindows LinuxLinux macOSmacOS
ECDiffieHellmanCng ✔️✔️
ECDiffieHellmanOpenSsl ✔️✔️ ⚠️*

* MacOS では、 ECDiffieHellmanOpenSsl OpenSSL がインストールされていて、適切な libcrypto .dylib がダイナミックライブラリの読み込みによって検出された場合に機能します。* On macOS, ECDiffieHellmanOpenSsl works if OpenSSL is installed and an appropriate libcrypto dylib can be found via dynamic library loading. 適切なライブラリが見つからない場合は、例外がスローされます。If an appropriate library can't be found, exceptions will be thrown.

DSADSA

DSA (デジタル署名アルゴリズム) キーの生成はシステムライブラリによって実行されるため、サイズの制限やパフォーマンス特性が適用されます。DSA (Digital Signature Algorithm) key generation is performed by the system libraries and is subject to their size limitations and performance characteristics.

機能Function Windows CNGWindows CNG LinuxLinux macOSmacOS Windows CAPIWindows CAPI
キーの作成 (<= 1024 ビット)Key creation (<= 1024 bits) ✔️✔️ ✔️✔️ ✔️✔️
キーの作成 (> 1024 ビット)Key creation (> 1024 bits) ✔️✔️ ✔️✔️
キーを読み込んでいます (<= 1024 ビット)Loading keys (<= 1024 bits) ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
キーを読み込んでいます (> 1024 ビット)Loading keys (> 1024 bits) ✔️✔️ ✔️✔️ ⚠️*
FIPS 186-2FIPS 186-2 ✔️✔️ ✔️✔️ ✔️✔️ ✔️✔️
FIPS 186-3 (SHA-1 署名)FIPS 186-3 (SHA-2 signatures) ✔️✔️ ✔️✔️

* macOS は1024ビットを超える DSA キーを読み込みますが、これらのキーの動作は定義されていません。* macOS loads DSA keys bigger than 1024 bits, but the behavior of those keys is undefined. FIPS 186-3 に従って動作しません。They don't behave according to FIPS 186-3.

Windows 上の DSADSA on Windows

  • Windows CryptoAPI (CAPI) は、が使用されるたびに使用され new DSACryptoServiceProvider() ます。Windows CryptoAPI (CAPI) is used whenever new DSACryptoServiceProvider() is used.
  • Windows Cryptography API Next Generation (CNG) は、が使用されるたびに使用され new DSACng() ます。Windows Cryptography API Next Generation (CNG) is used whenever new DSACng() is used.
  • によって返されるオブジェクト DSA.Create は、内部的に WINDOWS CNG を利用しています。The object returned by DSA.Create is internally powered by Windows CNG. この Windows CNG の使用は実装の詳細であり、変更される可能性があります。This use of Windows CNG is an implementation detail and is subject to change.
  • GetDSAPublicKeyの拡張メソッドは、 X509Certificate2 インスタンスを返し DSACng ます。The GetDSAPublicKey extension method for X509Certificate2 returns a DSACng instance. このの使用 DSACng は実装の詳細であり、変更される可能性があります。This use of DSACng is an implementation detail and is subject to change.
  • GetDSAPrivateKeyの拡張メソッドは X509Certificate2 DSACng インスタンスを優先しますが、キーを開くことができない場合は DSACng DSACryptoServiceProvider 試行されます。The GetDSAPrivateKey extension method for X509Certificate2 prefers an DSACng instance, but if DSACng can't open the key, DSACryptoServiceProvider will be attempted. 優先プロバイダーは実装の詳細であり、変更される可能性があります。The preferred provider is an implementation detail and is subject to change.

DSA ネイティブ相互運用DSA native interop

.NET は、.NET 暗号化コードが使用する OS ライブラリとプログラムが相互運用できるようにする型を公開します。.NET exposes types to allow programs to interoperate with the OS libraries that the .NET cryptography code uses. 関連する型はプラットフォーム間で変換されないため、必要な場合にのみ直接使用する必要があります。The types involved don't translate between platforms and should only be directly used when necessary.

TypeType WindowsWindows LinuxLinux macOSmacOS
DSACryptoServiceProvider ✔️✔️ ⚠️1⚠️1 ⚠️1⚠️1
DSACng ✔️✔️
DSAOpenSsl ✔️✔️ ⚠️3⚠️2

1 MacOS と Linux では、 DSACryptoServiceProvider 既存のプログラムとの互換性のために使用できます。1 On macOS and Linux, DSACryptoServiceProvider can be used for compatibility with existing programs. この場合、名前付きキーを開くなど、システムの相互運用を必要とするメソッドは、をスロー PlatformNotSupportedException します。In that case, any method that requires system interop, such as opening a named key, throws a PlatformNotSupportedException.

2 macOS では 2 DSAOpenSsl 。 OpenSSL がインストールされていて、ダイナミックライブラリの読み込みによって適切な libcrypto .dylib が検出された場合に機能します。2 On macOS, DSAOpenSsl works if OpenSSL is installed and an appropriate libcrypto dylib can be found via dynamic library loading. 適切なライブラリが見つからない場合は、例外がスローされます。If an appropriate library can't be found, exceptions will be thrown.

X.509 証明書X.509 Certificates

.NET での x.509 証明書のサポートの大部分は、OS ライブラリから取得されます。The majority of support for X.509 certificates in .NET comes from OS libraries. .NET のまたはインスタンスに証明書を読み込むに X509Certificate2 は、 X509Certificate 基になる OS ライブラリから証明書を読み込む必要があります。To load a certificate into an X509Certificate2 or X509Certificate instance in .NET, the certificate must be loaded by the underlying OS library.

PKCS12/PFX の読み取りRead a PKCS12/PFX

シナリオScenario WindowsWindows LinuxLinux macOSmacOS
EmptyEmpty ✔️✔️ ✔️✔️ ✔️✔️
1つの証明書、秘密キーなしOne certificate, no private key ✔️✔️ ✔️✔️ ✔️✔️
1つの証明書 (秘密キーを含む)One certificate, with private key ✔️✔️ ✔️✔️ ✔️✔️
複数の証明書、秘密キーなしMultiple certificates, no private keys ✔️✔️ ✔️✔️ ✔️✔️
複数の証明書、1つの秘密キーMultiple certificates, one private key ✔️✔️ ✔️✔️ ✔️✔️
複数の証明書、複数の秘密キーMultiple certificates, multiple private keys ✔️✔️ ⚠️* ✔️✔️

* .NET 5 preview リリースで使用できます。* Available in .NET 5 preview releases.

PKCS12/PFX の作成Write a PKCS12/PFX

シナリオScenario WindowsWindows LinuxLinux macOSmacOS
EmptyEmpty ✔️✔️ ✔️✔️ ⚠️*
1つの証明書、秘密キーなしOne certificate, no private key ✔️✔️ ✔️✔️ ⚠️*
1つの証明書 (秘密キーを含む)One certificate, with private key ✔️✔️ ✔️✔️ ✔️✔️
複数の証明書、秘密キーなしMultiple certificates, no private keys ✔️✔️ ✔️✔️ ⚠️*
複数の証明書、1つの秘密キーMultiple certificates, one private key ✔️✔️ ✔️✔️ ✔️✔️
複数の証明書、複数の秘密キーMultiple certificates, multiple private keys ✔️✔️ ⚠️* ✔️✔️
短期読み込みEphemeral loading ✔️✔️ ✔️✔️ ⚠️*

* .NET 5 preview リリースで使用できます。* Available in .NET 5 preview releases.

macOS は、キーチェーンオブジェクトを使用せずに証明書の秘密キーを読み込むことができません。この場合、ディスクへの書き込みが必要です。macOS can't load certificate private keys without a keychain object, which requires writing to disk. キーチェーンは PFX 読み込み用に自動的に作成され、使用されなくなったときに削除されます。Keychains are created automatically for PFX loading, and are deleted when no longer in use. この X509KeyStorageFlags.EphemeralKeySet オプションは秘密キーがディスクに書き込まれないことを意味するため、macOS でそのフラグをアサートすると、が発生 PlatformNotSupportedException します。Since the X509KeyStorageFlags.EphemeralKeySet option means that the private key should not be written to disk, asserting that flag on macOS results in a PlatformNotSupportedException.

PKCS7 証明書コレクションを作成するWrite a PKCS7 certificate collection

Windows と Linux は両方とも DER エンコードされた PKCS7 blob を生成します。Windows and Linux both emit DER-encoded PKCS7 blobs. macOS は、長さが CER でエンコードされた PKCS7 blob を出力します。macOS emits indefinite-length-CER-encoded PKCS7 blobs.

X509StoreX509Store

Windows では、 X509Store クラスは Windows 証明書ストア api を表現したものです。On Windows, the X509Store class is a representation of the Windows Certificate Store APIs. これらの Api は、.NET Framework の場合と同様に、.NET Core および .NET 5 でも動作します。Those APIs work the same in .NET Core and .NET 5 as they do in .NET Framework.

Linux では、 X509Store クラスは、システムの信頼の決定 (読み取り専用)、ユーザー信頼の決定 (読み取り/書き込み)、およびユーザーキーストレージ (読み取り/書き込み) の射影です。On Linux, the X509Store class is a projection of system trust decisions (read-only), user trust decisions (read-write), and user key storage (read-write).

MacOS では、 X509Store クラスは、システムの信頼の決定 (読み取り専用)、ユーザー信頼の決定 (読み取り専用)、およびユーザーキーの格納 (読み取り/書き込み) の射影です。On macOS, the X509Store class is a projection of system trust decisions (read-only), user trust decisions (read-only), and user key storage (read-write).

次の表は、各プラットフォームでサポートされているシナリオを示しています。The following tables show which scenarios are supported in each platform. サポートされていないシナリオ ( ❌ テーブル内) の場合は、 CryptographicException がスローされます。For unsupported scenarios (❌ in the tables), a CryptographicException is thrown.

マイストアThe My store

シナリオScenario WindowsWindows LinuxLinux macOSmacOS
Open CurrentUser\My (ReadOnly)Open CurrentUser\My (ReadOnly) ✔️✔️ ✔️✔️ ✔️✔️
Open CurrentUser\My (ReadWrite)Open CurrentUser\My (ReadWrite) ✔️✔️ ✔️✔️ ✔️✔️
CurrentUser\My を開く (ExistingOnly)Open CurrentUser\My (ExistingOnly) ✔️✔️ ⚠️ ✔️✔️
LocalMachine\My を開くOpen LocalMachine\My ✔️✔️ ✔️✔️

Linux では、最初の書き込み時にストアが作成され、既定ではユーザーストアは存在しないため、 CurrentUser\My を使用して開くことはできません ExistingOnlyOn Linux, stores are created on first write, and no user stores exist by default, so opening CurrentUser\My with ExistingOnly may fail.

MacOS では、 CurrentUser\My ストアはユーザーの既定のキーチェーン (既定では) です login.keychainOn macOS, the CurrentUser\My store is the user's default keychain, which is login.keychain by default. LocalMachine\Myストアが System.keychain です。The LocalMachine\My store is System.keychain.

ルートストアThe Root store

シナリオScenario WindowsWindows LinuxLinux macOSmacOS
Open CurrentUser\Root (ReadOnly)Open CurrentUser\Root (ReadOnly) ✔️✔️ ✔️✔️ ✔️✔️
Open CurrentUser\Root (ReadWrite)Open CurrentUser\Root (ReadWrite) ✔️✔️ ✔️✔️
CurrentUser\Root を開く (ExistingOnly)Open CurrentUser\Root (ExistingOnly) ✔️✔️ ⚠️ ✔️ (読み取り専用の場合)✔️ (if ReadOnly)
Open LocalMachine\Root (ReadOnly)Open LocalMachine\Root (ReadOnly) ✔️✔️ ✔️✔️ ✔️✔️
Open LocalMachine\Root (ReadWrite)Open LocalMachine\Root (ReadWrite) ✔️✔️
LocalMachine\Root を開く (ExistingOnly)Open LocalMachine\Root (ExistingOnly) ✔️✔️ ⚠️ ✔️ (読み取り専用の場合)✔️ (if ReadOnly)

Linux では、 LocalMachine\Root ストアは、OpenSSL の既定のパスにおける CA バンドルの解釈です。On Linux, the LocalMachine\Root store is an interpretation of the CA bundle in the default path for OpenSSL.

MacOS では、 CurrentUser\Root ストアは SecTrustSettings ユーザー信頼ドメインの結果を解釈します。On macOS, the CurrentUser\Root store is an interpretation of the SecTrustSettings results for the user trust domain. LocalMachine\Rootストアは、 SecTrustSettings 管理者ドメインとシステム信頼ドメインの結果を解釈します。The LocalMachine\Root store is an interpretation of the SecTrustSettings results for the admin and system trust domains.

中間ストアThe Intermediate store

シナリオScenario WindowsWindows LinuxLinux macOSmacOS
Open CurrentUser\Intermediate (ReadOnly)Open CurrentUser\Intermediate (ReadOnly) ✔️✔️ ✔️✔️ ✔️✔️
Open CurrentUser\Intermediate (ReadWrite)Open CurrentUser\Intermediate (ReadWrite) ✔️✔️ ✔️✔️
CurrentUser\Intermediate を開く (ExistingOnly)Open CurrentUser\Intermediate (ExistingOnly) ✔️✔️ ⚠️ ✔️ (読み取り専用の場合)✔️ (if ReadOnly)
Open LocalMachine\Intermediate (ReadOnly)Open LocalMachine\Intermediate (ReadOnly) ✔️✔️ ✔️✔️ ✔️✔️
Open LocalMachine\Intermediate (ReadWrite)Open LocalMachine\Intermediate (ReadWrite) ✔️✔️
LocalMachine\Intermediate を開く (ExistingOnly)Open LocalMachine\Intermediate (ExistingOnly) ✔️✔️ ⚠️ ✔️ (読み取り専用の場合)✔️ (if ReadOnly)

Linux では、 CurrentUser\Intermediate X509Chain ビルドが成功したときに、機関情報アクセスレコードによって中間 ca をダウンロードするときに、ストアがキャッシュとして使用されます。On Linux, the CurrentUser\Intermediate store is used as a cache when downloading intermediate CAs by their Authority Information Access records on successful X509Chain builds. LocalMachine\Intermediateストアは、OpenSSL の既定のパスにおける CA バンドルの解釈です。The LocalMachine\Intermediate store is an interpretation of the CA bundle in the default path for OpenSSL.

禁止されているストアThe Disallowed store

シナリオScenario WindowsWindows LinuxLinux macOSmacOS
Open CurrentUser\Disallowed (ReadOnly)Open CurrentUser\Disallowed (ReadOnly) ✔️✔️ ⚠️ ✔️✔️
Open CurrentUser\Disallowed (ReadWrite)Open CurrentUser\Disallowed (ReadWrite) ✔️✔️ ⚠️
CurrentUser\Disallowed を開く (ExistingOnly)Open CurrentUser\Disallowed (ExistingOnly) ✔️✔️ ⚠️ ✔️ (読み取り専用の場合)✔️ (if ReadOnly)
Open LocalMachine\Disallowed (ReadOnly)Open LocalMachine\Disallowed (ReadOnly) ✔️✔️ ✔️✔️
Open LocalMachine\Disallowed (ReadWrite)Open LocalMachine\Disallowed (ReadWrite) ✔️✔️
LocalMachine\Disallowed を開く (ExistingOnly)Open LocalMachine\Disallowed (ExistingOnly) ✔️✔️ ✔️ (読み取り専用の場合)✔️ (if ReadOnly)

Linux では、 Disallowed ストアはチェーン構築では使用されず、そのストアにコンテンツを追加しようとすると、が発生し CryptographicException ます。On Linux, the Disallowed store is not used in chain building, and attempting to add contents to it results in a CryptographicException. CryptographicException Disallowed コンテンツが既に取得されている場合、ストアを開くと、がスローされます。A CryptographicException is thrown when opening the Disallowed store if it has already acquired contents.

MacOS では、CurrentUser\Disallowed ストアと LocalMachine\Disallowed ストアは、信頼がに設定されている証明書の適切な SecTrustSettings 結果を解釈し Always Deny ます。On macOS, the CurrentUser\Disallowed and LocalMachine\Disallowed stores are interpretations of the appropriate SecTrustSettings results for certificates whose trust is set to Always Deny.

存在しないストアNonexistent store

シナリオScenario WindowsWindows LinuxLinux macOSmacOS
存在しないストアを開く (ExistingOnly)Open non-existent store (ExistingOnly)
CurrentUser が存在しないストア (ReadWrite) を開くOpen CurrentUser non-existent store (ReadWrite) ✔️✔️ ✔️✔️ ⚠️
LocalMachine の存在しないストア (ReadWrite) を開くOpen LocalMachine non-existent store (ReadWrite) ✔️✔️

MacOS では、X509Store API を使用したカスタムストアの作成は、場所でのみサポートされてい CurrentUser ます。On macOS, custom store creation with the X509Store API is supported only for CurrentUser location. これにより、ユーザーのキーチェーンディレクトリにパスワードなしの新しいキーチェーンが作成されます (~//キーチェーン)。It will create a new keychain with no password in the user's keychain directory (~/Library/Keychains). パスワードを使用してキーチェーンを作成するには、P/Invoke to を SecKeychainCreate 使用できます。To create a keychain with password, a P/Invoke to SecKeychainCreate could be used. 同様に、を使用して、 SecKeychainOpen 異なる場所で keychains] を開くこともできます。Similarly, SecKeychainOpen could be used to open keychains in different locations. 結果として得られるを IntPtr に渡して、 new X509Store(IntPtr) 現在のユーザーのアクセス許可に従って、読み取り/書き込み可能なストアを取得できます。The resulting IntPtr can be passed to new X509Store(IntPtr) to obtain a read/write-capable store, subject to the current user's permissions.

X509ChainX509Chain

macOS はオフライン CRL の使用をサポートしていないため、 X509RevocationMode.Offline はとして扱われ X509RevocationMode.Online ます。macOS doesn't support Offline CRL utilization, so X509RevocationMode.Offline is treated as X509RevocationMode.Online.

macOS では、CRL (証明書失効リスト)/OCSP (オンライン証明書の状態プロトコル)/AIA (機関情報アクセス) のダウンロードでユーザーが開始したタイムアウトをサポートしていないため、 X509ChainPolicy.UrlRetrievalTimeout は無視されます。macOS doesn't support a user-initiated timeout on CRL (Certificate Revocation List) / OCSP (Online Certificate Status Protocol) / AIA (Authority Information Access) downloading, so X509ChainPolicy.UrlRetrievalTimeout is ignored.

その他のリソースAdditional resources