Plattformsoberoende kryptografi i .NET

Kryptografiska åtgärder i .NET utförs av operativsystembibliotek (OS). Det här beroendet har fördelar:

  • .NET-appar drar nytta av tillförlitligheten i operativsystemet. Att skydda kryptografibibliotek från sårbarheter är en hög prioritet för OS-leverantörer. För att göra det tillhandahåller de uppdateringar som systemadministratörer bör tillämpa.
  • .NET-appar har åtkomst till FIPS-verifierade algoritmer om OS-biblioteken är FIPS-verifierade.

Beroendet av OS-bibliotek innebär också att .NET-appar endast kan använda kryptografiska funktioner som operativsystemet stöder. Även om alla plattformar stöder vissa kärnfunktioner kan vissa funktioner som .NET stöder inte användas på vissa plattformar. Den här artikeln identifierar de funktioner som stöds på varje plattform.

Den här artikeln förutsätter att du har en fungerande kunskap om kryptografi i .NET. Mer information finns i .NET Cryptography Model och .NET Cryptographic Services.

Algoritmer för hash- och meddelandeautentisering

Alla hash-algoritmer och hash-baserade HMAC-klasser (meddelandeautentisering), inklusive klasserna *Managed , skjuts upp till OS-biblioteken med undantag för .NET i webbläsarens WASM. I webbläsarens WASM, SHA-1, SHA-2-256, SHA-2-384, SHA-2-512 och HMAC-motsvarigheter implementeras med hjälp av hanterad kod.

Algoritm Windows Linux macOS iOS, tvOS, MacCatalyst Android Webbläsare
MD5 ✔️ ✔️ ✔️ ✔️ ✔️
SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-2-256 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-2-384 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-2-512 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-3-256 Windows 11 Build 25324+ OpenSSL 1.1.1+
SHA-3-384 Windows 11 Build 25324+ OpenSSL 1.1.1+
SHA-3-512 Windows 11 Build 25324+ OpenSSL 1.1.1+
SHAKE-128 Windows 11 Build 25324+ OpenSSL 1.1.1+2
SHAKE-256 Windows 11 Build 25324+ 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 Build 25324+ OpenSSL 1.1.1+
HMAC-SHA-3-384 Windows 11 Build 25324+ OpenSSL 1.1.1+
HMAC-SHA-3-512 Windows 11 Build 25324+ OpenSSL 1.1.1+
KMAC-1281 Windows 11 Build 26016+ OpenSSL 3.0+
KMAC-2561 Windows 11 Build 26016+ OpenSSL 3.0+
KMAC-XOF-1281 Windows 11 Build 26016+ OpenSSL 3.0+
KMAC-XOF-2561 Windows 11 Build 26016+ OpenSSL 3.0+

1Tillgängligt från och med .NET 9.

2Utökningsbar utdatafunktion för direktuppspelning (XOF) är tillgänglig från och med .NET 9. I Linux kräver detta OpenSSL 3.3.

Symmetrisk kryptering

De underliggande chiffer och kedjekopplingar görs av systembiblioteken.

Chiffer + läge 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

Autentiserad kryptering

Stöd för autentiserad System.Security.Cryptography.AesCcmkryptering (AE) tillhandahålls för AES-CCM, AES-GCM och ChaCha20Poly1305 via klasserna , System.Security.Cryptography.AesGcmrespektive System.Security.Cryptography.ChaCha20Poly1305 .

Eftersom autentiserad kryptering kräver nyare plattforms-API:er för att stödja algoritmen kanske stödet inte finns på alla plattformar. Den IsSupported statiska egenskapen för klasserna för algoritmen kan användas för att identifiera vid körning om den aktuella plattformen stöder algoritmen eller inte.

Chiffer + läge Windows Linux macOS iOS, tvOS, MacCatalyst Android Webbläsare
AES-GCM ✔️ ✔️ ✔️ ⚠️ ✔️
AES-CCM ✔️ ✔️ ✔️
ChaCha20Poly1305 Windows 10 Build 20142+ OpenSSL 1.1.0+ ✔️ ⚠️ API-nivå 28+

AES-CCM på macOS

Före .NET 10 fungerade AES-CCM om en version av OpenSSL som stöds fanns och den dynamiska biblioteksinläsaren kunde hitta den. OpenSSL-stöd för macOS togs bort i .NET 10.

AES-GCM och ChaCha20Poly1305 på iOS, tvOS och MacCatalyst

Stöd för AES-GCM och ChaCha20Poly1305 är tillgängligt från och med .NET 9 på iOS och tvOS 13.0 och senare samt alla versioner av MacCatalyst.

AES-CCM-nycklar, nonces och taggar

  • Nyckelstorlekar

    AES-CCM fungerar med 128, 192 och 256-bitars nycklar.

  • Nonce-storlekar

    Klassen AesCcm stöder nonces för 56, 64, 72, 80, 88, 96 och 104 bitar (7, 8, 9, 10, 11, 12 och 13 byte).

  • Taggstorlekar

    Klassen AesCcm stöder skapande eller bearbetning av taggarna 32, 48, 64, 80, 96, 112 och 128 bitar (4, 8, 10, 12, 14 och 16 byte).

AES-GCM-nycklar, nonces och taggar

  • Nyckelstorlekar

    AES-GCM fungerar med 128, 192 och 256-bitars nycklar.

  • Nonce-storlekar

    Klassen AesGcm stöder endast 96-bitars nonces (12 byte).

  • Taggstorlekar I Windows och Linux AesGcm har klassen stöd för att skapa eller bearbeta taggarna 96, 104, 112, 120 och 128 bitar (12, 13, 14, 15 och 16 byte). På Apple-plattformar är taggstorleken begränsad till 128-bitars (16 byte) på grund av begränsningar i CryptoKit-ramverket.

ChaCha20Poly1305-nycklar, nonces och taggar.

ChaCha20Poly1305 har en fast storlek för nyckel-, nonce- och autentiseringstaggen. ChaCha20Poly1305 använder alltid en 256-bitarsnyckel, en 96-bitars (12 byte) nonce och en 128-bitars tagg (16 byte).

Asymmetrisk kryptografi

Det här avsnittet innehåller följande underavsnitt:

RSA

RSA-nyckelgenereringen (Rivest–Shamir–Adleman) utförs av OS-biblioteken och omfattas av deras storleksbegränsningar och prestandaegenskaper.

RSA-nyckelåtgärder utförs av OS-biblioteken och de typer av nycklar som kan läsas in omfattas av OS-kraven.

.NET exponerar inte RSA-åtgärder (oskyddade) "raw".

Stöd för utfyllnad och sammandrag varierar beroende på plattform:

Utfyllnadsläge Windows (CNG) Linux (OpenSSL) macOS iOS, tvOS, MacCatalyst Android Windows (CAPI)
PKCS1-kryptering ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-2 ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-3 Windows 11 Build 25324+ OpenSSL 1.1.1+
PKCS1-signatur (MD5, SHA-1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
PKCS1-signatur (SHA-2) ✔️ ✔️ ✔️ ✔️ ✔️ ⚠️1
PKCS1-signatur (SHA-3) Windows 11 Build 25324+ OpenSSL 1.1.1+
PSS ✔️ ✔️ ✔️ ✔️ ✔️

1 Windows CryptoAPI (CAPI) kan använda PKCS1-signatur med en SHA-2-algoritm. Men det enskilda RSA-objektet kan läsas in i en kryptografisk tjänstprovider (CSP) som inte stöder det.

RSA i Windows

RSA-inbyggt interop

.NET exponerar typer för att tillåta att program samverkar med de OS-bibliotek som .NET-kryptografikoden använder. De typer som berörs översätter inte mellan plattformar och bör endast användas direkt när det behövs.

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

1 På icke-Windows RSACryptoServiceProvider kan användas för kompatibilitet med befintliga program. I så fall genererar alla metoder som kräver OS-interop, till exempel att öppna en namngiven nyckel, en PlatformNotSupportedException.

2 På macOS fungerade före .NET 10 RSAOpenSsl om OpenSSL installerades och en lämplig libcrypto dylib kunde hittas via dynamisk biblioteksinläsning. Det här stödet har tagits bort i .NET 10.

ECDSA

ECDSA-nyckelgenereringen (Elliptic Curve Digital Signature Algorithm) utförs av OS-biblioteken och omfattas av deras storleksbegränsningar och prestandaegenskaper.

ECDSA-nyckelkurvor definieras av OS-biblioteken och omfattas av deras begränsningar.

Elliptisk kurva Windows 10 Windows 7 – 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (sekp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (sekp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (sekp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Brainpool-kurvor (som namngivna kurvor) ✔️ ⚠️1 ⚠️4
Andra namngivna kurvor ⚠️2 ⚠️1 ⚠️4
Explicita kurvor ✔️ ✔️ ✔️
Exportera eller importera som explicit ✔️ 3 ✔️ 3 3 ✔️

1 Linux-distributioner har inte stöd för samma namngivna kurvor.

2 Stöd för namngivna kurvor har lagts till i Windows CNG i Windows 10. Mer information finns i CNG Med namnet Elliptiska kurvor. Namngivna kurvor är inte tillgängliga i tidigare versioner av Windows, förutom tre kurvor i Windows 7.

3 Export med explicita kurvparametrar kräver stöd för OS-bibliotek, som inte är tillgängligt på Apple-plattformar eller tidigare versioner av Windows.

4 Android-stöd för vissa kurvor beror på Android-versionen. Android-distributörer kan också välja att lägga till eller ta bort kurvor från sin Android-version.

ECDSA Native Interop (Inbyggd Samverkansfunktion)

.NET exponerar typer för att tillåta att program samverkar med de OS-bibliotek som .NET-kryptografikoden använder. De typer som berörs översätter inte mellan plattformar och bör endast användas direkt när det behövs.

Typ Windows Linux macOS iOS, tvOS, MacCatalyst Android
ECDsaCng ✔️
ECDsaOpenSsl ✔️ ❌*

* På macOS, före .NET 10, ECDsaOpenSsl fungerade om OpenSSL installerades och en lämplig libcrypto dylib kunde hittas via dynamisk biblioteksinläsning. Det här stödet har tagits bort i .NET 10.

ECDH

ECDH-nyckelgenereringen (Elliptic Curve Diffie-Hellman) utförs av OS-biblioteken och omfattas av deras storleksbegränsningar och prestandaegenskaper.

Klassen ECDiffieHellman stöder det "råa" värdet för ECDH-beräkningen samt genom följande viktiga härledningsfunktioner:

  • HASH(Z)
  • HASH(prepend || Z || tillägg)
  • HMAC(nyckel, Z)
  • HMAC(key, prepend || Z || tillägg)
  • HMAC(Z, Z)
  • HMAC(Z, prepend || Z || tillägg)
  • Tls11Prf(etikett, frö)

ECDH-nyckelkurvor definieras av OS-biblioteken och omfattas av deras begränsningar.

Elliptisk kurva Windows 10+ Windows 7 – 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (sekp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (sekp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (sekp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Brainpool-kurvor (som namngivna kurvor) ✔️ ⚠️1 ⚠️4
Andra namngivna kurvor ⚠️2 ⚠️1 ⚠️4
Explicita kurvor ✔️ ✔️ ✔️
Exportera eller importera som explicit ✔️ 3 ✔️ 3 3 ✔️

1 Linux-distributioner har inte stöd för samma namngivna kurvor.

2 Stöd för namngivna kurvor har lagts till i Windows CNG i Windows 10. Mer information finns i CNG Med namnet Elliptiska kurvor. Namngivna kurvor är inte tillgängliga i tidigare versioner av Windows, förutom tre kurvor i Windows 7.

3 Export med explicita kurvparametrar kräver stöd för OS-bibliotek, som inte är tillgängligt på Apple-plattformar eller tidigare versioner av Windows.

4 Android-stöd för vissa kurvor beror på Android-versionen. Android-distributörer kan också välja att lägga till eller ta bort kurvor från sin Android-version.

ECDH-inbyggt interop

.NET exponerar typer för att tillåta att program samverkar med de OS-bibliotek som .NET använder. De typer som berörs översätter inte mellan plattformar och bör endast användas direkt när det behövs.

Typ Windows Linux macOS iOS, tvOS, MacCatalyst Android
ECDiffieHellmanCng ✔️
ECDiffieHellmanOpenSsl ✔️ ❌*

* På macOS, före .NET 10, ECDiffieHellmanOpenSsl fungerade om OpenSSL installerades och en lämplig libcrypto dylib kunde hittas via dynamisk biblioteksinläsning. Det här stödet har tagits bort i .NET 10.

DSA

DSA-nyckelgenereringen (digital signaturalgoritm) utförs av systembiblioteken och omfattas av deras storleksbegränsningar och prestandaegenskaper.

Funktion Windows CNG Linux macOS Windows CAPI iOS, tvOS, MacCatalyst Android
Nyckelskapande (<= 1 024 bitar) ✔️ ✔️ ✔️ ✔️
Nyckelskapande (> 1 024 bitar) ✔️ ✔️ ✔️
Läser in nycklar (<= 1 024 bitar) ✔️ ✔️ ✔️ ✔️ ✔️
Läser in nycklar (> 1 024 bitar) ✔️ ✔️ ⚠️* ✔️
FIPS 186-2 ✔️ ✔️ ✔️ ✔️ ✔️
FIPS 186-3 (SHA-2-signaturer) ✔️ ✔️ ✔️

* macOS läser in DSA-nycklar som är större än 1 024 bitar, men beteendet för dessa nycklar är odefinierat. De beter sig inte enligt FIPS 186-3.

DSA i Windows

DSA-inbyggt interop

.NET exponerar typer för att tillåta att program samverkar med de OS-bibliotek som .NET-kryptografikoden använder. De typer som berörs översätter inte mellan plattformar och bör endast användas direkt när det behövs.

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

1 På icke-Windows DSACryptoServiceProvider kan användas för kompatibilitet med befintliga program. I så fall genererar alla metoder som kräver systeminterop, till exempel att öppna en namngiven nyckel, en PlatformNotSupportedException.

2 På macOS fungerade före .NET 10 DSAOpenSsl om OpenSSL installerades och en lämplig libcrypto dylib kunde hittas via dynamisk biblioteksinläsning. Det här stödet har tagits bort i .NET 10.

Post-quantum kryptografi

Post-quantum-algoritmer är tillgängliga från och med .NET 10. De är också tillgängliga för .NET Framework med hjälp av NuGet-paketet Microsoft.Bcl.Cryptography. Följande supporttabell anger plattformsstödet för de inbyggda kryptografiska komponenterna i operativsystemet, till exempel de som skapats från Generate eller ImportFromPem. Implementeringar som härleds från basklassen kan ha olika supportbeteenden.

För de inbyggda algoritmerna är en IsSupported statisk egenskap tillgänglig för att avgöra om plattformen stöder någon av parameteruppsättningarna.

De inbyggda interop-typerna för post-quantum-algoritmer stöder inte nyckelgenerering eller import. De finns specifikt för interop-scenarier med de inbyggda plattformstyperna, till exempel i EVP_PKEY OpenSSL eller CngKey i Windows.

ML-KEM

Algoritm Windows Linux Äpple Android Webbläsare
ML-KEM-512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
ML-KEM-768 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
ML-KEM-1024 Windows 11 Insiders (senaste) OpenSSL 3.5.0+

Inbyggt interoperabilitets-ML-KEM

ML-DSA

ML-DSA har en ren och prehash-variant (HashML-DSA). Följande tabell återspeglar både de rena och prehash-varianterna.

Algoritm Windows Linux Äpple Android Webbläsare
ML-DSA-44 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
ML-DSA-65 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
ML-DSA-87 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
ML-DSA-44 External mu (μ)1 OpenSSL 3.5.0+
ML-DSA-65 Extern Mu (μ)1 OpenSSL 3.5.0+
ML-DSA-87 Extern mu (μ)1 OpenSSL 3.5.0+

1 Externt Mu-stöd är endast för signering och verifiering av Mu. Beräkning av Mu stöds inte.

Native interop-ML-DSA

SLH-DSA

SLH-DSA har en enkel och prehash-variant (HashSLH-DSA). Följande tabell återspeglar både de rena och prehash-varianterna.

Algoritm Windows Linux Äpple Android Webbläsare
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+

Inbyggd interop-SLH-DSA

Sammansatt ML-DSA

Algoritm Windows Linux Äpple Android Webbläsare
MLDSA44-RSA2048-PSS-SHA256 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA44-RSA2048-PKCS15-SHA256 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA44-Ed25519-SHA512
MLDSA44-ECDSA-P256-SHA256 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA65-RSA3072-PSS-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA65-RSA3072-PKCS15-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA65-RSA4096-PSS-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA65-RSA4096-PKCS15-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA65-ECDSA-P256-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA65-ECDSA-P384-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA65-ECDSA-brainpoolP256r1-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA65-Ed25519-SHA512
MLDSA87-ECDSA-P384-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA87-ECDSA-brainpoolP384r1-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA87-Ed448-SHAKE256
MLDSA87-RSA3072-PSS-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA87-RSA4096-PSS-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+
MLDSA87-ECDSA-P521-SHA512 Windows 11 Insiders (senaste) OpenSSL 3.5.0+

Inbyggd interop komposit ML-DSA

X.509-certifikat

Merparten av stödet för X.509-certifikat i .NET kommer från OS-bibliotek. Om du vill läsa in ett certifikat till en X509Certificate2 instans i X509Certificate .NET måste certifikatet läsas in av det underliggande OS-biblioteket.

Läsa en PKCS12/PFX

Scenarium Windows Linux macOS iOS, tvOS, MacCatalyst Android
Tomt ✔️ ✔️ ✔️ ✔️ ✔️
Ett certifikat, ingen privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Ett certifikat med privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, inga privata nycklar ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, en privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, flera privata nycklar ✔️ ✔️ ✔️ ✔️ ✔️

Skriva en PKCS12/PFX

Scenarium Windows Linux macOS iOS, tvOS, MacCatalyst Android
Tomt ✔️ ✔️ ✔️ ✔️ ✔️
Ett certifikat, ingen privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Ett certifikat med privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, inga privata nycklar ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, en privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, flera privata nycklar ✔️ ✔️ ✔️ ✔️ ✔️
Tillfällig inläsning ✔️ ✔️ ✔️ ✔️

macOS kan inte läsa in privata certifikatnycklar utan ett nyckelringsobjekt, vilket kräver att du skriver till disken. Nyckelringar skapas automatiskt för PFX-inläsning och tas bort när de inte längre används. Eftersom alternativet X509KeyStorageFlags.EphemeralKeySet innebär att den privata nyckeln inte ska skrivas till disken resulterar det i en PlatformNotSupportedException.

Skriva en PKCS7-certifikatsamling

Både Windows och Linux genererar DER-kodade PKCS7-blobar. macOS genererar obegränsade CER-kodade PKCS7-blobar.

X509Store

I Windows X509Store är klassen en representation av API:erna för Windows Certificate Store. Dessa API:er fungerar på samma sätt i .NET Core och .NET 5 som i .NET Framework.

I icke-Windows X509Store är klassen en projektion av beslut om systemförtroende (skrivskyddad), beslut om användarförtroende (läs-skrivning) och lagring av användarnycklar (läs-skriv).

Följande tabeller visar vilka scenarier som stöds på varje plattform. För scenarier som inte stöds (❌ i tabellerna) genereras en CryptographicException .

Min butik

Scenarium Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna CurrentUser\My (ReadOnly) ✔️ ✔️ ✔️ ✔️ ✔️
Öppna CurrentUser\My (ReadWrite) ✔️ ✔️ ✔️ ✔️ ✔️
Öppna CurrentUser\My (ExistingOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
Öppna LocalMachine\My ✔️ ✔️ ✔️ ✔️

I Linux skapas butiker vid första skrivningen och det finns inga användarlager som standard, så det går inte att öppna CurrentUser\My med ExistingOnly .

På macOS är arkivet CurrentUser\My användarens standardnyckelring, vilket är login.keychain standard. Butiken LocalMachine\My är System.keychain.

Rotarkivet

Scenarium Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna CurrentUser\Root (ReadOnly) ✔️ ✔️ ✔️ ✔️
Öppna CurrentUser\Root (ReadWrite) ✔️ ✔️
Öppna CurrentUser\Root (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly) ✔️ (om ReadOnly)
Öppna LocalMachine\Root (ReadOnly) ✔️ ✔️ ✔️ ✔️
Öppna LocalMachine\Root (ReadWrite) ✔️
Öppna LocalMachine\Root (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly) ✔️ (om ReadOnly)

I Linux LocalMachine\Root är store en tolkning av CA-paketet i standardsökvägen för OpenSSL.

På macOS är arkivet CurrentUser\Root en tolkning av SecTrustSettings resultatet för domänen för användarförtroende. Arkivet LocalMachine\Root är en tolkning av SecTrustSettings resultaten för administratörs- och systemförtroendedomänerna.

Mellanlagringsplatsen

Scenarium Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna CurrentUser\Intermediate (ReadOnly) ✔️ ✔️ ✔️
Öppna CurrentUser\Intermediate (ReadWrite) ✔️ ✔️
Öppna CurrentUser\Intermediate (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly)
Öppna LocalMachine\Intermediate (ReadOnly) ✔️ ✔️ ✔️
Öppna LocalMachine\Intermediate (ReadWrite) ✔️
Öppna LocalMachine\Intermediate (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly)

I Linux används arkivet CurrentUser\Intermediate som en cache när mellanliggande certifikatutfärdare laddas ned av sina åtkomstposter för utfärdarinformation i lyckade X509Chain-versioner. Arkivet LocalMachine\Intermediate är en tolkning av CA-paketet i standardsökvägen för OpenSSL.

På macOS CurrentUser\Intermediate behandlas butiken som ett anpassat arkiv. Certifikat som läggs till i det här arkivet påverkar inte X.509-kedjebygget.

Det otillåtna arkivet

Scenarium Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna CurrentUser\Otillåten (ReadOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
Öppna CurrentUser\Otillåten (ReadWrite) ✔️ ⚠️
Öppna CurrentUser\Otillåten (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly) ✔️ (om ReadOnly) ✔️ (om ReadOnly)
Öppna LocalMachine\Otillåten (ReadOnly) ✔️ ✔️ ✔️ ✔️
Öppna LocalMachine\Otillåten (ReadWrite) ✔️
Öppna LocalMachine\Otillåten (ExistingOnly) ✔️ ✔️ (om ReadOnly) ✔️ (om ReadOnly) ✔️ (om ReadOnly)

I Linux används inte arkivet Disallowed i kedjebyggande, och om du försöker lägga till innehåll i det resulterar det i en CryptographicException. En CryptographicException utlöses när butiken Disallowed öppnas om den redan har hämtat innehåll.

I macOS är arkiven CurrentUser\Disallowed och LocalMachine\Disallowed tolkningar av lämpliga SecTrustSettings-resultat för certifikat vars förtroende är inställt på Always Deny.

Obefintligt arkiv

Scenarium Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna ett arkiv som inte finns (ExistingOnly)
Öppna CurrentUser-arkivet som inte finns (ReadWrite) ✔️ ✔️ ⚠️
Öppna LocalMachine non-existent store (ReadWrite) ✔️

På macOS stöds skapande av anpassade butiker med X509Store-API:et endast för CurrentUser plats. Den skapar en ny nyckelring utan lösenord i användarens nyckelringskatalog (~/Bibliotek/nyckelringar). Om du vill skapa en nyckelring med lösenord kan en P/Invoke till SecKeychainCreate användas. SecKeychainOpen På samma sätt kan användas för att öppna nyckelringar på olika platser. IntPtr Resultatet kan skickas till för new X509Store(IntPtr) att hämta ett läs-/skrivkompatibelt arkiv, med förbehåll för den aktuella användarens behörigheter.

X509-kedja

macOS stöder inte crl-användning offline, så X509RevocationMode.Offline behandlas som X509RevocationMode.Online.

macOS stöder inte en användarinitierad tidsgräns för nedladdning av CRL (listan över återkallade certifikat) /OCSP (Online Certificate Status Protocol) /AIA (Authority Information Access), så X509ChainPolicy.UrlRetrievalTimeout ignoreras.

Postkvantkryptograficertifikat och PKCS12/PFX

Stöd för post-quantum-certifikat kräver också stöd från den primitiva algoritmen.

Verksamhet Algoritm Windows Linux Äpple Android Webbläsare
PKCS#12 Importera ML-DSA ✔️ ✔️
PKCS#12-export ML-DSA ✔️ ✔️
Private Key Association ML-DSA ✔️ ✔️
 
PKCS#12 Importera ML-KEM ✔️
PKCS#12 Export ML-KEM ✔️
Private Key Association ML-KEM ✔️
 
PKCS#12 Importera SLH-DSA ✔️
PKCS#12 Export SLH-DSA ✔️
Private Key Association SLH-DSA ✔️

Ytterligare resurser