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.dylib
en 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
- Windows CryptoAPI (CAPI) wordt gebruikt wanneer
new DSACryptoServiceProvider()
deze wordt gebruikt. - Windows Cryptography API Next Generation (CNG) wordt gebruikt wanneer
new DSACng()
deze wordt gebruikt. - Het object dat wordt geretourneerd door DSA.Create , wordt intern mogelijk gemaakt door Windows CNG. Dit gebruik van Windows CNG is een implementatiedetails en kan worden gewijzigd.
- De GetDSAPublicKey extensiemethode voor X509Certificate2 het retourneren van een DSACng exemplaar. Dit gebruik van DSACng is een implementatiedetail en kan worden gewijzigd.
- De GetDSAPrivateKey extensiemethode voor X509Certificate2 een DSACng instantie, maar als DSACng de sleutel niet kan worden geopend, DSACryptoServiceProvider wordt geprobeerd. De voorkeursprovider is een implementatiedetails en kan worden gewijzigd.
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.