Kriptografi Lintas Platform di .NET
Operasi kriptografi di .NET dilakukan oleh pustaka sistem operasi (OS). Dependensi ini memiliki keuntungan:
- Aplikasi .NET mendapat manfaat dari keandalan OS. Menjaga pustaka kriptografi tetap aman dari kerentanan adalah prioritas tinggi bagi vendor OS. Untuk melakukannya, mereka menyediakan pembaruan yang harus diterapkan administrator sistem.
- Aplikasi .NET memiliki akses ke algoritma yang divalidasi FIPS jika pustaka OS divalidasi FIPS.
Dependensi pada pustaka OS juga berarti bahwa aplikasi .NET hanya dapat menggunakan fitur kriptografi yang didukung OS. Meskipun semua platform mendukung fitur inti tertentu, beberapa fitur yang didukung .NET tidak dapat digunakan pada beberapa platform. Artikel ini mengidentifikasi fitur yang didukung di setiap platform.
Artikel ini mengasumsikan Anda suka terbiasa bekerja dengan kriptografi di .NET. Untuk informasi lebih lanjut, lihat Model Kriptografi .NET dan Layanan Kriptografi .NET.
Algoritma hash
Semua algoritma hash dan kelas autentikasi pesan berbasis hash (HMAC), termasuk *Managed
kelas, tangguhkan ke pustaka OS dengan pengecualian .NET pada WASM Browser. Di Browser WASM, SHA-1, SHA-2-256, SHA-2-384, SHA-2-512, diimplementasikan menggunakan kode terkelola.
SHA-3
.NET 8 memperkenalkan dukungan untuk algoritma hash SHA-3, termasuk SHAKE-128 dan SHAKE-256. Dukungan SHA-3 saat ini didukung pada Windows 11 build 25324 atau yang lebih baru, dan Linux dengan OpenSSL 1.1.1 atau yang lebih baru.
Enkripsi simetris
Sandi dan rantai yang mendasarinya dilakukan oleh pustaka sistem.
Cipher + Mode | 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 | ❌ | ❌ | ❌ | ❌ | ❌ |
Enkripsi terautentikasi
Dukungan enkripsi terautentikasi (AE) disediakan untuk AES-CCM, AES-GCM, dan ChaCha20Poly1305 melalui System.Security.Cryptography.AesCcmkelas , , System.Security.Cryptography.AesGcmdan System.Security.Cryptography.ChaCha20Poly1305 , masing-masing.
Karena enkripsi terautentikasi memerlukan API platform yang lebih baru untuk mendukung algoritma, dukungan mungkin tidak ada di semua platform. Properti IsSupported
statis pada kelas untuk algoritma dapat digunakan untuk mendeteksi pada runtime jika platform saat ini mendukung algoritma atau tidak.
Cipher + Mode | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android | Browser |
---|---|---|---|---|---|---|
AES-GCM | ✔️ | ✔️ | ⚠️ | ❌ | ✔️ | ❌ |
AES-CCM | ✔️ | ✔️ | ⚠️ | ❌ | ✔️ | ❌ |
ChaCha20Poly1305 | Windows 10 Build 20142+ | OpenSSL 1.1.0+ | ⚠️ | ❌ | API Level 28+ | ❌ |
AES-CCM di macOS
Di macOS, pustaka sistem tidak mendukung AES-CCM untuk kode pihak ketiga, sehingga AesCcm kelas menggunakan OpenSSL untuk dukungan. Pengguna di macOS perlu mendapatkan salinan OpenSSL (libcrypto) yang sesuai agar jenis ini berfungsi, dan harus berada di jalur tempat sistem akan memuat pustaka secara default. Sebaiknya instal OpenSSL dari manajer paket seperti Homebrew.
Pustaka libcrypto.0.9.7.dylib
dan libcrypto.0.9.8.dylib
yang disertakan dalam macOS berasal dari versi OpenSSL yang lebih lama dan tidak akan digunakan. Pustaka libcrypto.35.dylib
, libcrypto.41.dylib
, dan libcrypto.42.dylib
berasal dari LibreSSL dan tidak akan digunakan.
AES-GCM dan ChaCha20Poly1305 di macOS
macOS tidak mendukung AES-GCM atau ChaCha20Poly1305 hingga macOS 10.15 untuk kode pihak ketiga. Sebelum .NET 8, AesGcm dan ChaCha20Poly1305 memiliki persyaratan yang sama dengan AES-CCM dan pengguna harus menginstal OpenSSL agar jenis ini berfungsi.
Mulai dari .NET 8, .NET di macOS akan menggunakan kerangka kerja KriptoKit Apple untuk AES-GCM dan ChaCha20Poly1305. Pengguna tidak perlu menginstal atau mengonfigurasi dependensi tambahan untuk AES-GCM atau ChaCha20Poly1305 di macOS.
Kunci, nonce, dan tag AES-CCM
Ukuran Kunci
AES-CCM berfungsi dengan kunci 128, 192, dan 256-bit.
Ukuran Nonce
Kelas AesCcm mendukung nonce 56, 64, 72, 80, 88, 96, dan 104-bit (7, 8, 9, 10, 11, 12, dan 13 byte).
Ukuran Tag
Kelas AesCcm mendukung pembuatan atau pemrosesan tag 32, 48, 64, 80, 96, 112, dan 128-bit (4, 8, 10, 12, 14, dan 16-byte).
Kunci, nonce, dan tag AES-GCM
Ukuran Kunci
AES-GCM berfungsi dengan kunci 128, 192, dan 256-bit.
Ukuran Nonce
Kelas AesGcm hanya mendukung nonces 96-bit (12-byte).
Ukuran Tag Di Windows dan Linux, AesGcm kelas mendukung pembuatan atau pemrosesan tag 96, 104, 112, 120, dan 128-bit (12, 13, 14, 15, dan 16-byte). Pada macOS, ukuran tag dibatasi hingga 128-bit (16-byte) karena keterbatasan kerangka kerja CryptoKit.
Kunci, nonce, dan tag ChaCha20Poly1305.
ChaCha20Poly1305 memiliki ukuran tetap untuk tag kunci, nonce, dan autentikasi. ChaCha20Poly1305 selalu menggunakan kunci 256-bit, nonce 96-bit (12-byte), dan tag 128-bit (16-byte).
Kriptografi asimetris
Bagian ini mencakup subbagian berikut:
RSA
Pembuatan kunci RSA (Rivest–Shamir–Adleman) dilakukan oleh pustaka OS dan tunduk pada batasan ukuran serta karakteristik performanya.
Operasi kunci RSA dilakukan oleh pustaka OS, dan jenis kunci yang dapat dimuat tunduk pada persyaratan OS.
.NET tidak mengekspos operasi RSA "mentah" (tidak diisi).
Dukungan Padding dan hash bervariasi menurut platform:
Mode Pengisi | Windows (CNG) | Linux (OpenSSL) | macOS | iOS, tvOS, MacCatalyst | Android | Windows (CAPI) |
---|---|---|---|---|---|---|
Enkripsi PKCS1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
OAEP - SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
OAEP - SHA-2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
OAEP - SHA-32 | Windows 11 Build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
Tanda Tangan PKCS1 (MD5, SHA-1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Tanda Tangan PKCS1 (SHA-2) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ⚠️1 |
Tanda Tangan PKCS1 (SHA-3)2 | Windows 11 Build 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
PSS | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
1 Windows CryptoAPI (CAPI) mampu melakukan tanda tangan PKCS1 dengan algoritma SHA-2. Namun, objek RSA individual dapat dimuat dalam penyedia layanan kriptografi (Penyedia Solusi Cloud) yang tidak mendukungnya.
2 Memerlukan .NET 8.
RSA di Windows
- Windows CryptoAPI (CAPI) digunakan kapan pun
new RSACryptoServiceProvider()
digunakan. - Windows Cryptography API Next Generation (CNG) digunakan kapan pun
new RSACng()
digunakan. - Objek yang dikembalikan oleh RSA.Create didukung secara internal oleh Windows CNG. Penggunaan CNG Windows ini adalah detail implementasi dan dapat berubah.
- Metode ekstensi GetRSAPublicKey untuk X509Certificate2 mengembalikan instans RSACng. Penggunaan RSACng ini merupakan detail implementasi dan dapat berubah.
- Metode ekstensi GetRSAPrivateKey untuk X509Certificate2 saat ini lebih menyukai instans RSACng, tetapi jika RSACng tidak dapat membuka kunci, RSACryptoServiceProvider akan dicoba. Penyedia pilihan adalah detail implementasi dan dapat berubah.
Interop asli RSA
.NET mengekspos jenis untuk memungkinkan program beroperasi dengan pustaka OS yang digunakan kode kriptografi .NET. Jenis yang terlibat tidak diterjemahkan di antara platform, dan hanya boleh digunakan secara langsung jika perlu.
Jenis | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
RSACryptoServiceProvider | ✔️ | ⚠️1 | ⚠️1 | ⚠️1 | ⚠️1 |
RSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
RSAOpenSsl | ❌ | ✔️ | ⚠️2 | ❌ | ❌ |
1 Pada non-Windows, RSACryptoServiceProvider dapat digunakan untuk kompatibilitas dengan program yang ada. Dalam hal ini, metode apa pun yang memerlukan interop OS, seperti membuka kunci bernama, melemparkan PlatformNotSupportedException.
2 Di macOS, RSAOpenSsl berfungsi jika OpenSSL diinstal dan dylib libcrypto yang sesuai dapat ditemukan melalui pemuatan pustaka dinamis. Jika pustaka yang sesuai tidak dapat ditemukan, pengecualian akan dilemparkan.
ECDSA
Pembuatan kunci ECDSA (Elliptic Curve Digital Signature Algorithm) dilakukan oleh pustaka OS dan tunduk pada batasan ukuran serta karakteristik performanya.
Kurva kunci ECDSA ditentukan oleh pustaka OS dan tunduk pada batasannya.
Kurva Elips | Windows 10 | Windows 7 - 8.1 | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|---|
NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
NIST P-521 (secp521r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Kurva brainpool (seperti kurva bernama) | ✔️ | ❌ | ⚠️1 | ❌ | ❌ | ⚠️ 4 |
Kurva bernama lainnya | ⚠️2 | ❌ | ⚠️1 | ❌ | ❌ | ⚠️ 4 |
Kurva eksplisit | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
Ekspor atau impor sebagai eksplisit | ✔️ | ❌3 | ✔️ | ❌3 | ❌3 | ✔️ |
1 Distribusi Linux tidak semuanya memiliki dukungan untuk kurva bernama yang sama.
2 Dukungan untuk kurva bernama ditambahkan ke Windows CNG di Windows 10. Untuk informasi lebih lanjut, lihat CNG Bernama Kurva Elips. Kurva bernama tidak tersedia di versi Windows sebelumnya, kecuali untuk tiga kurva di Windows 7.
3 Mengekspor dengan parameter kurva eksplisit memerlukan dukungan pustaka OS, yang tidak tersedia di platform Apple atau versi Windows yang lebih lama.
4 Dukungan Android untuk beberapa kurva tergantung pada versi Android. Distributor Android juga dapat memilih untuk menambahkan atau menghapus kurva dari build Android mereka.
Interop Asli RSA
.NET mengekspos jenis untuk memungkinkan program beroperasi dengan pustaka OS yang digunakan kode kriptografi .NET. Jenis yang terlibat tidak diterjemahkan di antara platform, dan hanya boleh digunakan secara langsung jika perlu.
Jenis | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
ECDsaCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
ECDsaOpenSsl | ❌ | ✔️ | ⚠️* | ❌ | ❌ |
* Di macOS, ECDsaOpenSsl berfungsi jika OpenSSL diinstal di sistem dan libcrypto dylib yang sesuai dapat ditemukan melalui pemuatan pustaka dinamis. Jika pustaka yang sesuai tidak dapat ditemukan, pengecualian akan dilemparkan.
ECDH
Pembuatan kunci ECDH (Elliptic Curve Diffie-Hellman) dilakukan oleh pustaka OS dan tunduk pada batasan ukuran serta karakteristik performanya.
Kelas ini ECDiffieHellman mendukung nilai "mentah" dari komputasi ECDH serta melalui fungsi derivasi utama berikut:
- HASH(Z)
- HASH(prepend || Z || append)
- HMAC(key, Z)
- HMAC(key, prepend || Z || append)
- HMAC(Z, Z)
- HMAC(Z, prepend || Z || append)
- Tls11Prf(label, seed)
Turunan kunci "Mentah" diperkenalkan di .NET 8.
Kurva kunci ECDSA ditentukan oleh pustaka OS dan tunduk pada batasannya.
Kurva Elips | Windows 10 | Windows 7 - 8.1 | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|---|
NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
NIST P-521 (secp521r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Kurva brainpool (seperti kurva bernama) | ✔️ | ❌ | ⚠️1 | ❌ | ❌ | ⚠️ 4 |
Kurva bernama lainnya | ⚠️2 | ❌ | ⚠️1 | ❌ | ❌ | ⚠️ 4 |
Kurva eksplisit | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
Ekspor atau impor sebagai eksplisit | ✔️ | ❌3 | ✔️ | ❌3 | ❌3 | ✔️ |
1 Distribusi Linux tidak semuanya memiliki dukungan untuk kurva bernama yang sama.
2 Dukungan untuk kurva bernama ditambahkan ke Windows CNG di Windows 10. Untuk informasi lebih lanjut, lihat CNG Bernama Kurva Elips. Kurva bernama tidak tersedia di versi Windows sebelumnya, kecuali untuk tiga kurva di Windows 7.
3 Mengekspor dengan parameter kurva eksplisit memerlukan dukungan pustaka OS, yang tidak tersedia di platform Apple atau versi Windows yang lebih lama.
4 Dukungan Android untuk beberapa kurva tergantung pada versi Android. Distributor Android juga dapat memilih untuk menambahkan atau menghapus kurva dari build Android mereka.
interop asli RSA
.NET memperlihatkan jenis untuk memungkinkan program beroperasi dengan pustaka OS yang menggunakan .NET. Jenis yang terlibat tidak diterjemahkan di antara platform, dan hanya boleh digunakan secara langsung jika perlu.
Jenis | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
ECDiffieHellmanCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
ECDiffieHellmanOpenSsl | ❌ | ✔️ | ⚠️* | ❌ | ❌ |
* Di macOS, ECDiffieHellmanOpenSsl berfungsi jika OpenSSL diinstal dan libcrypto dylib yang sesuai dapat ditemukan melalui pemuatan pustaka dinamis. Jika pustaka yang sesuai tidak dapat ditemukan, pengecualian akan dilemparkan.
DSA
Pembuatan kunci DSA (Algoritma Tanda Tangan Digital) dilakukan oleh pustaka sistem dan tunduk pada batasan ukuran serta karakteristik performanya.
Fungsi | Windows CNG | Linux | macOS | Windows CAPI | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|---|
Pembuatan kunci (<= 1024 bits) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ✔️ |
Pembuatan kunci (> 1024 bits) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
Memuat kunci (<= 1024 bit) | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
Memuat kunci (> 1024 bits) | ✔️ | ✔️ | ⚠️* | ❌ | ❌ | ✔️ |
FIPS 186-2 | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
FIPS 186-3 (tanda tangan SHA-2) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
* macOS memuat kunci DSA lebih besar dari 1024 bit, tetapi perilaku kunci tersebut tidak terdefinisi. Kunci tersebut tidak berperilaku sesuai FIPS 186-3.
DSA di Windows
- Windows CryptoAPI (CAPI) digunakan kapan pun
new DSACryptoServiceProvider()
digunakan. - Windows Cryptography API Next Generation (CNG) digunakan kapan pun
new DSACng()
digunakan. - Objek yang dikembalikan oleh DSA.Create didukung secara internal oleh Windows CNG. Penggunaan CNG Windows ini adalah detail implementasi dan dapat berubah.
- Metode ekstensi GetDSAPublicKey untuk X509Certificate2 mengembalikan instans DSACng. Penggunaan DSACng ini merupakan detail implementasi dan dapat berubah.
- Metode ekstensi GetDSAPrivateKey untuk X509Certificate2 lebih menyukai instans DSACng, tetapi jika DSACng tidak dapat membuka kunci, DSACryptoServiceProvider akan dicoba. Penyedia pilihan adalah detail implementasi dan dapat berubah.
Interop asli DSA
.NET mengekspos jenis untuk memungkinkan program beroperasi dengan pustaka OS yang digunakan kode kriptografi .NET. Jenis yang terlibat tidak diterjemahkan di antara platform, dan hanya boleh digunakan secara langsung jika perlu.
Jenis | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
DSACryptoServiceProvider | ✔️ | ⚠️1 | ⚠️1 | ❌ | ⚠️1 |
DSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
DSAOpenSsl | ❌ | ✔️ | ⚠️2 | ❌ | ❌ |
1 Pada non-Windows, DSACryptoServiceProvider dapat digunakan untuk kompatibilitas dengan program yang ada. Dalam hal ini, metode apa pun yang memerlukan interop sistem, seperti membuka kunci bernama, melemparkan PlatformNotSupportedException.
2 Di macOS, DSAOpenSsl berfungsi jika OpenSSL diinstal dan dylib libcrypto yang sesuai dapat ditemukan melalui pemuatan pustaka dinamis. Jika pustaka yang sesuai tidak dapat ditemukan, pengecualian akan dilemparkan.
Sertifikat X.509
Sebagian besar dukungan untuk sertifikat X.509 di .NET berasal dari pustaka OS. Untuk memuat sertifikat ke dalam instans X509Certificate2 atau X509Certificate di .NET, sertifikat harus dimuat oleh pustaka OS yang mendasarinya.
Membaca PKCS12/PFX
Skenario | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Kosong | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Satu sertifikat, tidak ada kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Satu sertifikat, dengan kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Beberapa sertifikat, tidak ada kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Beberapa sertifikat, satu kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Beberapa sertifikat, beberapa kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Menulis PKCS12/PFX
Skenario | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Kosong | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Satu sertifikat, tidak ada kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Satu sertifikat, dengan kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Beberapa sertifikat, tidak ada kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Beberapa sertifikat, satu kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Beberapa sertifikat, beberapa kunci privat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Pemuatan ephemeral | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
macOS tidak dapat memuat kunci privat sertifikat tanpa objek rantai kunci, yang memerlukan penulisan ke disk. Rantai kunci dibuat secara otomatis untuk pemuatan PFX, dan dihapus saat tidak lagi digunakan. Karena opsi X509KeyStorageFlags.EphemeralKeySet berarti bahwa kunci privat tidak boleh ditulis ke disk, menegaskan bahwa tanda di macOS menghasilkan PlatformNotSupportedException.
Menulis kumpulan sertifikat PKCS7
Windows dan Linux memancarkan blob PKCS7 yang dikodekan DER. macOS memancarkan blob PKCS7 yang dikodekan indefinite-length-CER.
X509Store
Pada Windows, kelas X509Store adalah representasi dari WINDOWS Certificate Store API. API tersebut berfungsi sama di .NET Core dan .NET 5 seperti yang dilakukan di .NET Framework.
Di non-Windows, X509Store kelas adalah proyeksi keputusan kepercayaan sistem (baca-saja), keputusan kepercayaan pengguna (baca-tulis), dan penyimpanan kunci pengguna (baca-tulis).
Tabel berikut menunjukkan skenario mana yang didukung di setiap platform. Untuk skenario yang tidak didukung (❌ dalam tabel), CryptographicException dilemparkan.
Penyimpanan saya
Skenario | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Buka CurrentUser\My (ReadOnly) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Buka CurrentUser\My (ReadWrite) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Buka CurrentUser\My (ExistingOnly) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
Buka LocalMachine\My | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
Di Linux, penyimpanan dibuat pada tulis pertama, dan tidak ada penyimpanan pengguna secara default, sehingga pembukaan CurrentUser\My
dengan ExistingOnly
mungkin gagal.
Di macOS, penyimpanan CurrentUser\My
adalah rantai kunci default pengguna, yang login.keychain
secara default. Penyimpanan LocalMachine\My
ini adalah System.keychain
.
Penyimpanan akar
Skenario | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Buka CurrentUser\Root (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
Buka CurrentUser\Root (ReadWrite) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
Buka CurrentUser\Root (ExistingOnly) | ✔️ | ⚠️ | ✔️ (jika ReadOnly) | ❌ | ✔️ (jika ReadOnly) |
Buka LocalMachine\Root (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
Buka LocalMachine\Root (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
Buka LocalMachine\Root (ExistingOnly) | ✔️ | ⚠️ | ✔️ (jika ReadOnly) | ❌ | ✔️ (jika ReadOnly) |
Di Linux, penyimpanan LocalMachine\Root
adalah interpretasi bundel CA di jalur default untuk OpenSSL.
Di macOS, penyimpanan CurrentUser\Root
adalah interpretasi hasil SecTrustSettings
untuk domain kepercayaan pengguna. Penyimpanan LocalMachine\Root
adalah interpretasi dari hasil SecTrustSettings
untuk domain admin dan kepercayaan sistem.
Penyimpanan perantara
Skenario | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Buka CurrentUser\Intermediate (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
Buka CurrentUser\Intermediate (ReadWrite) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
Buka CurrentUser\Intermediate (ExistingOnly) | ✔️ | ⚠️ | ✔️ (jika ReadOnly) | ❌ | ❌ |
Buka LocalMachine\Intermediate (ReadOnly) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
Buka LocalMachine\Intermediate (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
Buka LocalMachine\Intermediate (ExistingOnly) | ✔️ | ⚠️ | ✔️ (jika ReadOnly) | ❌ | ❌ |
Di Linux, penyimpanan CurrentUser\Intermediate
digunakan sebagai cache saat mengunduh CA perantara oleh rekaman Akses Informasi Otoritasnya pada build X509Chain yang berhasil. Penyimpanan LocalMachine\Intermediate
adalah interpretasi bundel CA di jalur default untuk OpenSSL.
Di macOS, toko CurrentUser\Intermediate
diperlakukan sebagai penyimpanan kustom. Sertifikat yang ditambahkan ke penyimpanan ini tidak memengaruhi pembangunan rantai X.509.
Penyimpanan yang tidak diizinkan
Skenario | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Buka CurrentUser\Disallowed (ReadOnly) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
Buka CurrentUser\Disallowed (ReadWrite) | ✔️ | ⚠️ | ❌ | ❌ | ❌ |
Buka CurrentUser\Disallowed (ExistingOnly) | ✔️ | ⚠️ | ✔️ (jika ReadOnly) | ✔️ (jika ReadOnly) | ✔️ (jika ReadOnly) |
Buka LocalMachine\Disallowed (ReadOnly) | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
Buka LocalMachine\Disallowed (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
Buka LocalMachine\Disallowed (ExistingOnly) | ✔️ | ❌ | ✔️ (jika ReadOnly) | ✔️ (jika ReadOnly) | ✔️ (jika ReadOnly) |
Di Linux, penyimpanan Disallowed
tidak digunakan dalam pembuatan rantai, dan mencoba menambahkan konten ke dalamnya menghasilkan CryptographicException. CryptographicException dilemparkan saat membuka penyimpanan Disallowed
jika telah memperoleh konten.
Di macOS, penyimpanan CurrentUser\Disallowed dan LocalMachine\Disallowed adalah interpretasi dari hasil SecTrustSettings yang sesuai untuk sertifikat yang kepercayaannya diatur ke Always Deny
.
Penyimpanan yang tidak ada
Skenario | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Buka penyimpanan yang tidak ada (ExistingOnly) | ❌ | ❌ | ❌ | ❌ | ❌ |
Buka penyimpanan yang tidak ada CurrentUser (ReadWrite) | ✔️ | ✔️ | ⚠️ | ❌ | ❌ |
Buka penyimpanan yang tidak ada LocalMachine (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
Di macOS, pembuatan penyimpanan kustom dengan X509Store API hanya didukung untuk lokasi CurrentUser
. Ini akan membuat rantai kunci baru tanpa kata sandi di direktori rantai kunci pengguna (~/Library/Keychains). Untuk membuat rantai kunci dengan kata sandi, P/Invoke ke SecKeychainCreate
dapat digunakan. Demikian pula, SecKeychainOpen
dapat digunakan untuk membuka rantai kunci di lokasi yang berbeda. IntPtr
yang dihasilkan dapat diteruskan ke new X509Store(IntPtr)
untuk mendapatkan penyimpanan berkemampuan baca/tulis, tergantung pada izin pengguna saat ini.
X509Chain
macOS tidak mendukung pemanfaatan CRL Offline, sehingga X509RevocationMode.Offline
diperlakukan sebagai X509RevocationMode.Online
.
macOS tidak mendukung batas waktu yang dimulai pengguna pada pengunduhan CRL (Daftar Pencabutan Sertifikat) / OCSP (Protokol Status Sertifikat Online) / AIA (Akses Informasi Otoritas), jadi X509ChainPolicy.UrlRetrievalTimeout
diabaikan.
Sumber Daya Tambahan:
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk