Platformfüggetlen titkosítás a .NET-ben

A .NET titkosítási műveleteit operációsrendszer-kódtárak végzik. Ennek a függőségnek előnyei vannak:

  • A .NET-alkalmazások kihasználják az operációs rendszer megbízhatóságát. A titkosítási kódtárak biztonsági rések elleni védelme az operációsrendszer-gyártók számára kiemelt fontosságú. Ehhez olyan frissítéseket biztosítanak, amelyeket a rendszergazdáknak alkalmazniuk kell.
  • A .NET-alkalmazások hozzáférhetnek a FIPS által ellenőrzött algoritmusokhoz, ha az operációsrendszer-kódtárak FIPS-ellenőrzéssel rendelkeznek.

Az operációsrendszer-kódtáraktól való függőség azt is jelenti, hogy a .NET-alkalmazások csak az operációs rendszer által támogatott titkosítási funkciókat használhatják. Bár minden platform támogatja bizonyos alapvető funkciókat, egyes .NET által támogatott funkciók egyes platformokon nem használhatók. Ez a cikk az egyes platformokon támogatott funkciókat ismerteti.

Ez a cikk feltételezi, hogy ismeri a .NET titkosítását. További információ: .NET titkosítási modell és .NET titkosítási szolgáltatások.

Kivonat- és üzenethitelesítési algoritmusok

Az összes kivonatalgoritmus és kivonatalapú üzenethitelesítési (HMAC) osztály, beleértve az *Managed osztályokat is, a böngészőben futó .NET WASM kivételével, az operációs rendszer könyvtáraira támaszkodik. A WASM böngészőben az SHA-1, az SHA-2-256, az SHA-2-384, az SHA-2-512 és a HMAC megfelelői felügyelt kóddal implementálódnak.

Algoritmus Windows Linux macOS iOS, tvOS, MacCatalyst Android Böngésző
MD5 ✔️ ✔️ ✔️ ✔️ ✔️
SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-2-256 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-2-384 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-2-512 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-3-256 Windows 11 25324+-os build OpenSSL 1.1.1+
SHA-3-384 Windows 11 25324+-os build OpenSSL 1.1.1+
SHA-3-512 Windows 11 25324+-os build OpenSSL 1.1.1+
SHAKE-128 Windows 11 25324+-os build OpenSSL 1.1.1+2
SHAKE-256 Windows 11 25324+-os build OpenSSL 1.1.1+2
HMAC-MD5 ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-2-256 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-2-384 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-2-512 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-3-256 Windows 11 25324+-os build OpenSSL 1.1.1+
HMAC-SHA-3-384 Windows 11 25324+-os build OpenSSL 1.1.1+
HMAC-SHA-3-512 Windows 11 25324+-os build OpenSSL 1.1.1+
KMAC-1281 Windows 11 26016+-os build OpenSSL 3.0+
KMAC-2561 Windows 11 26016+-os build OpenSSL 3.0+
KMAC-XOF-1281 Windows 11 26016+-os build OpenSSL 3.0+
KMAC-XOF-2561 Windows 11 26016+-os build OpenSSL 3.0+

1A .NET 9-től kezdve érhető el.

2A streamelhető bővíthető kimeneti függvény (XOF) a .NET 9-től érhető el. Linuxon ehhez OpenSSL 3.3 szükséges.

Szimmetrikus titkosítás

A mögöttes titkosítást és láncolást a rendszerkódtárak végzik.

Titkosítás + mód Windows Linux macOS iOS, tvOS, MacCatalyst Android
AES-CBC ✔️ ✔️ ✔️ ✔️ ✔️
AES-ECB ✔️ ✔️ ✔️ ✔️ ✔️
AES-CFB8 ✔️ ✔️ ✔️ ✔️ ✔️
AES-CFB128 ✔️ ✔️ ✔️ ✔️ ✔️
3DES-CBC ✔️ ✔️ ✔️ ✔️ ✔️
3DES-ECB ✔️ ✔️ ✔️ ✔️ ✔️
3DES-CFB8 (háromszoros DES titkosítás CFB8 üzemmódban) ✔️ ✔️ ✔️ ✔️ ✔️
3DES-CFB64 ✔️ ✔️ ✔️ ✔️ ✔️
DES-CBC ✔️ ✔️ ✔️ ✔️ ✔️
DES-ECB ✔️ ✔️ ✔️ ✔️ ✔️
DES-CFB8 ✔️ ✔️ ✔️ ✔️ ✔️
RC2-CBC ✔️ ✔️ ✔️ ✔️
RC2-ECB ✔️ ✔️ ✔️ ✔️
RC2-CFB

Hitelesített titkosítás

Hitelesített titkosítási (AE) támogatás érhető el az AES-CCM, az AES-GCM és a ChaCha20Poly1305 esetében az , System.Security.Cryptography.AesCcmés System.Security.Cryptography.AesGcm az System.Security.Cryptography.ChaCha20Poly1305osztályokon keresztül.

Mivel a hitelesített titkosításhoz újabb platform API-k szükségesek az algoritmus támogatásához, előfordulhat, hogy a támogatás nem minden platformon jelen van. Ha futásidőben szeretné észlelni, hogy az aktuális platform támogatja-e az algoritmust, használhatja az IsSupported osztály statikus tulajdonságát az algoritmushoz.

Titkosítás + mód Windows Linux macOS iOS, tvOS, MacCatalyst Android Böngésző
AES-GCM ✔️ ✔️ ✔️ ⚠️ ✔️
AES-CCM ✔️ ✔️ ✔️
ChaCha20Poly1305 Windows 10 Build 20142+ OpenSSL 1.1.0+ ✔️ ⚠️ API szint 28+

AES-CCM macOS rendszeren

A .NET 10 előtt AES-CCM működött, ha az OpenSSL támogatott verziója volt jelen, és a dinamikus kódtárbetöltő megtalálta. A macOS OpenSSL-támogatása el lett távolítva a .NET 10-ben.

AES-GCM és ChaCha20Poly1305 iOS, tvOS és MacCatalyst rendszeren

Az AES-GCM és a ChaCha20Poly1305 támogatása .NET 9-től kezdve érhető el iOS és tvOS 13.0 és újabb rendszereken, valamint a MacCatalyst összes verziójában.

AES-CCM-kulcsok, nonces és címkék

  • Kulcsméretek

    Az AES-CCM 128, 192 és 256 bites kulcsokkal működik.

  • Nonce méretek

    Az AesCcm osztály támogatja az 56, 64, 72, 80, 88, 96 és 104 bites (7, 8, 9, 10, 11, 12 és 13 bájtos) nonceseket.

  • Címkeméretek

    Az AesCcm osztály támogatja a 32, 48, 64, 80, 96, 112 és 128 bites (4, 8, 10, 12, 14 és 16 bájtos) címkék létrehozását vagy feldolgozását.

AES-GCM-kulcsok, nonces és címkék

  • Kulcsméretek

    Az AES-GCM 128, 192 és 256 bites kulcsokkal működik.

  • Nonce méretek

    Az AesGcm osztály csak 96 bites (12 bájtos) nonceseket támogat.

  • Címkeméretek

    Windows és Linux rendszeren az AesGcm osztály támogatja a 96, 104, 112, 120 és 128 bites (12, 13, 14, 15 és 16 bájtos) címkék létrehozását vagy feldolgozását. Apple-platformokon a címke mérete a CryptoKit-keretrendszer korlátozásai miatt legfeljebb 128 bites (16 bájtos) lehet.

ChaCha20Poly1305 kulcsok, noncék és címkék

A ChaCha20Poly1305 rögzített méretű a kulcs, a nonce és a hitelesítési címke számára. A ChaCha20Poly1305 mindig egy 256 bites kulcsot, egy 96 bites (12 bájtos) nonce-t és 128 bites (16 bájtos) címkét használ.

Aszimmetrikus titkosítás

Ez a szakasz a következő alszakaszokat tartalmazza:

RSA

Az RSA (Rivest–Shamir–Adleman) kulcsgenerálást az operációsrendszer-kódtárak végzik, és méretkorlátozásokra és teljesítményjellemzőkre vonatkoznak.

Az RSA-kulcsműveleteket az operációsrendszer-kódtárak hajtják végre, és a betölthető kulcstípusokra az operációs rendszer követelményei vonatkoznak.

A .NET nem teszi elérhetővé a "nyers" (nempadded) RSA-műveleteket.

A kitöltés és a kivonatolás támogatása platformonként eltérő:

Párnázási mód Windows (CNG) Linux (OpenSSL) macOS iOS, tvOS, MacCatalyst Android Windows (CAPI)
PKCS1 titkosítás ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP – SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP – SHA-2 ✔️ ✔️ ✔️ ✔️ ✔️
OAEP – SHA-3 Windows 11 25324+-os build OpenSSL 1.1.1+
PKCS1 aláírás (MD5, SHA-1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
PKCS1-aláírás (SHA-2) ✔️ ✔️ ✔️ ✔️ ✔️ ️ 1
PKCS1-aláírás (SHA-3) Windows 11 25324+-os build OpenSSL 1.1.1+
PSS ✔️ ✔️ ✔️ ✔️ ✔️

Az 1 Windows CryptoAPI (CAPI) sha-2 algoritmussal képes PKCS1 aláírásra. Az egyes RSA-objektum azonban betölthető egy olyan titkosítási szolgáltatóba (CSP), amely nem támogatja azt.

RSA Windows rendszeren

RSA natív interop

A .NET olyan típusokat tesz elérhetővé, amelyek lehetővé teszik, hogy a programok együttműködjenek a .NET-titkosítási kód által használt operációsrendszer-kódtárakkal. Az érintett típusok nem fordíthatók le a platformok között, és csak akkor használhatók közvetlenül, ha szükséges.

Típus Windows Linux macOS iOS, tvOS, MacCatalyst Android
RSACryptoServiceProvider ✔️ ️ 1 ️ 1 ️ 1 ️ 1
RSACng ✔️
RSAOpenSsl ✔️ 2

1 Nem Windows rendszeren használható a RSACryptoServiceProvider meglévő programokkal való kompatibilitáshoz. Ebben az esetben minden olyan módszer, amely operációsrendszer-interopot igényel, például egy elnevezett kulcs megnyitása, egy PlatformNotSupportedException.

2 A macOS rendszeren a .NET 10 előtt működött, ha az OpenSSL telepítve volt, és a dinamikus könyvtár betöltésekor megfelelő libcrypto dylib található. Ez a támogatás el lett távolítva a .NET 10-ben.

ECDSA

Az ECDSA (Elliptic Curve Digital Signature Algorithm) kulcsgenerálását az operációsrendszer-kódtárak végzik, és méretkorlátozásokra és teljesítményjellemzőkre vonatkoznak.

Az ECDSA-kulcsgörbéket az operációsrendszer-kódtárak határozzák meg, és ezekre korlátozások vonatkoznak.

Elliptikus görbe Windows 10 Windows 7 – 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (secp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (secp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (secp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Agyserkentő görbék (nevesített görbékként) ✔️ ️ 1 ️ 4
Egyéb elnevezett görbék ️ 2 ️ 1 ️ 4
Explicit görbék ✔️ ✔️ ✔️
Exportálás vagy importálás kifejezett módon ✔️ 3 ✔️ 3 3 ✔️

1 Linux-disztribúció nem mindegyik támogatja ugyanazokat a nevesített görbéket.

2 A nevesített görbék támogatása a Windows CNG-hez lett hozzáadva a Windows 10-ben. További információért lásd a CNG Named Elliptic Curves nevű szakaszt. Az elnevezett görbék a Windows korábbi verzióiban nem érhetők el, kivéve a Windows 7 három görbét.

3 Az explicit görbeparaméterekkel való exportáláshoz operációsrendszer-kódtár-támogatás szükséges, amely nem érhető el az Apple-platformokon vagy a Windows korábbi verzióiban.

4 Egyes görbék Android-támogatása az Android-verziótól függ. Az Android-forgalmazók dönthetnek úgy, hogy az Android-buildből is hozzáadnak vagy eltávolítanak görbéket.

ECDSA natív interoperabilitás

A .NET olyan típusokat tesz elérhetővé, amelyek lehetővé teszik, hogy a programok együttműködjenek a .NET-titkosítási kód által használt operációsrendszer-kódtárakkal. Az érintett típusok nem fordíthatók le a platformok között, és csak akkor használhatók közvetlenül, ha szükséges.

Típus Windows Linux macOS iOS, tvOS, MacCatalyst Android
ECDsaCng ✔️
ECDsaOpenSsl ✔️ ❌*

* A macOS rendszeren, a .NET 10 előtt, a ECDsaOpenSsl akkor működött, ha az OpenSSL telepítve volt, és a dinamikus könyvtárbetöltés során egy megfelelő libcrypto dylib megtalálható volt. Ez a támogatás el lett távolítva a .NET 10-ben.

ECDH

Az ECDH (Elliptic Curve Diffie-Hellman) kulcsgenerálását az operációsrendszer-kódtárak végzik, és méretkorlátozásokra és teljesítményjellemzőkre vonatkoznak.

Az ECDiffieHellman osztály támogatja az ECDH-számítások "nyers" értékét, valamint a következő fő származtatási függvényeket:

  • HASH(Z)
  • HASH(prepend || Z || hozzáfűzés)
  • HMAC(kulcs, Z)
  • HMAC(key, előfűz || Z || hozzáfűz)
  • HMAC(Z, Z)
  • HMAC(Z, előpend || Z || hozzáfűzés)
  • Tls11Prf(címke, vetőmag)

Az ECDH-kulcsgörbéket az operációsrendszer-kódtárak határozzák meg, és ezekre korlátozások vonatkoznak.

Elliptikus görbe Windows 10+ Windows 7 – 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (secp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (secp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (secp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Agyserkentő görbék (nevesített görbékként) ✔️ ️ 1 ️ 4
Egyéb elnevezett görbék ️ 2 ️ 1 ️ 4
Explicit görbék ✔️ ✔️ ✔️
Exportálás vagy importálás kifejezett módon ✔️ 3 ✔️ 3 3 ✔️

1 Linux-disztribúció nem mindegyik támogatja ugyanazokat a nevesített görbéket.

2 A nevesített görbék támogatása a Windows CNG-hez lett hozzáadva a Windows 10-ben. További információért lásd a CNG Named Elliptic Curves nevű szakaszt. Az elnevezett görbék a Windows korábbi verzióiban nem érhetők el, kivéve a Windows 7 három görbét.

3 Az explicit görbeparaméterekkel való exportáláshoz operációsrendszer-kódtár-támogatás szükséges, amely nem érhető el az Apple-platformokon vagy a Windows korábbi verzióiban.

4 Egyes görbék Android-támogatása az Android-verziótól függ. Az Android-forgalmazók dönthetnek úgy, hogy az Android-buildből is hozzáadnak vagy eltávolítanak görbéket.

ECDH natív interoperabilitás

A .NET olyan típusokat tesz elérhetővé, amelyek lehetővé teszik, hogy a programok együttműködjenek a .NET által használt operációsrendszer-kódtárakkal. Az érintett típusok nem fordíthatók le a platformok között, és csak akkor használhatók közvetlenül, ha szükséges.

Típus Windows Linux macOS iOS, tvOS, MacCatalyst Android
ECDiffieHellmanCng ✔️
ECDiffieHellmanOpenSsl ✔️ ❌*

* A macOS rendszeren, a .NET 10 előtt, a ECDiffieHellmanOpenSsl akkor működött, ha az OpenSSL telepítve volt, és a dinamikus könyvtárbetöltés során egy megfelelő libcrypto dylib megtalálható volt. Ez a támogatás el lett távolítva a .NET 10-ben.

DSA

A DSA (digitális aláírási algoritmus) kulcsgenerálását a rendszerkódtárak végzik, és méretkorlátozásaikra és teljesítményjellemzőikre vonatkoznak.

Függvény Windows CNG Linux macOS Windows CAPI iOS, tvOS, MacCatalyst Android
Kulcs létrehozása (<= 1024 bit) ✔️ ✔️ ✔️ ✔️
Kulcsgenerálás (> 1024 bit) ✔️ ✔️ ✔️
Kulcsok betöltése (<= 1024 bit) ✔️ ✔️ ✔️ ✔️ ✔️
Kulcsok betöltése (> 1024 bit) ✔️ ✔️ ⚠️* ✔️
FIPS 186-2 ✔️ ✔️ ✔️ ✔️ ✔️
FIPS 186-3 (SHA-2 aláírások) ✔️ ✔️ ✔️

* a macOS 1024 bitesnél nagyobb DSA-kulcsokat tölt be, de ezeknek a kulcsoknak a viselkedése nincs meghatározva. Nem a FIPS 186-3 szerint viselkednek.

DSA Windows rendszeren

DSA natív interoperabilitás

A .NET olyan típusokat tesz elérhetővé, amelyek lehetővé teszik, hogy a programok együttműködjenek a .NET-titkosítási kód által használt operációsrendszer-kódtárakkal. Az érintett típusok nem fordíthatók le a platformok között, és csak akkor használhatók közvetlenül, ha szükséges.

Típus Windows Linux macOS iOS, tvOS, MacCatalyst Android
DSACryptoServiceProvider ✔️ ️ 1 ️ 1 ️ 1
DSACng ✔️
DSAOpenSsl ✔️ 2

1 Nem Windows rendszeren használható a DSACryptoServiceProvider meglévő programokkal való kompatibilitáshoz. Ebben az esetben minden olyan módszer, amely rendszerkompatibilitást igényel, például egy elnevezett kulcs megnyitása, kivált egy PlatformNotSupportedException.

2 A macOS rendszeren a .NET 10 előtt működött, ha az OpenSSL telepítve volt, és a dinamikus könyvtár betöltésekor megfelelő libcrypto dylib található. Ez a támogatás el lett távolítva a .NET 10-ben.

Kvantumtriptográfia utáni titkosítás

A poszt-kvantum algoritmusok a .NET 10-től érhetők el. A .NET-keretrendszerhez is elérhetők a Microsoft.Bcl.Cryptography NuGet csomag használatával. Az alábbi támogatási táblázat jelzi a beépített operációs rendszer titkosítási összetevőinek platformtámogatását, például az Generate vagy ImportFromPem elemekből létrehozott összetevőket. Az alaposztályból származó implementációk különböző támogatási viselkedésekkel rendelkezhetnek.

A beépített algoritmusok esetében statikus IsSupported tulajdonság áll rendelkezésre annak megállapítására, hogy a platform támogatja-e a paraméterkészletek bármelyikét.

A kvantum utáni algoritmusok natív interoptípusai nem támogatják a kulcsgenerálást és az importálást. Kifejezetten olyan interop forgatókönyvekhez léteznek, amelyek natív platformtípusokkal rendelkeznek, például EVP_PKEY OpenSSL-en vagy CngKey Windowson.

ML-KEM

Algoritmus Windows Linux Alma Android Böngésző
ML-KEM-512 Windows 11 Insider (legújabb) OpenSSL 3.5.0+
ML-KEM-768 Windows 11 Insider (legújabb) OpenSSL 3.5.0+
ML-KEM-1024 Windows 11 Insider (legújabb) OpenSSL 3.5.0+

Natív interop ML-KEM

ML-DSA

ML-DSA-nak van egy tiszta és prehash változata (HashML-DSA). Az alábbi táblázat a tiszta és a prehash változatokat is tükrözi.

Algoritmus Windows Linux Alma Android Böngésző
ML-DSA-44 Windows 11 Insider (legújabb) OpenSSL 3.5.0+
ML-DSA-65 Windows 11 Insider (legújabb) OpenSSL 3.5.0+
ML-DSA-87 Windows 11 Insider (legújabb) OpenSSL 3.5.0+
ML-DSA-44 Külső Mu (μ)1 OpenSSL 3.5.0+
ML-DSA-65 külső Mu (μ)1 OpenSSL 3.5.0+
ML-DSA-87 Külső Mu (μ)1 OpenSSL 3.5.0+

1 A külső mu-támogatás csak a mu aláírására és ellenőrzésére vonatkozik. A mu számítása nem támogatott.

Natív interop ML-DSA

SLH-DSA

SLH-DSA-nak van egy alap és prehash változata (HashSLH-DSA). Az alábbi táblázat a tiszta és a prehash változatokat is tükrözi.

Algoritmus Windows Linux Alma Android Böngésző
SLH-DSA-SHA2-128f OpenSSL 3.5.0+
SLH-DSA-SHA2-128s OpenSSL 3.5.0+
SLH-DSA-SHA2-192f OpenSSL 3.5.0+
SLH-DSA-SHA2-192s OpenSSL 3.5.0+
SLH-DSA-SHA2-256f OpenSSL 3.5.0+
SLH-DSA-SHA2-256s OpenSSL 3.5.0+
SLH-DSA-SHAKE-128f OpenSSL 3.5.0+
SLH-DSA-SHAKE-128s OpenSSL 3.5.0+
SLH-DSA-SHAKE-192f OpenSSL 3.5.0+
SLH-DSA-SHAKE-192s OpenSSL 3.5.0+
SLH-DSA-SHAKE-256f OpenSSL 3.5.0+
SLH-DSA-SHAKE-256s OpenSSL 3.5.0+

Natív interop SLH-DSA

Összetett ML-DSA

Algoritmus Windows Linux Alma Android Böngésző
MLDSA44-RSA2048-PSS-SHA256 OpenSSL 3.5.0+
MLDSA44-RSA2048-PKCS15-SHA256 OpenSSL 3.5.0+
MLDSA44–Ed25519-SHA512
MLDSA44-ECDSA-P256-SHA256 Windows 11 Insider (legújabb) OpenSSL 3.5.0+
MLDSA65-RSA3072-PSS-SHA512 OpenSSL 3.5.0+
MLDSA65-RSA3072-PKCS15-SHA512 OpenSSL 3.5.0+
MLDSA65-RSA4096-PSS-SHA512 OpenSSL 3.5.0+
MLDSA65-RSA4096-PKCS15-SHA512 OpenSSL 3.5.0+
MLDSA65-ECDSA-P256-SHA512 Windows 11 Insider (legújabb) OpenSSL 3.5.0+
MLDSA65-ECDSA-P384-SHA512 Windows 11 Insider (legújabb) OpenSSL 3.5.0+
MLDSA65-ECDSA-brainpoolP256r1-SHA512 OpenSSL 3.5.0+
MLDSA65–Ed25519-SHA512
MLDSA87-ECDSA-P384-SHA512 Windows 11 Insider (legújabb) OpenSSL 3.5.0+
MLDSA87-ECDSA-brainpoolP384r1-SHA512 OpenSSL 3.5.0+
MLDSA87-Ed448-SHAKE256
MLDSA87-RSA3072-PSS-SHA512 OpenSSL 3.5.0+
MLDSA87-RSA4096-PSS-SHA512 OpenSSL 3.5.0+
MLDSA87-ECDSA-P521-SHA512 OpenSSL 3.5.0+

Összetett natív interop ML-DSA

X.509-tanúsítványok

A .NET-ben az X.509-tanúsítványok támogatásának többsége operációsrendszer-kódtárakból származik. Ha egy tanúsítványt egy .NET-példányba vagy X509Certificate2 -X509Certificatepéldányba szeretne betölteni, a tanúsítványt a mögöttes operációsrendszer-kódtárnak kell betöltenie.

PKCS12/PFX olvasása

Forgatókönyv Windows Linux macOS iOS, tvOS, MacCatalyst Android
Üres ✔️ ✔️ ✔️ ✔️ ✔️
Egy tanúsítvány, titkos kulcs nélkül ✔️ ✔️ ✔️ ✔️ ✔️
Egy tanúsítvány, titkos kulccsal ✔️ ✔️ ✔️ ✔️ ✔️
Több tanúsítvány, titkos kulcsok nélkül ✔️ ✔️ ✔️ ✔️ ✔️
Több tanúsítvány, egy titkos kulcs ✔️ ✔️ ✔️ ✔️ ✔️
Több tanúsítvány, több titkos kulcs ✔️ ✔️ ✔️ ✔️ ✔️

PKCS12/PFX írása

Forgatókönyv Windows Linux macOS iOS, tvOS, MacCatalyst Android
Üres ✔️ ✔️ ✔️ ✔️ ✔️
Egy tanúsítvány, titkos kulcs nélkül ✔️ ✔️ ✔️ ✔️ ✔️
Egy tanúsítvány, titkos kulccsal ✔️ ✔️ ✔️ ✔️ ✔️
Több tanúsítvány, titkos kulcsok nélkül ✔️ ✔️ ✔️ ✔️ ✔️
Több tanúsítvány, egy titkos kulcs ✔️ ✔️ ✔️ ✔️ ✔️
Több tanúsítvány, több titkos kulcs ✔️ ✔️ ✔️ ✔️ ✔️
Átmeneti betöltés ✔️ ✔️ ✔️ ✔️

A macOS nem tudja betölteni a tanúsítvány titkos kulcsait kulcskarika-objektum nélkül, ami lemezre írást igényel. A rendszer automatikusan létrehozza a kulcsláncokat a PFX betöltéséhez, és a rendszer törli őket, ha már nincs használatban. Mivel a X509KeyStorageFlags.EphemeralKeySet beállítás azt jelenti, hogy a privát kulcsot nem szabad lemezre írni, ennek a jelölőnek a macOS rendszeren való érvényesítése egy PlatformNotSupportedException.

A PKCS7 tanúsítványgyűjtemény írása

A Windows és a Linux egyaránt DER-kódolású PKCS7-blobokat bocsát ki. a macOS meghatározatlan hosszúságú-CER-kódolású PKCS7-blobokat bocsát ki.

X509Store

Windows rendszeren az X509Store osztály a Windows Tanúsítványtár API-k reprezentációja. Ezek az API-k ugyanúgy működnek a .NET-ben, mint a .NET-keretrendszerben.

Nem Windows rendszeren a X509Store osztály a rendszermegbízhatósági döntések vetülete (csak olvasható), a felhasználói megbízhatósági döntések (olvasás-írás), és a felhasználói kulcstár (olvasás-írás).

Az alábbi táblázatok azt mutatják be, hogy mely forgatókönyvek támogatottak az egyes platformokon. A nem támogatott forgatókönyvek esetén (❌ a táblákban) a rendszer egy CryptographicException értéket ad ki.

A Saját áruház

Forgatókönyv Windows Linux macOS iOS, tvOS, MacCatalyst Android
CurrentUser\My (ReadOnly) megnyitása ✔️ ✔️ ✔️ ✔️ ✔️
Nyissa meg a CurrentUser\My (ReadWrite) ✔️ ✔️ ✔️ ✔️ ✔️
Nyissa meg a CurrentUser\My (ExistingOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
LocalMachine\My megnyitása ✔️ ✔️ ✔️ ✔️

Linuxon a tárolók az első íráskor jönnek létre, és alapértelmezés szerint nem léteznek felhasználói tárolók, így előfordulhat, hogy a CurrentUser\MyExistingOnly megnyitása sikertelen lesz.

MacOS rendszeren a CurrentUser\My a felhasználó alapértelmezett kulcslánca, ami alapértelmezés szerint van beállítva.login.keychain Az LocalMachine\My üzlet System.keychain.

A gyökértároló

Forgatókönyv Windows Linux macOS iOS, tvOS, MacCatalyst Android
Nyisd meg a CurrentUser\Root (ReadOnly) ✔️ ✔️ ✔️ ✔️
CurrentUser\Root (ReadWrite) megnyitása ✔️ ✔️
Nyissa meg a CurrentUser\Root (ExistingOnly) könyvtárat ✔️ ⚠️ ✔️ (ha csak olvasható) ✔️ (ha csak olvasható)
A LocalMachine\Root megnyitása (ReadOnly) ✔️ ✔️ ✔️ ✔️
A LocalMachine\Root (ReadWrite) megnyitása ✔️
Nyissa meg a LocalMachine\Root (ExistingOnly) ✔️ ⚠️ ✔️ (ha csak olvasható) ✔️ (ha csak olvasható)

Linuxon a LocalMachine\Root tároló a CA-csomag értelmezése az OpenSSL alapértelmezett elérési útján.

A macOS rendszerben a CurrentUser\Root tároló a felhasználói megbízhatósági SecTrustSettings tartományhoz tartozó eredmények értelmezése. Az LocalMachine\Root áruház a rendszergazdai és a megbízhatósági SecTrustSettings tartományok eredményeinek értelmezése.

Megbízható főtanúsítvány-helyek Linuxon

Linuxon a .NET az OpenSSL (libssl) használatával keresi meg a megbízható főtanúsítványokat. Az OpenSSL a tanúsítványtároló helyét környezeti változók (SSL_CERT_FILE és ) és SSL_CERT_DIRterjesztési specifikus alapértelmezett elérési utak használatával határozza meg. Ha az OpenSSL-hez konfigurált gyökértároló könyvtár nem tartalmaz tanúsítványokat, a .NET az ellenőrzéshez /etc/ssl/certs-ra támaszkodik. Ez a tartalék biztosítja az olyan disztribúciókkal való kompatibilitást, mint a SUSE Linux Enterprise Server (SLES), ahol a megadott SSL_CERT_DIR címtár csak olyan formátumú tanúsítványokat BEGIN TRUSTED CERTIFICATE tartalmazhat, amelyeket a .NET nem támogat főtanúsítványként.

Ez a visszaesés csak akkor fordul elő, ha:

  1. A SSL_CERT_DIR környezeti változó nincs explicit módon beállítva.
  2. Az alapértelmezett tanúsítványkönyvtár nem tartalmaz használható tanúsítványokat.

Ha a tanúsítványok nem megfelelően töltődnek be, ellenőrizze, hogy:

  • A tanúsítványfájlok PEM formátumban vannak a BEGIN CERTIFICATE jelölővel (nem BEGIN TRUSTED CERTIFICATE).
  • A SSL_CERT_DIR környezeti és SSL_CERT_FILE a környezeti változók a megfelelő helyekre mutatnak, ha be van állítva.
  • A tanúsítványcsomag fájlja vagy könyvtára rendelkezik a megfelelő olvasási engedélyekkel.

A köztes tároló

Forgatókönyv Windows Linux macOS iOS, tvOS, MacCatalyst Android
Nyissa meg a CurrentUser\Intermediate (ReadOnly) mappát ✔️ ✔️ ✔️
Nyissa meg a CurrentUser\Intermediate (ReadWrite) mappát ✔️ ✔️
Nyissa meg a CurrentUser\Intermediate (ExistingOnly) mappát ✔️ ⚠️ ✔️ (ha csak olvasható)
Nyissa meg a LocalMachine\Intermediate (ReadOnly) fájlt ✔️ ✔️ ✔️
LocalMachine\Intermediate (ReadWrite) megnyitása ✔️
Nyissa meg a LocalMachine\Intermediate (ExistingOnly) lehetőséget. ✔️ ⚠️ ✔️ (ha csak olvasható)

Linuxon a CurrentUser\Intermediate tároló gyorsítótárként működik, amikor a köztes hitelesítésszolgáltatókat a szolgáltatói információelérési rekordjaikon keresztül töltik le sikeres X509Chain-építések során. Az LocalMachine\Intermediate áruház a CA-csomag értelmezése az OpenSSL alapértelmezett útvonalán.

MacOS rendszeren az CurrentUser\Intermediate áruház egyéni tárolóként lesz kezelve. Az áruházhoz hozzáadott tanúsítványok nem befolyásolják az X.509-láncépítést.

A nem engedélyezett tároló

Forgatókönyv Windows Linux macOS iOS, tvOS, MacCatalyst Android
Nyissa meg a CurrentUser\Disallowed (ReadOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
Nyissa meg a CurrentUser\Disallowed (ReadWrite) ✔️ ⚠️
Nyissa meg a CurrentUser\Disallowed (ExistingOnly) útvonalat ✔️ ⚠️ ✔️ (ha csak olvasható) ✔️ (ha csak olvasható) ✔️ (ha csak olvasható)
Nyissa meg a LocalMachine\Disallowed (Csak olvasható) ✔️ ✔️ ✔️ ✔️
Nyissa meg a LocalMachine\Disallowed (Írás/Olvasás) ✔️
Nyisd meg a LocalMachine\Disallowed (ExistingOnly) ✔️ ✔️ (ha csak olvasható) ✔️ (ha csak olvasható) ✔️ (ha csak olvasható)

Linux rendszeren a Disallowed tárhelyet nem használják a lánc felépítésében, és ha megpróbálunk tartalmat hozzáadni, az eredménye egy CryptographicException. A CryptographicException kivételt dob, amikor megnyitja a Disallowed tárolót, ha az már rendelkezik tartalommal.

MacOS rendszeren a CurrentUser\Letiltott és a LocalMachine\Letiltott tárolók a megfelelő SecTrustSettings-eredményeket értelmezik azokhoz a tanúsítványokhoz, amelyek megbízhatósága a következőre Always Denyvan állítva.

Nem létező bolt

Forgatókönyv Windows Linux macOS iOS, tvOS, MacCatalyst Android
Nem létező tároló megnyitása (ExistingOnly)
A CurrentUser nem létező tároló megnyitása (ReadWrite) ✔️ ✔️ ⚠️
A LocalMachine nem létező tároló megnyitása (ReadWrite) ✔️

MacOS rendszeren az X509Store API-val történő egyéni tárolólétrehozás csak a CurrentUser hely esetén támogatott. Új kulcskarikát hoz létre jelszó nélkül a felhasználó kulcskarikakönyvtárában (~/Library/Keychains). Jelszóval rendelkező kulcskarika létrehozásához használhat egy P/Invoke parancsot SecKeychainCreate . Hasonlóképpen használható SecKeychainOpen a kulcskarikák különböző helyeken való megnyitására is. Az eredményül kapott IntPtr adatok átadhatók egy olvasási/írási képességű tároló beszerzéséhez new X509Store(IntPtr) , az aktuális felhasználó engedélyeinek függvényében.

X509Chain

a macOS nem támogatja az offline CRL-kihasználtságot, ezért X509RevocationMode.Offline a rendszer a X509RevocationMode.Onlinekövetkezőképpen kezeli: .

A macOS nem támogatja a felhasználó által kezdeményezett időtúllépést a CRL (tanúsítvány-visszavonási lista) / OCSP (Online tanúsítványállapot-protokoll) / AIA (Authority Information Access) letöltésén, ezért X509ChainPolicy.UrlRetrievalTimeout a rendszer figyelmen kívül hagyja.

Kvantum utáni titkosítási tanúsítványok és PKCS12/PFX

A kvantumtanúsítvány utáni támogatáshoz a primitív algoritmus is támogatást igényel.

Operation Algoritmus Windows Linux Alma Android Böngésző
PKCS#12 Importálás ML-DSA ✔️ ✔️
PKCS#12 Exportálás ML-DSA ✔️ ✔️
Titkos kulcs társítás ML-DSA ✔️ ✔️
 
PKCS#12 Importálás ML-KEM ✔️
PKCS#12 Exportálás ML-KEM ✔️
Titkos kulcs társítás ML-KEM ✔️
 
PKCS#12 Importálás SLH-DSA ✔️
PKCS#12 Exportálás SLH-DSA ✔️
Titkos kulcs társítás SLH-DSA ✔️

További erőforrások