Delen via


Platformoverschrijdende cryptografie in .NET

Cryptografische bewerkingen in .NET worden uitgevoerd door besturingssysteembibliotheken .NET. Deze afhankelijkheid heeft voordelen:

  • .NET-apps profiteren van betrouwbaarheid van het besturingssysteem. Cryptografiebibliotheken veilig houden tegen beveiligingsproblemen is een hoge prioriteit voor leveranciers van besturingssystemen. Hiervoor bieden ze updates die systeembeheerders moeten toepassen.
  • .NET-apps hebben toegang tot door FIPS gevalideerde algoritmen als de besturingssysteembibliotheken FIPS-gevalideerd zijn.

De afhankelijkheid van besturingssysteembibliotheken betekent ook dat .NET-apps alleen cryptografische functies kunnen gebruiken die door het besturingssysteem worden ondersteund. Hoewel alle platforms bepaalde kernfuncties ondersteunen, kunnen sommige functies die .NET ondersteunt niet worden gebruikt op sommige platforms. In dit artikel worden de functies geïdentificeerd die op elk platform worden ondersteund.

In dit artikel wordt ervan uitgegaan dat u bekend bent met cryptografie in .NET. Zie .NET Cryptography Model en .NET Cryptographic Services voor meer informatie.

Hash- en berichtverificatiealgoritmen

Alle HMAC-klassen (hash-algoritme en hash-gebaseerde berichtverificatie), inclusief de *Managed klassen, worden uitgesteld tot de besturingssysteembibliotheken, met uitzondering van .NET on Browser WASM. In Browser WASM, SHA-1, SHA-2-256, SHA-2-384, SHA-2-512 en de HMAC-equivalenten worden geïmplementeerd met beheerde code.

Algoritme Windows Linux macOS iOS, tvOS, MacCatalyst Android Browser
MD5 ✔️ ✔️ ✔️ ✔️ ✔️
SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-2-256 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-2-384 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-2-512 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
SHA-3-2561 Windows 11 Build 25324+ OpenSSL 1.1.1+
SHA-3-3841 Windows 11 Build 25324+ OpenSSL 1.1.1+
SHA-3-5121 Windows 11 Build 25324+ OpenSSL 1.1.1+
SHAKE-1281 Windows 11 Build 25324+ OpenSSL 1.1.1+3
SHAKE-2561 Windows 11 Build 25324+ OpenSSL 1.1.1+3
HMAC-MD5 ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-2-256 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-2-384 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-2-512 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
HMAC-SHA-3-2561 Windows 11 Build 25324+ OpenSSL 1.1.1+
HMAC-SHA-3-3841 Windows 11 Build 25324+ OpenSSL 1.1.1+
HMAC-SHA-3-5121 Windows 11 Build 25324+ OpenSSL 1.1.1+
KMAC-1282 Windows 11 Build 26016+ OpenSSL 3.0+
KMAC-2562 Windows 11 Build 26016+ OpenSSL 3.0+
KMAC-XOF-1282 Windows 11 Build 26016+ OpenSSL 3.0+
KMAC-XOF-2562 Windows 11 Build 26016+ OpenSSL 3.0+

1Beschikbaar vanaf .NET 8.

2Beschikbaar vanaf .NET 9.

3XOF (Extensible Output Function) streaming is beschikbaar vanaf .NET 9. Voor Linux is hiervoor OpenSSL 3.3 vereist.

Symmetrische versleuteling

De onderliggende coderingen en ketens worden uitgevoerd door de systeembibliotheken.

Codering + modus Windows Linux macOS iOS, tvOS, MacCatalyst Android
AES-CBC ✔️ ✔️ ✔️ ✔️ ✔️
AES-ECB ✔️ ✔️ ✔️ ✔️ ✔️
AES-ONDERDRUKT8 ✔️ ✔️ ✔️ ✔️ ✔️
AES-ONDERDRUKT128 ✔️ ✔️ ✔️ ✔️ ✔️
3DES-CBC ✔️ ✔️ ✔️ ✔️ ✔️
3DES-ECB ✔️ ✔️ ✔️ ✔️ ✔️
3DES-EKENT8 ✔️ ✔️ ✔️ ✔️ ✔️
3DES-EKENT64 ✔️ ✔️ ✔️ ✔️ ✔️
DES-CBC ✔️ ✔️ ✔️ ✔️ ✔️
DES-ECB ✔️ ✔️ ✔️ ✔️ ✔️
DES-AFGEBAKEND8 ✔️ ✔️ ✔️ ✔️ ✔️
RC2-CBC ✔️ ✔️ ✔️ ✔️
RC2-ECB ✔️ ✔️ ✔️ ✔️
RC2-OPDRACHTREGEL

Geverifieerde versleuteling

Ondersteuning voor geverifieerde versleuteling (AE) wordt geboden voor AES-CCM, AES-GCM en ChaCha20Poly1305 via respectievelijk de System.Security.Cryptography.AesCcm, System.Security.Cryptography.AesGcmen System.Security.Cryptography.ChaCha20Poly1305 klassen.

Omdat geverifieerde versleuteling nieuwere platform-API's vereist om het algoritme te ondersteunen, is de ondersteuning mogelijk niet aanwezig op alle platforms. De IsSupported statische eigenschap van de klassen voor het algoritme kan worden gebruikt om tijdens runtime te detecteren als het huidige platform het algoritme ondersteunt of niet.

Codering + modus Windows Linux macOS iOS, tvOS, MacCatalyst Android Browser
AES-GCM ✔️ ✔️ ⚠️ ⚠️ ✔️
AES-CCM ✔️ ✔️ ⚠️ ✔️
ChaCha20Poly1305 Windows 10 Build 20142+ OpenSSL 1.1.0+ ⚠️ ⚠️ API-niveau 28+

AES-CCM in macOS

In macOS bieden de systeembibliotheken geen ondersteuning voor AES-CCM voor code van derden, dus de AesCcm klasse gebruikt OpenSSL voor ondersteuning. Gebruikers in macOS moeten een geschikte kopie van OpenSSL (libcrypto) verkrijgen om dit type te laten functioneren. Het moet zich in een pad bevinden waarin het systeem standaard een bibliotheek zou laden. U wordt aangeraden OpenSSL te installeren vanuit een pakketbeheerder zoals Homebrew.

De libcrypto.0.9.7.dylib en libcrypto.0.9.8.dylib bibliotheken die zijn opgenomen in macOS zijn afkomstig uit eerdere versies van OpenSSL en worden niet gebruikt. De libcrypto.35.dylib, libcrypto.41.dyliben libcrypto.42.dylib bibliotheken zijn afkomstig van LibreSSL en worden niet gebruikt.

AES-GCM en ChaCha20Poly1305 op macOS

macOS biedt geen ondersteuning voor AES-GCM of ChaCha20Poly1305 tot macOS 10.15 voor code van derden. Vóór .NET 8 AesGcm en ChaCha20Poly1305 dezelfde vereiste hebben als AES-CCM en gebruikers moeten OpenSSL installeren om deze typen te kunnen functioneren.

Vanaf .NET 8 gebruikt .NET op macOS het CryptoKit-framework van Apple voor AES-GCM en ChaCha20Poly1305. Gebruikers hoeven geen extra afhankelijkheden te installeren of te configureren voor AES-GCM of ChaCha20Poly1305 op macOS.

AES-GCM en ChaCha20Poly1305 op iOS, tvOS en MacCatalyst

Ondersteuning voor AES-GCM en ChaCha20Poly1305 is beschikbaar vanaf .NET 9 op iOS en tvOS 13.0 en hoger, en alle versies van MacCatalyst.

AES-CCM-sleutels, non-ces en tags

  • Sleutelgrootten

    AES-CCM werkt met 128, 192 en 256-bits sleutels.

  • Niet-grootten

    De AesCcm klasse ondersteunt 56, 64, 72, 80, 88, 96 en 104-bits (7, 8, 9, 10, 11, 12 en 13-bytes) nonces.

  • Taggrootten

    De AesCcm klasse ondersteunt het maken of verwerken van tags 32, 48, 64, 80, 96, 112 en 128-bits (4, 8, 10, 12, 14 en 16-byte).

AES-GCM-sleutels, non-ces en tags

  • Sleutelgrootten

    AES-GCM werkt met 128-, 192- en 256-bits sleutels.

  • Niet-grootten

    De AesGcm klasse ondersteunt alleen 96-bits (12-bytes) non-ces.

  • Taggrootten in Windows en Linux ondersteunen het AesGcm maken of verwerken van tags 96, 104, 112, 120 en 128-bits (12, 13, 14, 15 en 16-byte). Op Apple-platforms is de taggrootte beperkt tot 128-bits (16-bytes) vanwege beperkingen van het CryptoKit-framework.

ChaCha20Poly1305-sleutels, nonces en tags.

ChaCha20Poly1305 heeft een vaste grootte voor de sleutel, nonce en verificatietag. ChaCha20Poly1305 gebruikt altijd een 256-bits sleutel, een 96-bits (12-byte) nonce en 128-bits tag (16-byte).

Asymmetrische cryptografie

Deze sectie bevat de volgende subsecties:

RSA

RSA (Rivest–Shamir–Adleman) sleutelgeneratie wordt uitgevoerd door de besturingssysteembibliotheken en is onderhevig aan hun groottebeperkingen en prestatiekenmerken.

RSA-sleutelbewerkingen worden uitgevoerd door de besturingssysteembibliotheken en de typen sleutels die kunnen worden geladen, zijn onderhevig aan besturingssysteemvereisten.

.NET biedt geen 'onbewerkte' (niet-gekoppelde) RSA-bewerkingen.

Ondersteuning voor opvulling en digest variëren per platform:

Opvullingsmodus Windows (CNG) Linux (OpenSSL) macOS iOS, tvOS, MacCatalyst Android Windows (CAPI)
PKCS1-versleuteling ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-2 ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-32 Windows 11 Build 25324+ OpenSSL 1.1.1+
PKCS1 Signature (MD5, SHA-1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
PKCS1 Signature (SHA-2) ✔️ ✔️ ✔️ ✔️ ✔️ ⚠ϑ1
PKCS1 Signature (SHA-3)2 Windows 11 Build 25324+ OpenSSL 1.1.1+
PSS ✔️ ✔️ ✔️ ✔️ ✔️

1 Windows CryptoAPI (CAPI) is geschikt voor PKCS1-handtekening met een SHA-2-algoritme. Maar het afzonderlijke RSA-object kan worden geladen in een cryptografische serviceprovider (CSP) die het niet ondersteunt.

2 Vereist .NET 8.

RSA in Windows

  • Windows CryptoAPI (CAPI) wordt gebruikt wanneer new RSACryptoServiceProvider() deze wordt gebruikt.
  • Windows Cryptography API Next Generation (CNG) wordt gebruikt wanneer new RSACng() deze wordt gebruikt.
  • Het object dat wordt geretourneerd door RSA.Create , wordt intern mogelijk gemaakt door Windows CNG. Dit gebruik van Windows CNG is een implementatiedetails en kan worden gewijzigd.
  • De GetRSAPublicKey extensiemethode voor X509Certificate2 het retourneren van een RSACng exemplaar. Dit gebruik van RSACng is een implementatiedetail en kan worden gewijzigd.
  • De GetRSAPrivateKey extensiemethode voor X509Certificate2 momenteel de voorkeur geeft aan een RSACng exemplaar, maar als RSACng de sleutel niet kan worden geopend, RSACryptoServiceProvider wordt geprobeerd. De voorkeursprovider is een implementatiedetails en kan worden gewijzigd.

Systeemeigen RSA-interop

.NET biedt typen waarmee programma's kunnen samenwerken met de besturingssysteembibliotheken die door de .NET-cryptografiecode worden gebruikt. De betrokken typen vertalen niet tussen platforms en mogen alleen direct worden gebruikt wanneer dat nodig is.

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

1 Op niet-Windows RSACryptoServiceProvider kan worden gebruikt voor compatibiliteit met bestaande programma's. In dat geval genereert elke methode waarvoor interop van het besturingssysteem is vereist, zoals het openen van een benoemde sleutel, een PlatformNotSupportedException.

2 Op macOS RSAOpenSsl werkt als OpenSSL is geïnstalleerd en een geschikte libcrypto dylib kan worden gevonden via dynamisch laden van bibliotheken. Als een geschikte bibliotheek niet kan worden gevonden, worden uitzonderingen gegenereerd.

ECDSA

Het genereren van sleutels van ECDSA (Elliptic Curve Digital Signature Algorithm) wordt uitgevoerd door de besturingssysteembibliotheken en is onderhevig aan hun groottebeperkingen en prestatiekenmerken.

ECDSA-sleutelcurven worden gedefinieerd door de besturingssysteembibliotheken en zijn onderhevig aan hun beperkingen.

Elliptische curve Windows 10 Windows 7 - 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (secp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (secp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (secp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Brainpool-curven (zoals benoemde curven) ✔️ ⚠ϑ1 ⚠ϑ4
Andere benoemde curven ⚠ϑ2 ⚠ϑ1 ⚠ϑ4
Expliciete curven ✔️ ✔️ ✔️
Exporteren of importeren als expliciet ✔️ 3 ✔️ 3 3 ✔️

1 Linux-distributies hebben niet allemaal ondersteuning voor dezelfde benoemde curven.

2 Ondersteuning voor benoemde curven is toegevoegd aan Windows CNG in Windows 10. Zie CNG Benoemde elliptische curven voor meer informatie. Benoemde curven zijn niet beschikbaar in eerdere versies van Windows, met uitzondering van drie curven in Windows 7.

3 Exporteren met expliciete curveparameters vereist ondersteuning voor de besturingssysteembibliotheek, die niet beschikbaar is op Apple-platforms of eerdere versies van Windows.

4 Android-ondersteuning voor sommige curven is afhankelijk van de Android-versie. Android-distributeurs kunnen er ook voor kiezen om curven toe te voegen aan of te verwijderen uit hun Android-build.

ECDSA Native Interop

.NET biedt typen waarmee programma's kunnen samenwerken met de besturingssysteembibliotheken die door de .NET-cryptografiecode worden gebruikt. De betrokken typen vertalen zich niet tussen platforms en mogen alleen direct worden gebruikt wanneer dat nodig is.

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

* Werkt in macOS ECDsaOpenSsl als OpenSSL is geïnstalleerd in het systeem en een geschikte libcrypto dylib kan worden gevonden via dynamisch laden van bibliotheken. Als een geschikte bibliotheek niet kan worden gevonden, worden uitzonderingen gegenereerd.

ECDH

Ecdh (Elliptic Curve Diffie-Hellman) sleutelgeneratie wordt uitgevoerd door de besturingssysteembibliotheken en is onderhevig aan hun groottebeperkingen en prestatiekenmerken.

De ECDiffieHellman klasse ondersteunt de 'onbewerkte' waarde van de ECDH-berekening en via de volgende belangrijke afleidingsfuncties:

  • HASH(Z)
  • HASH(vooraf || Z || toevoegen)
  • HMAC(sleutel; Z)
  • HMAC(sleutel, prepend || Z || toevoegen)
  • HMAC(Z, Z)
  • HMAC(Z, vooraf || Z || toevoegen)
  • Tls11Prf(label, seed)

"Raw" sleutel derivatie is geïntroduceerd in .NET 8.

ECDH-sleutelcurven worden gedefinieerd door de besturingssysteembibliotheken en zijn onderhevig aan hun beperkingen.

Elliptische curve Windows 10 Windows 7 - 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (secp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (secp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (secp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Brainpool-curven (zoals benoemde curven) ✔️ ⚠ϑ1 ⚠ϑ4
Andere benoemde curven ⚠ϑ2 ⚠ϑ1 ⚠ϑ4
Expliciete curven ✔️ ✔️ ✔️
Exporteren of importeren als expliciet ✔️ 3 ✔️ 3 3 ✔️

1 Linux-distributies hebben niet allemaal ondersteuning voor dezelfde benoemde curven.

2 Ondersteuning voor benoemde curven is toegevoegd aan Windows CNG in Windows 10. Zie CNG Benoemde elliptische curven voor meer informatie. Benoemde curven zijn niet beschikbaar in eerdere versies van Windows, met uitzondering van drie curven in Windows 7.

3 Exporteren met expliciete curveparameters vereist ondersteuning voor de besturingssysteembibliotheek, die niet beschikbaar is op Apple-platforms of eerdere versies van Windows.

4 Android-ondersteuning voor sommige curven is afhankelijk van de Android-versie. Android-distributeurs kunnen er ook voor kiezen om curven toe te voegen aan of te verwijderen uit hun Android-build.

Systeemeigen ECDH-interop

.NET biedt typen waarmee programma's kunnen samenwerken met de besturingssysteembibliotheken die .NET gebruikt. De betrokken typen vertalen zich niet tussen platforms en mogen alleen direct worden gebruikt wanneer dat nodig is.

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

* Op macOS ECDiffieHellmanOpenSsl werkt als OpenSSL is geïnstalleerd en een geschikte libcrypto dylib kan worden gevonden via dynamisch laden van bibliotheken. Als een geschikte bibliotheek niet kan worden gevonden, worden uitzonderingen gegenereerd.

DSA

Het genereren van DSA-sleutels (Digital Signature Algorithm) wordt uitgevoerd door de systeembibliotheken en is onderhevig aan hun groottebeperkingen en prestatiekenmerken.

Functie Windows CNG Linux macOS Windows CAPI iOS, tvOS, MacCatalyst Android
Sleutel maken (<= 1024 bits) ✔️ ✔️ ✔️ ✔️
Sleutel maken (> 1024 bits) ✔️ ✔️ ✔️
Sleutels laden (<= 1024 bits) ✔️ ✔️ ✔️ ✔️ ✔️
Sleutels laden (> 1024 bits) ✔️ ✔️ ⚠️* ✔️
FIPS 186-2 ✔️ ✔️ ✔️ ✔️ ✔️
FIPS 186-3 (SHA-2-handtekeningen) ✔️ ✔️ ✔️

* macOS laadt DSA-sleutels die groter zijn dan 1024 bits, maar het gedrag van deze sleutels is niet gedefinieerd. Ze gedragen zich niet volgens FIPS 186-3.

DSA in Windows

Systeemeigen DSA-interop

.NET biedt typen waarmee programma's kunnen samenwerken met de besturingssysteembibliotheken die door de .NET-cryptografiecode worden gebruikt. De betrokken typen vertalen zich niet tussen platforms en mogen alleen direct worden gebruikt wanneer dat nodig is.

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

1 Op niet-Windows DSACryptoServiceProvider kan worden gebruikt voor compatibiliteit met bestaande programma's. In dat geval genereert elke methode die systeeminteroperabiliteit vereist, zoals het openen van een benoemde sleutel, een PlatformNotSupportedException.

2 Op macOS DSAOpenSsl werkt als OpenSSL is geïnstalleerd en een geschikte libcrypto dylib kan worden gevonden via dynamisch laden van bibliotheken. Als een geschikte bibliotheek niet kan worden gevonden, worden uitzonderingen gegenereerd.

X.509-certificaten

De meeste ondersteuning voor X.509-certificaten in .NET is afkomstig van besturingssysteembibliotheken. Als u een certificaat wilt laden in een X509Certificate2 of X509Certificate exemplaar in .NET, moet het certificaat worden geladen door de onderliggende besturingssysteembibliotheek.

Een PKCS12/PFX lezen

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Leeg ✔️ ✔️ ✔️ ✔️ ✔️
Eén certificaat, geen persoonlijke sleutel ✔️ ✔️ ✔️ ✔️ ✔️
Eén certificaat, met persoonlijke sleutel ✔️ ✔️ ✔️ ✔️ ✔️
Meerdere certificaten, geen persoonlijke sleutels ✔️ ✔️ ✔️ ✔️ ✔️
Meerdere certificaten, één persoonlijke sleutel ✔️ ✔️ ✔️ ✔️ ✔️
Meerdere certificaten, meerdere persoonlijke sleutels ✔️ ✔️ ✔️ ✔️ ✔️

Een PKCS12/PFX schrijven

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Leeg ✔️ ✔️ ✔️ ✔️ ✔️
Eén certificaat, geen persoonlijke sleutel ✔️ ✔️ ✔️ ✔️ ✔️
Eén certificaat, met persoonlijke sleutel ✔️ ✔️ ✔️ ✔️ ✔️
Meerdere certificaten, geen persoonlijke sleutels ✔️ ✔️ ✔️ ✔️ ✔️
Meerdere certificaten, één persoonlijke sleutel ✔️ ✔️ ✔️ ✔️ ✔️
Meerdere certificaten, meerdere persoonlijke sleutels ✔️ ✔️ ✔️ ✔️ ✔️
Kortstondige laadtijd ✔️ ✔️ ✔️ ✔️

macOS kan persoonlijke certificaatsleutels niet laden zonder een sleutelhangerobject. Hiervoor moet naar de schijf worden geschreven. Sleutelhangers worden automatisch gemaakt voor het laden van PFX en worden verwijderd wanneer ze niet meer worden gebruikt. Omdat de X509KeyStorageFlags.EphemeralKeySet optie betekent dat de persoonlijke sleutel niet naar de schijf moet worden geschreven, resulteert het bevestigen van die vlag in macOS in een PlatformNotSupportedException.

Een PKCS7-certificaatverzameling schrijven

Windows en Linux verzenden beide DOOR DER gecodeerde PKCS7-blobs. macOS verzendt onbepaalde lengte-CER-gecodeerde PKCS7-blobs.

X509Store

In Windows is de X509Store klasse een weergave van de Windows Certificate Store-API's. Deze API's werken hetzelfde in .NET Core en .NET 5 als in .NET Framework.

In niet-Windows is de X509Store klasse een projectie van systeemvertrouwensbeslissingen (alleen-lezen), beslissingen over gebruikersvertrouwen (lezen/schrijven) en opslag van gebruikerssleutels (lezen/schrijven).

In de volgende tabellen ziet u welke scenario's in elk platform worden ondersteund. Voor niet-ondersteunde scenario's (❌ in de tabellen) wordt er een CryptographicException gegenereerd.

De Mijn winkel

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
CurrentUser\My openen (Alleen-lezen) ✔️ ✔️ ✔️ ✔️ ✔️
CurrentUser\My (ReadWrite) openen ✔️ ✔️ ✔️ ✔️ ✔️
CurrentUser\My openen (ExistingOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
Open LocalMachine\My ✔️ ✔️ ✔️ ✔️

In Linux worden winkels gemaakt bij eerste schrijfbewerking en er bestaan standaard geen gebruikersarchieven, dus openen CurrentUser\My met ExistingOnly kan mislukken.

In macOS is het CurrentUser\My archief de standaardsleutelhanger van de gebruiker. Dit is login.keychain standaard. De LocalMachine\My winkel is System.keychain.

Het hoofdarchief

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
CurrentUser\Root openen (Alleen-lezen) ✔️ ✔️ ✔️ ✔️
CurrentUser\Root openen (ReadWrite) ✔️ ✔️
CurrentUser\Root openen (ExistingOnly) ✔️ ⚠️ ✔️ (als ReadOnly) ✔️ (als ReadOnly)
Open LocalMachine\Root (ReadOnly) ✔️ ✔️ ✔️ ✔️
Open LocalMachine\Root (ReadWrite) ✔️
Open LocalMachine\Root (ExistingOnly) ✔️ ⚠️ ✔️ (als ReadOnly) ✔️ (als ReadOnly)

In Linux is de LocalMachine\Root store een interpretatie van de CA-bundel in het standaardpad voor OpenSSL.

In macOS is het CurrentUser\Root archief een interpretatie van de SecTrustSettings resultaten voor het domein van de gebruikersvertrouwensrelatie. Het LocalMachine\Root archief is een interpretatie van de resultaten voor de SecTrustSettings beheer- en systeemvertrouwensdomeinen.

Het tussenliggende archief

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
CurrentUser\Intermediate openen (Alleen-lezen) ✔️ ✔️ ✔️
CurrentUser\Intermediate (ReadWrite) openen ✔️ ✔️
CurrentUser\Intermediate openen (ExistingOnly) ✔️ ⚠️ ✔️ (als ReadOnly)
Open LocalMachine\Intermediate (ReadOnly) ✔️ ✔️ ✔️
Open LocalMachine\Intermediate (ReadWrite) ✔️
Open LocalMachine\Intermediate (ExistingOnly) ✔️ ⚠️ ✔️ (als ReadOnly)

In Linux wordt de store gebruikt als een cache bij het CurrentUser\Intermediate downloaden van tussenliggende CA's door hun Authority Information Access-records op succesvolle X509Chain-builds. Het LocalMachine\Intermediate archief is een interpretatie van de CA-bundel in het standaardpad voor OpenSSL.

In macOS wordt de CurrentUser\Intermediate store behandeld als een aangepast archief. Certificaten die aan dit archief zijn toegevoegd, hebben geen invloed op het bouwen van X.509-ketens.

De niet-toegestane winkel

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
CurrentUser\Niet toegestaan (ReadOnly) openen ✔️ ⚠️ ✔️ ✔️ ✔️
CurrentUser\Niet toegestaan (ReadWrite) openen ✔️ ⚠️
CurrentUser\Niet toegestaan openen (ExistingOnly) ✔️ ⚠️ ✔️ (als ReadOnly) ✔️ (als ReadOnly) ✔️ (als ReadOnly)
Open LocalMachine\Niet toegestaan (ReadOnly) ✔️ ✔️ ✔️ ✔️
Open LocalMachine\Niet toegestaan (ReadWrite) ✔️
Open LocalMachine\Niet toegestaan (ExistingOnly) ✔️ ✔️ (als ReadOnly) ✔️ (als ReadOnly) ✔️ (als ReadOnly)

In Linux wordt de Disallowed winkel niet gebruikt in het ketengebouw en wordt geprobeerd inhoud eraan toe te voegen, wat resulteert in een CryptographicException. Er wordt een CryptographicException gegenereerd bij het openen van de Disallowed winkel als deze al inhoud heeft verkregen.

In macOS zijn de CurrentUser\Disallowed en LocalMachine\Disallowed stores interpretaties van de juiste SecTrustSettings-resultaten voor certificaten waarvan de vertrouwensrelatie is ingesteld op Always Deny.

Niet-bestaande winkel

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Niet-bestaand archief openen (ExistingOnly)
CurrentUser niet-bestaand archief openen (ReadWrite) ✔️ ✔️ ⚠️
Open LocalMachine non-existent store (ReadWrite) ✔️

In macOS wordt het maken van aangepaste winkels met de X509Store-API alleen ondersteund voor CurrentUser locatie. Er wordt een nieuwe sleutelhanger gemaakt zonder wachtwoord in de map van de sleutelhanger van de gebruiker (~/Library/Keychains). Als u een sleutelhanger met een wachtwoord wilt maken, kan een P/Invoke-sleutel SecKeychainCreate worden gebruikt. Op dezelfde manier SecKeychainOpen kan worden gebruikt om sleutelhangers op verschillende locaties te openen. Het resulterende IntPtr bestand kan worden doorgegeven om new X509Store(IntPtr) een opslag met lees-/schrijffunctionaliteit te verkrijgen, afhankelijk van de machtigingen van de huidige gebruiker.

X509Chain

macOS biedt geen ondersteuning voor offline CRL-gebruik, dus X509RevocationMode.Offline wordt behandeld als X509RevocationMode.Online.

macOS biedt geen ondersteuning voor een door de gebruiker geïnitieerde time-out op CRL (certificaatintrekkingslijst) / OCSP (Online Certificate Status Protocol) / AIA (Authority Information Access) die wordt gedownload, dus X509ChainPolicy.UrlRetrievalTimeout wordt genegeerd.

Aanvullende bronnen