.NET의 플랫폼 간 암호화

.NET의 암호화 작업은 운영 체제(OS) 라이브러리에 의해 수행됩니다. 이 종속성은 다음과 같은 장점이 있습니다.

  • .NET 앱은 OS 안정성의 이점을 누릴 수 있습니다. 취약성으로부터 암호화 라이브러리를 안전하게 유지하는 것은 OS 공급업체의 높은 우선 순위입니다. 이를 위해 시스템 관리자가 적용해야 하는 업데이트를 제공합니다.
  • OS 라이브러리가 FIPS 유효성을 검사하는 경우 .NET 앱은 FIPS 유효성이 검사된 알고리즘에 액세스할 수 있습니다.

OS 라이브러리에 대한 종속성은 .NET 앱이 OS에서 지원하는 암호화 기능만 사용할 수 있음을 의미합니다. 모든 플랫폼은 특정 핵심 기능을 지원하지만 .NET에서 지원하는 일부 기능은 일부 플랫폼에서 사용할 수 없습니다. 이 문서에서는 각 플랫폼에서 지원되는 기능을 식별합니다.

이 문서에서는 .NET의 암호화에 대해 잘 알고 있다고 가정합니다. 자세한 내용은 .NET 암호화 모델.NET 암호화 서비스를 참조하세요.

해시 알고리즘

클래스를 포함한 *Managed 모든 해시 알고리즘 및 HMAC(해시 기반 메시지 인증) 클래스는 브라우저 WASM에서 .NET을 제외하고 OS 라이브러리로 연기합니다. 브라우저 WASM에서 SHA-1, SHA-2-256, SHA-2-384, SHA-2-512는 관리 코드를 사용하여 구현됩니다.

SHA-3

.NET 8에서는 SHAKE-128 및 SHAKE-256을 비롯한 SHA-3 해시 알고리즘에 대한 지원을 도입했습니다. SHA-3 지원은 현재 Windows 11 빌드 25324 이상 및 OpenSSL 1.1.1 이상의 Linux에서 지원됩니다.

대칭 암호화

기본 암호 및 연결은 시스템 라이브러리에서 수행됩니다.

암호 + 모드 Windows Linux macOS iOS, tvOS, MacCatalyst Android
AES-CBC ✔️ ✔️ ✔️ ✔️ ✔️
AES-ECB ✔️ ✔️ ✔️ ✔️ ✔️
AES-CFB8 ✔️ ✔️ ✔️ ✔️ ✔️
AES-CFB128 ✔️ ✔️ ✔️ ✔️ ✔️
3DES-CBC ✔️ ✔️ ✔️ ✔️ ✔️
3DES-ECB ✔️ ✔️ ✔️ ✔️ ✔️
3DES-CFB8 ✔️ ✔️ ✔️ ✔️ ✔️
3DES-CFB64 ✔️ ✔️ ✔️ ✔️ ✔️
DES-CBC ✔️ ✔️ ✔️ ✔️ ✔️
DES-ECB ✔️ ✔️ ✔️ ✔️ ✔️
DES-CFB8 ✔️ ✔️ ✔️ ✔️ ✔️
RC2-CBC ✔️ ✔️ ✔️ ✔️
RC2-ECB ✔️ ✔️ ✔️ ✔️
RC2-CFB

인증된 암호화

AE(인증된 암호화) 지원은 각각 , 및 클래스를 통해 System.Security.Cryptography.AesCcmSystem.Security.Cryptography.AesGcmAES-CCM, AES-GCM 및 System.Security.Cryptography.ChaCha20Poly1305 ChaCha20Poly1305에 대해 제공됩니다.

인증 암호화를 사용하려면 알고리즘을 지원하기 위해 최신 플랫폼 API가 필요하므로 모든 플랫폼에서 지원이 제공되지 않을 수 있습니다. IsSupported 알고리즘에 대한 클래스의 정적 속성을 사용하여 현재 플랫폼이 알고리즘을 지원하는지 여부를 런타임에 검색할 수 있습니다.

암호 + 모드 Windows Linux macOS iOS, tvOS, MacCatalyst Android 브라우저
AES-GCM ✔️ ✔️ ⚠️ ✔️
AES-CCM ✔️ ✔️ ⚠️ ✔️
ChaCha20Poly1305 Windows 10 빌드 20142+ OpenSSL 1.1.0 이상 ⚠️ API 수준 28 이상

macOS의 AES-CCM

macOS에서 시스템 라이브러리는 타사 코드에 AES-CCM을 지원하지 않으므로 클래스는 AesCcm OpenSSL을 지원합니다. macOS의 사용자는 이 형식이 작동하려면 OpenSSL(libcrypto)의 적절한 복사본을 가져와야 하며 시스템이 기본적으로 라이브러리를 로드하는 경로에 있어야 합니다. Homebrew와 같은 패키지 관리자에서 OpenSSL을 설치하는 것이 좋습니다.

macOS에 포함된 라이브러리 및 libcrypto.0.9.8.dylib 라이브러리는 libcrypto.0.9.7.dylib 이전 버전의 OpenSSL에서 사용되며 사용되지 않습니다. , libcrypto.41.dyliblibcrypto.42.dylib 라이브러리는 libcrypto.35.dylibLibreSSL에서 사용되며 사용되지 않습니다.

macOS의 AES-GCM 및 ChaCha20Poly1305

macOS는 타사 코드에 대해 macOS 10.15까지 AES-GCM 또는 ChaCha20Poly1305를 지원하지 않았습니다. .NET 8 AesGcm 이전에는 AES-CCM과 ChaCha20Poly1305 동일한 요구 사항이 있으며 사용자는 이러한 형식이 작동하려면 OpenSSL을 설치해야 합니다.

.NET 8부터 macOS의 .NET은 AES-GCM 및 ChaCha20Poly1305에 Apple의 CryptoKit 프레임워크를 사용합니다. 사용자는 macOS에서 AES-GCM 또는 ChaCha20Poly1305에 대한 추가 종속성을 설치하거나 구성할 필요가 없습니다.

AES-CCM 키, nonces 및 태그

  • 키 크기

    AES-CCM은 128, 192 및 256비트 키에서 작동합니다.

  • Nonce 크기

    클래스는 AesCcm 56, 64, 72, 80, 88, 96 및 104비트(7, 8, 9, 10, 11, 12 및 13바이트) nonces를 지원합니다.

  • 태그 크기

    클래스는 AesCcm 32, 48, 64, 80, 96, 112 및 128비트(4, 8, 10, 12, 14 및 16 바이트) 태그를 만들거나 처리할 수 있습니다.

AES-GCM 키, nonces 및 태그

  • 키 크기

    AES-GCM은 128, 192 및 256비트 키에서 작동합니다.

  • Nonce 크기

    클래스는 AesGcm 96비트(12바이트) nonces만 지원합니다.

  • Windows 및 Linux에서 AesGcm 태그 크기 클래스는 96, 104, 112, 120 및 128비트(12, 13, 14, 15 및 16 바이트) 태그를 만들거나 처리할 수 있습니다. macOS에서 태그 크기는 CryptoKit 프레임워크의 제한으로 인해 128비트(16비트)로 제한됩니다.

ChaCha20Poly1305 키, nonces 및 태그.

ChaCha20Poly1305에는 키, nonce 및 인증 태그의 크기가 고정되어 있습니다. ChaCha20Poly1305는 항상 256비트 키, 96비트(12바이트) nonce 및 128비트(16바이트) 태그를 사용합니다.

비대칭 암호화

이 섹션에는 다음 하위 섹션이 포함되어 있습니다.

RSA

RSA(Rivest–Shamir–Adleman) 키 생성은 OS 라이브러리에서 수행되며 크기 제한 및 성능 특성이 적용됩니다.

RSA 키 작업은 OS 라이브러리에서 수행되며 로드할 수 있는 키 유형에는 OS 요구 사항이 적용됩니다.

.NET은 "원시"(패드가 없는) RSA 작업을 노출하지 않습니다.

패딩 및 다이제스트 지원은 플랫폼에 따라 다릅니다.

패딩 모드 Windows(CNG) Linux(OpenSSL) macOS iOS, tvOS, MacCatalyst Android Windows(CAPI)
PKCS1 암호화 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-2 ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-32 Windows 11 빌드 25324+ OpenSSL 1.1.1 이상
PKCS1 서명(MD5, SHA-1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
PKCS1 서명(SHA-2) ✔️ ✔️ ✔️ ✔️ ✔️ ⚠️1
PKCS1 서명(SHA-3)2 Windows 11 빌드 25324+ OpenSSL 1.1.1 이상
Pss ✔️ ✔️ ✔️ ✔️ ✔️

1 CAPI(Windows CryptoAPI)는 SHA-2 알고리즘을 사용하여 PKCS1 서명을 수행할 수 있습니다. 그러나 개별 RSA 개체는 지원하지 않는 CSP(암호화 서비스 공급자)에 로드될 수 있습니다.

2 .NET 8이 필요합니다.

Windows의 RSA

RSA 네이티브 interop

.NET은 프로그램이 .NET 암호화 코드에서 사용하는 OS 라이브러리와 상호 운용할 수 있도록 형식을 노출합니다. 관련된 형식은 플랫폼 간에 변환되지 않으며 필요한 경우에만 직접 사용해야 합니다.

Type Windows Linux macOS iOS, tvOS, MacCatalyst Android
RSACryptoServiceProvider ✔️ ⚠️1 ⚠️1 ⚠️1 ⚠️1
RSACng ✔️
RSAOpenSsl ✔️ ⚠️2

1 Windows RSACryptoServiceProvider 가 아닌 경우 기존 프로그램과의 호환성을 위해 사용할 수 있습니다. 이 경우 명명된 키를 여는 것과 같이 OS interop이 필요한 모든 메서드는 을 throw합니다 PlatformNotSupportedException.

2 macOS에서는 RSAOpenSsl OpenSSL이 설치되어 있고 동적 라이브러리 로드를 통해 적절한 libcrypto dylib를 찾을 수 있는 경우 작동합니다. 적절한 라이브러리를 찾을 수 없는 경우 예외가 throw됩니다.

ECDSA

ECDSA(타원 곡선 디지털 서명 알고리즘) 키 생성은 OS 라이브러리에서 수행되며 크기 제한 및 성능 특성의 적용을 받습니다.

ECDSA 키 곡선은 OS 라이브러리에 의해 정의되며 해당 제한 사항이 적용됩니다.

타원 곡선 Windows 10 Windows 7 - 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256(secp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384(secp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521(secp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
브레인풀 곡선(명명된 곡선으로) ✔️ ⚠️1 ⚠️4
다른 명명된 곡선 ⚠️2 ⚠️1 ⚠️4
명시적 곡선 ✔️ ✔️ ✔️
명시적으로 내보내기 또는 가져오기 ✔️ 3 ✔️ 3 3 ✔️

1 Linux 배포판이 모두 동일한 명명된 곡선을 지원하지는 않습니다.

2 명명된 곡선에 대한 지원이 Windows 10의 Windows CNG에 추가되었습니다. 자세한 내용은 CNG 명명된 타원 곡선을 참조 하세요. 명명된 곡선은 Windows 7의 세 가지 곡선을 제외하고 이전 버전의 Windows에서는 사용할 수 없습니다.

3 명시적 곡선 매개 변수를 사용하여 내보내려면 APPLE 플랫폼 또는 이전 버전의 Windows에서 사용할 수 없는 OS 라이브러리 지원이 필요합니다.

4 일부 곡선에 대한 Android 지원은 Android 버전에 따라 달라집니다. Android 배포자는 Android 빌드에서도 곡선을 추가하거나 제거할 수 있습니다.

ECDSA 네이티브 Interop

.NET은 프로그램이 .NET 암호화 코드에서 사용하는 OS 라이브러리와 상호 운용할 수 있도록 형식을 노출합니다. 관련된 형식은 플랫폼 간에 변환되지 않으며 필요한 경우에만 직접 사용해야 합니다.

Type Windows Linux macOS iOS, tvOS, MacCatalyst Android
ECDsaCng ✔️
ECDsaOpenSsl ✔️ ⚠️*

* macOS에서는 ECDsaOpenSsl OpenSSL이 시스템에 설치되어 있고 동적 라이브러리 로드를 통해 적절한 libcrypto dylib를 찾을 수 있는 경우 작동합니다. 적절한 라이브러리를 찾을 수 없는 경우 예외가 throw됩니다.

ECDH

ECDH(타원 곡선 Diffie-Hellman) 키 생성은 OS 라이브러리에 의해 수행되며 크기 제한 및 성능 특성의 적용을 받습니다.

이 클래스는 ECDiffieHellman ECDH 계산의 "원시" 값과 다음 키 파생 함수를 지원합니다.

  • HASH(Z)
  • HASH(prepend || Z || append)
  • HMAC(key, Z)
  • HMAC(key, prepend || Z || append)
  • HMAC(Z, Z)
  • HMAC(Z, 앞에 || Z || append)
  • Tls11Prf(label, seed)

"원시" 키 파생은 .NET 8에서 도입되었습니다.

ECDH 키 곡선은 OS 라이브러리에 의해 정의되며 해당 제한 사항이 적용됩니다.

타원 곡선 Windows 10 Windows 7 - 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256(secp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384(secp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521(secp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
브레인풀 곡선(명명된 곡선으로) ✔️ ⚠️1 ⚠️4
다른 명명된 곡선 ⚠️2 ⚠️1 ⚠️4
명시적 곡선 ✔️ ✔️ ✔️
명시적으로 내보내기 또는 가져오기 ✔️ 3 ✔️ 3 3 ✔️

1 Linux 배포판이 모두 동일한 명명된 곡선을 지원하지는 않습니다.

2 명명된 곡선에 대한 지원이 Windows 10의 Windows CNG에 추가되었습니다. 자세한 내용은 CNG 명명된 타원 곡선을 참조 하세요. 명명된 곡선은 Windows 7의 세 가지 곡선을 제외하고 이전 버전의 Windows에서는 사용할 수 없습니다.

3 명시적 곡선 매개 변수를 사용하여 내보내려면 APPLE 플랫폼 또는 이전 버전의 Windows에서 사용할 수 없는 OS 라이브러리 지원이 필요합니다.

4 일부 곡선에 대한 Android 지원은 Android 버전에 따라 달라집니다. Android 배포자는 Android 빌드에서도 곡선을 추가하거나 제거할 수 있습니다.

ECDH 네이티브 interop

.NET은 프로그램이 .NET에서 사용하는 OS 라이브러리와 상호 운용할 수 있도록 형식을 노출합니다. 관련된 형식은 플랫폼 간에 변환되지 않으며 필요한 경우에만 직접 사용해야 합니다.

Type Windows Linux macOS iOS, tvOS, MacCatalyst Android
ECDiffieHellmanCng ✔️
ECDiffieHellmanOpenSsl ✔️ ⚠️*

* macOS에서는 ECDiffieHellmanOpenSsl OpenSSL이 설치되어 있고 동적 라이브러리 로드를 통해 적절한 libcrypto dylib를 찾을 수 있는 경우 작동합니다. 적절한 라이브러리를 찾을 수 없는 경우 예외가 throw됩니다.

DSA

DSA(디지털 서명 알고리즘) 키 생성은 시스템 라이브러리에서 수행되며 크기 제한 및 성능 특성의 적용을 받습니다.

함수 Windows CNG Linux macOS Windows CAPI iOS, tvOS, MacCatalyst Android
키 만들기(<= 1024비트) ✔️ ✔️ ✔️ ✔️
키 만들기(> 1024비트) ✔️ ✔️ ✔️
키 로드(<= 1024비트) ✔️ ✔️ ✔️ ✔️ ✔️
키 로드(> 1024비트) ✔️ ✔️ ⚠️* ✔️
FIPS 186-2 ✔️ ✔️ ✔️ ✔️ ✔️
FIPS 186-3(SHA-2 서명) ✔️ ✔️ ✔️

* macOS는 1024비트보다 큰 DSA 키를 로드하지만 해당 키의 동작은 정의되지 않습니다. FIPS 186-3에 따라 동작하지 않습니다.

Windows의 DSA

DSA 네이티브 interop

.NET은 프로그램이 .NET 암호화 코드에서 사용하는 OS 라이브러리와 상호 운용할 수 있도록 형식을 노출합니다. 관련된 형식은 플랫폼 간에 변환되지 않으며 필요한 경우에만 직접 사용해야 합니다.

Type Windows Linux macOS iOS, tvOS, MacCatalyst Android
DSACryptoServiceProvider ✔️ ⚠️1 ⚠️1 ⚠️1
DSACng ✔️
DSAOpenSsl ✔️ ⚠️2

1 Windows DSACryptoServiceProvider 가 아닌 경우 기존 프로그램과의 호환성을 위해 사용할 수 있습니다. 이 경우 명명된 키를 여는 것과 같이 시스템 interop이 필요한 메서드는 을 throw합니다 PlatformNotSupportedException.

2 macOS에서는 DSAOpenSsl OpenSSL이 설치되어 있고 동적 라이브러리 로드를 통해 적절한 libcrypto dylib를 찾을 수 있는 경우 작동합니다. 적절한 라이브러리를 찾을 수 없는 경우 예외가 throw됩니다.

X.509 인증서

.NET에서 X.509 인증서에 대한 대부분의 지원은 OS 라이브러리에서 제공됩니다. .NET의 인스턴스 또는 X509Certificate 인증서에 인증서를 X509Certificate2 로드하려면 기본 OS 라이브러리에서 인증서를 로드해야 합니다.

PKCS12/PFX 읽기

시나리오 Windows Linux macOS iOS, tvOS, MacCatalyst Android
비어 있음 ✔️ ✔️ ✔️ ✔️ ✔️
하나의 인증서, 프라이빗 키 없음 ✔️ ✔️ ✔️ ✔️ ✔️
프라이빗 키가 있는 인증서 1개 ✔️ ✔️ ✔️ ✔️ ✔️
여러 인증서, 프라이빗 키 없음 ✔️ ✔️ ✔️ ✔️ ✔️
여러 인증서, 하나의 프라이빗 키 ✔️ ✔️ ✔️ ✔️ ✔️
여러 인증서, 여러 개인 키 ✔️ ✔️ ✔️ ✔️ ✔️

PKCS12/PFX 작성

시나리오 Windows Linux macOS iOS, tvOS, MacCatalyst Android
비어 있음 ✔️ ✔️ ✔️ ✔️ ✔️
하나의 인증서, 프라이빗 키 없음 ✔️ ✔️ ✔️ ✔️ ✔️
프라이빗 키가 있는 인증서 1개 ✔️ ✔️ ✔️ ✔️ ✔️
여러 인증서, 프라이빗 키 없음 ✔️ ✔️ ✔️ ✔️ ✔️
여러 인증서, 하나의 프라이빗 키 ✔️ ✔️ ✔️ ✔️ ✔️
여러 인증서, 여러 개인 키 ✔️ ✔️ ✔️ ✔️ ✔️
임시 로드 ✔️ ✔️ ✔️ ✔️

macOS는 디스크에 쓰기가 필요한 키체인 개체 없이 인증서 프라이빗 키를 로드할 수 없습니다. 키 집합은 PFX 로드를 위해 자동으로 만들어지고 더 이상 사용하지 않을 때 삭제됩니다. 이 X509KeyStorageFlags.EphemeralKeySet 옵션은 프라이빗 키를 디스크에 쓰지 않아야 하므로 macOS PlatformNotSupportedException에서 해당 플래그를 어설션하면 .

PKCS7 인증서 컬렉션 작성

Windows와 Linux는 모두 DER로 인코딩된 PKCS7 Blob을 내보냅니다. macOS는 무기한 길이 CER로 인코딩된 PKCS7 Blob을 내보냅니다.

X509store

Windows에서 X509Store 클래스는 Windows 인증서 저장소 API의 표현입니다. 이러한 API는 .NET Core 및 .NET 5에서 .NET Framework와 동일하게 작동합니다.

비 Windows에서 X509Store 클래스는 시스템 신뢰 결정(읽기 전용), 사용자 신뢰 결정(읽기-쓰기) 및 사용자 키 스토리지(읽기-쓰기)의 프로젝션입니다.

다음 표에서는 각 플랫폼에서 지원되는 시나리오를 보여 줍니다. 테이블에서 지원되지 않는 시나리오❌ 의 경우 a CryptographicException 가 throw됩니다.

내 저장소

시나리오 Windows Linux macOS iOS, tvOS, MacCatalyst Android
CurrentUser\My 열기(ReadOnly) ✔️ ✔️ ✔️ ✔️ ✔️
CurrentUser\My 열기(ReadWrite) ✔️ ✔️ ✔️ ✔️ ✔️
CurrentUser\My 열기(ExistingOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
LocalMachine\My 열기 ✔️ ✔️ ✔️ ✔️

Linux에서는 첫 번째 쓰기에 저장소가 만들어지고 기본적으로 사용자 저장소가 없으므로 여 CurrentUser\MyExistingOnly 는 데 실패할 수 있습니다.

macOS에서 CurrentUser\My 저장소는 기본적으로 사용자의 기본 키체인login.keychain. 저장소는 LocalMachine\My .입니다 System.keychain.

루트 저장소

시나리오 Windows Linux macOS iOS, tvOS, MacCatalyst Android
CurrentUser\Root 열기(ReadOnly) ✔️ ✔️ ✔️ ✔️
CurrentUser\Root 열기(ReadWrite) ✔️ ✔️
CurrentUser\Root 열기(ExistingOnly) ✔️ ⚠️ ✔️ (ReadOnly인 경우) ✔️ (ReadOnly인 경우)
LocalMachine\Root 열기(ReadOnly) ✔️ ✔️ ✔️ ✔️
LocalMachine\Root 열기(ReadWrite) ✔️
LocalMachine\Root 열기(ExistingOnly) ✔️ ⚠️ ✔️ (ReadOnly인 경우) ✔️ (ReadOnly인 경우)

Linux에서 LocalMachine\Root 저장소는 OpenSSL의 기본 경로에 있는 CA 번들의 해석입니다.

macOS에서 CurrentUser\Root 저장소는 사용자 신뢰에 SecTrustSettings 대한 결과를 해석합니다기본. 저장소는 LocalMachine\Root 관리자 및 시스템 신뢰에 대한 결과를 해석 SecTrustSettings 한 기본.

중간 저장소

시나리오 Windows Linux macOS iOS, tvOS, MacCatalyst Android
CurrentUser\Intermediate 열기(ReadOnly) ✔️ ✔️ ✔️
CurrentUser\Intermediate 열기(ReadWrite) ✔️ ✔️
CurrentUser\Intermediate 열기(ExistingOnly) ✔️ ⚠️ ✔️ (ReadOnly인 경우)
LocalMachine\Intermediate 열기(ReadOnly) ✔️ ✔️ ✔️
LocalMachine\Intermediate 열기(ReadWrite) ✔️
LocalMachine\Intermediate 열기(ExistingOnly) ✔️ ⚠️ ✔️ (ReadOnly인 경우)

Linux에서 CurrentUser\Intermediate 저장소는 성공적인 X509Chain 빌드에 대한 기관 정보 액세스 레코드에 의해 중간 CA를 다운로드할 때 캐시로 사용됩니다. 저장소는 LocalMachine\Intermediate OpenSSL의 기본 경로에 있는 CA 번들의 해석입니다.

macOS에서 CurrentUser\Intermediate 저장소는 사용자 지정 저장소로 처리됩니다. 이 저장소에 추가된 인증서는 X.509 체인 빌드에 영향을 미치지 않습니다.

허용되지 않는 저장소

시나리오 Windows Linux macOS iOS, tvOS, MacCatalyst Android
CurrentUser\Disallowed 열기(ReadOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
CurrentUser\Disallowed 열기(ReadWrite) ✔️ ⚠️
CurrentUser\Disallowed 열기(ExistingOnly) ✔️ ⚠️ ✔️ (ReadOnly인 경우) ✔️ (ReadOnly인 경우) ✔️ (ReadOnly인 경우)
LocalMachine\Disallowed 열기(ReadOnly) ✔️ ✔️ ✔️ ✔️
LocalMachine\Disallowed 열기(ReadWrite) ✔️
LocalMachine\Disallowed 열기(ExistingOnly) ✔️ ✔️ (ReadOnly인 경우) ✔️ (ReadOnly인 경우) ✔️ (ReadOnly인 경우)

Linux에서 Disallowed 저장소는 체인 빌드에 사용되지 않으며 여기에 콘텐츠를 추가하려고 하면 .CryptographicException 이미 콘텐츠를 획득한 경우 스토어를 Disallowed 열 때 A CryptographicException 가 throw됩니다.

macOS에서 CurrentUser\Disallowed 및 LocalMachine\Disallowed 저장소는 신뢰가 설정된 Always Deny인증서에 대한 적절한 SecTrust설정 결과의 해석입니다.

존재하지 않는 저장소

시나리오 Windows Linux macOS iOS, tvOS, MacCatalyst Android
존재하지 않는 저장소 열기(ExistingOnly)
CurrentUser 존재하지 않는 저장소 열기(ReadWrite) ✔️ ✔️ ⚠️
LocalMachine 존재하지 않는 저장소 열기(ReadWrite) ✔️

macOS에서 X509Store API를 사용한 사용자 지정 저장소 만들기는 위치에 대해서만 CurrentUser 지원됩니다. 사용자의 키체인 디렉터리(~/Library/Keychains)에 암호가 없는 새 키체인 만듭니다. 암호를 사용하여 키체인 만들려면 P/Invoke를 SecKeychainCreate 사용할 수 있습니다. 마찬가지로 다른 SecKeychainOpen 위치에서 키체인 여는 데 사용할 수 있습니다. 결과를 IntPtr 전달하여 new X509Store(IntPtr) 현재 사용자의 사용 권한에 따라 읽기/쓰기 가능 저장소를 가져올 수 있습니다.

X509chain

macOS는 오프라인 CRL 사용률을 지원하지 않으므로 X509RevocationMode.Offline .X509RevocationMode.Online

macOS는 CRL(인증서 해지 목록) / OCSP(온라인 인증서 상태 프로토콜) /AIA(기관 정보 액세스) 다운로드에서 사용자가 시작한 시간 제한을 지원하지 않으므로 X509ChainPolicy.UrlRetrievalTimeout 무시됩니다.

추가 리소스