Bagikan melalui


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

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

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: