.NET'te Platformlar Arası Şifreleme
.NET'teki şifreleme işlemleri işletim sistemi (OS) kitaplıkları tarafından gerçekleştirilir. Bu bağımlılığın avantajları vardır:
- .NET uygulamaları işletim sistemi güvenilirliğinden yararlanıyor. Şifreleme kitaplıklarının güvenlik açıklarından korunması işletim sistemi satıcıları için yüksek önceliklidir. Bunu yapmak için sistem yöneticilerinin uygulaması gereken güncelleştirmeleri sağlar.
- İşletim sistemi kitaplıkları FIPS ile doğrulanmışsa .NET uygulamaları FIPS ile doğrulanmış algoritmalara erişebilir.
İşletim sistemi kitaplıklarına bağımlılık, .NET uygulamalarının yalnızca işletim sisteminin desteklediği şifreleme özelliklerini kullanabileceği anlamına da gelir. Tüm platformlar belirli temel özellikleri desteklese de, .NET'in desteklediği bazı özellikler bazı platformlarda kullanılamaz. Bu makale, her platformda desteklenen özellikleri tanımlar.
Bu makalede, .NET'te şifreleme hakkında bilgi sahibi olduğunuz varsayılır. Daha fazla bilgi için bkz . .NET Şifreleme Modeli ve .NET Şifreleme Hizmetleri.
Karma algoritmalar
Sınıflar da dahil olmak üzere *Managed
tüm karma algoritma ve karma tabanlı ileti kimlik doğrulaması (HMAC) sınıfları, Tarayıcı WASM'de .NET dışında işletim sistemi kitaplıklarına ertelenir. Tarayıcı WASM'de SHA-1, SHA-2-256, SHA-2-384, SHA-2-512 yönetilen kod kullanılarak uygulanır.
SHA-3
.NET 8, SHAKE-128 ve SHAKE-256 dahil olmak üzere SHA-3 karma algoritmaları için destek kullanıma sunulmuştur. SHA-3 desteği şu anda Windows 11 derleme 25324 veya sonraki sürümlerde ve OpenSSL 1.1.1 veya üzeri yüklü Linux'ta desteklenmektedir.
Simetrik şifreleme
Temel alınan şifreler ve zincirleme, sistem kitaplıkları tarafından gerçekleştirilir.
Şifre + Mod | 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 | ❌ | ❌ | ❌ | ❌ | ❌ |
Kimliği doğrulanmış şifreleme
AES-CCM, AES-GCM ve ChaCha20Poly1305 için sırasıyla , System.Security.Cryptography.AesGcmve System.Security.Cryptography.ChaCha20Poly1305 sınıfları aracılığıyla System.Security.Cryptography.AesCcmkimliği doğrulanmış şifreleme (AE) desteği sağlanır.
Kimlik doğrulama şifrelemesi algoritmayı desteklemek için daha yeni platform API'leri gerektirdiğinden tüm platformlarda destek bulunmayabilir. Algoritma IsSupported
sınıflarında statik özelliği, geçerli platformun algoritmayı desteklese de desteklemese de çalışma zamanında algılamak için kullanılabilir.
Şifre + Mod | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android | Tarayıcı |
---|---|---|---|---|---|---|
AES-GCM | ✔️ | ✔️ | ⚠️ | ❌ | ✔️ | ❌ |
AES-CCM | ✔️ | ✔️ | ⚠️ | ❌ | ✔️ | ❌ |
ChaCha20Poly1305 | Windows 10 Derleme 20142+ | OpenSSL 1.1.0+ | ⚠️ | ❌ | API Düzeyi 28+ | ❌ |
macOS üzerinde AES-CCM
macOS'ta sistem kitaplıkları üçüncü taraf kodu için AES-CCM'yi desteklemez, bu nedenle AesCcm sınıfı destek için OpenSSL kullanır. macOS'taki kullanıcıların bu türün çalışması için uygun bir OpenSSL (libcrypto) kopyası edinmeleri ve sistemin varsayılan olarak kitaplığı yükleyeceği bir yolda olması gerekir. OpenSSL'yi Homebrew gibi bir paket yöneticisinden yüklemenizi öneririz.
macOS'ta libcrypto.0.9.7.dylib
bulunan ve libcrypto.0.9.8.dylib
kitaplıkları, OpenSSL'nin önceki sürümlerindendir ve kullanılmayacaktır. libcrypto.35.dylib
, libcrypto.41.dylib
ve libcrypto.42.dylib
kitaplıkları LibreSSL'dendir ve kullanılmaz.
macOS üzerinde AES-GCM ve ChaCha20Poly1305
macOS, üçüncü taraf kodu için macOS 10.15'e kadar AES-GCM veya ChaCha20Poly1305'i desteklemedi. .NET 8'in öncesinde, AesGcmChaCha20Poly1305 AES-CCM ile aynı gereksinime sahiptir ve bu türlerin çalışması için kullanıcıların OpenSSL yüklemesi gerekir.
.NET 8'den başlayarak macOS üzerinde .NET, Apple'ın AES-GCM ve ChaCha20Poly1305 için CryptoKit çerçevesini kullanacaktır. Kullanıcıların macOS üzerinde AES-GCM veya ChaCha20Poly1305 için ek bağımlılıkları yüklemesi veya yapılandırması gerekmez.
AES-CCM anahtarları, nonce'lar ve etiketler
Anahtar Boyutları
AES-CCM, 128, 192 ve 256 bit anahtarlarla çalışır.
Nonce Boyutları
sınıfı AesCcm 56, 64, 72, 80, 88, 96 ve 104 bit (7, 8, 9, 10, 11, 12 ve 13 bayt) nonce'ları destekler.
Etiket Boyutları
sınıfı AesCcm 32, 48, 64, 80, 96, 112 ve 128 bit (4, 8, 10, 12, 14 ve 16 bayt) etiketleri oluşturmayı veya işlemeyi destekler.
AES-GCM anahtarları, nonce'lar ve etiketler
Anahtar Boyutları
AES-GCM 128, 192 ve 256 bit anahtarlarla çalışır.
Nonce Boyutları
AesGcm sınıfı yalnızca 96 bit (12 bayt) nonce'ları destekler.
Etiket Boyutları Windows ve Linux'ta sınıfı 96, AesGcm 104, 112, 120 ve 128 bit (12, 13, 14, 15 ve 16 bayt) etiketlerin oluşturulmasını veya işlenmesini destekler. macOS'ta, CryptoKit çerçevesinin sınırlamaları nedeniyle etiket boyutu 128 bit (16 bayt) ile sınırlıdır.
ChaCha20Poly1305 tuşları, nonces ve etiketler.
ChaCha20Poly1305 anahtar, nonce ve kimlik doğrulama etiketi için sabit bir boyuta sahiptir. ChaCha20Poly1305 her zaman 256 bit anahtar, 96 bit (12 bayt) nonce ve 128 bit (16 bayt) etiketi kullanır.
Asimetrik şifreleme
Bu bölüm aşağıdaki alt bölümleri içerir:
RSA
RSA (Rivest–Shamir–Adleman) anahtar oluşturma, işletim sistemi kitaplıkları tarafından gerçekleştirilir ve boyut sınırlamalarına ve performans özelliklerine tabidir.
RSA anahtar işlemleri işletim sistemi kitaplıkları tarafından gerçekleştirilir ve yüklenebilen anahtar türleri işletim sistemi gereksinimlerine tabidir.
.NET, "ham" (unpadded) RSA işlemlerini kullanıma sunmaz.
Doldurma ve özet desteği platforma göre farklılık gösterir:
Doldurma Modu | Windows (CNG) | Linux (OpenSSL) | macOS | iOS, tvOS, MacCatalyst | Android | Windows (CAPI) |
---|---|---|---|---|---|---|
PKCS1 Şifrelemesi | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
OAEP - SHA-1 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
OAEP - SHA-2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
OAEP - SHA-32 | Windows 11 Derlemesi 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
PKCS1 İmzası (MD5, SHA-1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
PKCS1 İmzası (SHA-2) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ⚠️1 |
PKCS1 İmzası (SHA-3)2 | Windows 11 Derlemesi 25324+ | OpenSSL 1.1.1+ | ❌ | ❌ | ❌ | ❌ |
PSS | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
1 Windows CryptoAPI (CAPI), SHA-2 algoritmasıyla PKCS1 imzası özelliğine sahiptir. Ancak tek tek RSA nesnesi, onu desteklemeyen bir şifreleme hizmeti sağlayıcısına (CSP) yüklenebilir.
2 .NET 8 gerektirir.
Windows üzerinde RSA
- Windows CryptoAPI (CAPI) her
new RSACryptoServiceProvider()
kullanıldığında kullanılır. - Windows Şifreleme API'si Yeni Nesil (CNG) her
new RSACng()
kullanıldığında kullanılır. - tarafından RSA.Create döndürülen nesne, Windows CNG tarafından dahili olarak desteklenir. Windows CNG'nin bu kullanımı bir uygulama ayrıntısıdır ve değiştirilebilir.
- GetRSAPublicKey için X509Certificate2 uzantı yöntemi bir RSACng örnek döndürür. bu kullanımı RSACng bir uygulama ayrıntısıdır ve değiştirilebilir.
- GetRSAPrivateKey için X509Certificate2 uzantı yöntemi şu anda bir RSACng örneği tercih eder, ancak anahtarı açamazsanız RSACng denenecektirRSACryptoServiceProvider. Tercih edilen sağlayıcı bir uygulama ayrıntısıdır ve değiştirilebilir.
RSA yerel birlikte çalışma
.NET, programların .NET şifreleme kodunun kullandığı işletim sistemi kitaplıklarıyla birlikte çalışması için türleri kullanıma sunar. Söz konusu türler platformlar arasında çeviri yapmaz ve yalnızca gerektiğinde doğrudan kullanılmalıdır.
Tür | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
RSACryptoServiceProvider | ✔️ | ⚠️1 | ⚠️1 | ⚠️1 | ⚠️1 |
RSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
RSAOpenSsl | ❌ | ✔️ | ⚠️2 | ❌ | ❌ |
1 Windows olmayanlarda, RSACryptoServiceProvider mevcut programlarla uyumluluk için kullanılabilir. Bu durumda, adlandırılmış anahtar açma gibi işletim sistemi birlikte çalışması gerektiren herhangi bir yöntem bir PlatformNotSupportedExceptionoluşturur.
2 macOS'ta, RSAOpenSsl OpenSSL yüklüyse çalışır ve dinamik kitaplık yükleme yoluyla uygun bir libcrypto dylib bulunabilir. Uygun bir kitaplık bulunamazsa özel durumlar oluşturulur.
ECDSA
ECDSA (Eliptik Eğri Dijital İmza Algoritması) anahtar oluşturma işlemi işletim sistemi kitaplıkları tarafından yapılır ve boyut sınırlamalarına ve performans özelliklerine tabidir.
ECDSA anahtar eğrileri işletim sistemi kitaplıkları tarafından tanımlanır ve sınırlamalarına tabidir.
Eliptik Eğri | Windows 10 | Windows 7 - 8.1 | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|---|
NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
NIST P-521 (secp521r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Beyin havuzu eğrileri (adlandırılmış eğriler olarak) | ✔️ | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
Diğer adlandırılmış eğriler | ⚠️2 | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
Açık eğriler | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
Açık olarak dışarı veya içeri aktarma | ✔️ | ❌3 | ✔️ | ❌3 | ❌3 | ✔️ |
1 Linux dağıtımlarının tümü aynı adlandırılmış eğrileri desteklemez.
2 Windows 10'da Windows CNG'ye adlandırılmış eğriler desteği eklendi. Daha fazla bilgi için bkz . Eliptik Eğriler Adlı CNG. Adlandırılmış eğriler, Windows 7'deki üç eğri dışında Windows'un önceki sürümlerinde kullanılamaz.
3 Açık eğri parametreleriyle dışarı aktarma işlemi, Apple platformlarında veya Windows'un önceki sürümlerinde bulunmayan işletim sistemi kitaplığı desteği gerektirir.
4 Bazı eğriler için Android desteği Android sürümüne bağlıdır. Android dağıtımcıları, Android derlemelerinde de eğrileri eklemeyi veya kaldırmayı seçebilir.
ECDSA Yerel Birlikte Çalışma
.NET, programların .NET şifreleme kodunun kullandığı işletim sistemi kitaplıklarıyla birlikte çalışması için türleri kullanıma sunar. İlgili türler platformlar arasında çevrilmediğinden yalnızca gerektiğinde doğrudan kullanılmalıdır.
Tür | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
ECDsaCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
ECDsaOpenSsl | ❌ | ✔️ | ⚠️* | ❌ | ❌ |
* MacOS'ta, ECDsaOpenSsl sistemde OpenSSL yüklüyse ve dinamik kitaplık yükleme yoluyla uygun bir libcrypto dylib bulunabiliyorsa çalışır. Uygun bir kitaplık bulunamazsa özel durumlar oluşturulur.
ECDH
ECDH (Elliptic Curve Diffie-Hellman) anahtar oluşturma işlemi işletim sistemi kitaplıkları tarafından yapılır ve boyut sınırlamalarına ve performans özelliklerine tabidir.
sınıfı, ECDiffieHellman ECDH hesaplamasının "ham" değerini ve aşağıdaki anahtar türetme işlevlerini destekler:
- HASH(Z)
- HASH(önceki || Z || ekleme)
- HMAC(anahtar, Z)
- HMAC(key, prepend || Z || ekleme)
- HMAC(Z, Z)
- HMAC(Z, önceki || Z || ekleme)
- Tls11Prf(etiket, çekirdek)
"Ham" anahtar türetmesi .NET 8'de kullanıma sunulmuştur.
ECDH anahtar eğrileri işletim sistemi kitaplıkları tarafından tanımlanır ve sınırlamalarına tabidir.
Eliptik Eğri | Windows 10 | Windows 7 - 8.1 | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|---|
NIST P-256 (secp256r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
NIST P-384 (secp384r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
NIST P-521 (secp521r1) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Beyin havuzu eğrileri (adlandırılmış eğriler olarak) | ✔️ | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
Diğer adlandırılmış eğriler | ⚠️2 | ❌ | ⚠️1 | ❌ | ❌ | ⚠️4 |
Açık eğriler | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ |
Açık olarak dışarı veya içeri aktarma | ✔️ | ❌3 | ✔️ | ❌3 | ❌3 | ✔️ |
1 Linux dağıtımlarının tümü aynı adlandırılmış eğrileri desteklemez.
2 Windows 10'da Windows CNG'ye adlandırılmış eğriler desteği eklendi. Daha fazla bilgi için bkz . Eliptik Eğriler Adlı CNG. Adlandırılmış eğriler, Windows 7'deki üç eğri dışında Windows'un önceki sürümlerinde kullanılamaz.
3 Açık eğri parametreleriyle dışarı aktarma işlemi, Apple platformlarında veya Windows'un önceki sürümlerinde bulunmayan işletim sistemi kitaplığı desteği gerektirir.
4 Bazı eğriler için Android desteği Android sürümüne bağlıdır. Android dağıtımcıları, Android derlemelerinde de eğrileri eklemeyi veya kaldırmayı seçebilir.
ECDH yerel birlikte çalışma
.NET, programların .NET'in kullandığı işletim sistemi kitaplıklarıyla birlikte çalışmalarına izin vermek için türleri kullanıma sunar. İlgili türler platformlar arasında çevrilmediğinden yalnızca gerektiğinde doğrudan kullanılmalıdır.
Tür | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
ECDiffieHellmanCng | ✔️ | ❌ | ❌ | ❌ | ❌ |
ECDiffieHellmanOpenSsl | ❌ | ✔️ | ⚠️* | ❌ | ❌ |
* macOS'ta OpenSSL ECDiffieHellmanOpenSsl yüklüyse çalışır ve dinamik kitaplık yükleme yoluyla uygun bir libcrypto dylib bulunabilir. Uygun bir kitaplık bulunamazsa özel durumlar oluşturulur.
DSA
DSA (Dijital İmza Algoritması) anahtar oluşturma işlemi sistem kitaplıkları tarafından gerçekleştirilir ve boyut sınırlamalarına ve performans özelliklerine tabidir.
İşlev | Windows CNG | Linux | macOS | Windows CAPI | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|---|
Anahtar oluşturma (<= 1024 bit) | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ✔️ |
Anahtar oluşturma (> 1024 bit) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
Anahtarları yükleme (<= 1024 bit) | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
Anahtarlar yükleniyor (> 1024 bit) | ✔️ | ✔️ | ⚠️* | ❌ | ❌ | ✔️ |
FIPS 186-2 | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
FIPS 186-3 (SHA-2 imzaları) | ✔️ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
* macOS, 1024 bitten büyük DSA anahtarlarını yükler, ancak bu anahtarların davranışı tanımlanmamıştır. FIPS 186-3'e göre davranmıyorlar.
Windows üzerinde DSA
- Windows CryptoAPI (CAPI) her
new DSACryptoServiceProvider()
kullanıldığında kullanılır. - Windows Şifreleme API'si Yeni Nesil (CNG) her
new DSACng()
kullanıldığında kullanılır. - tarafından DSA.Create döndürülen nesne, Windows CNG tarafından dahili olarak desteklenir. Windows CNG'nin bu kullanımı bir uygulama ayrıntısıdır ve değiştirilebilir.
- GetDSAPublicKey için X509Certificate2 uzantı yöntemi bir DSACng örnek döndürür. bu kullanımı DSACng bir uygulama ayrıntısıdır ve değiştirilebilir.
- GetDSAPrivateKey için X509Certificate2 uzantı yöntemi bir DSACng örneği tercih eder, ancak anahtarı açamazsa DSACng denenecektirDSACryptoServiceProvider. Tercih edilen sağlayıcı bir uygulama ayrıntısıdır ve değiştirilebilir.
DSA yerel birlikte çalışma
.NET, programların .NET şifreleme kodunun kullandığı işletim sistemi kitaplıklarıyla birlikte çalışması için türleri kullanıma sunar. İlgili türler platformlar arasında çevrilmediğinden yalnızca gerektiğinde doğrudan kullanılmalıdır.
Tür | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
DSACryptoServiceProvider | ✔️ | ⚠️1 | ⚠️1 | ❌ | ⚠️1 |
DSACng | ✔️ | ❌ | ❌ | ❌ | ❌ |
DSAOpenSsl | ❌ | ✔️ | ⚠️2 | ❌ | ❌ |
1 Windows olmayanlarda, DSACryptoServiceProvider mevcut programlarla uyumluluk için kullanılabilir. Bu durumda, adlandırılmış anahtar açma gibi sistem birlikte çalışması gerektiren herhangi bir yöntem bir PlatformNotSupportedExceptionoluşturur.
2 macOS'ta, DSAOpenSsl OpenSSL yüklüyse çalışır ve dinamik kitaplık yükleme yoluyla uygun bir libcrypto dylib bulunabilir. Uygun bir kitaplık bulunamazsa özel durumlar oluşturulur.
X.509 Sertifikaları
.NET'teki X.509 sertifikalarına yönelik desteğin çoğu işletim sistemi kitaplıklarından gelir. Bir sertifikayı .NET'teki bir X509Certificate2 veya X509Certificate örneğine yüklemek için, sertifikanın temel işletim sistemi kitaplığı tarafından yüklenmesi gerekir.
PKCS12/PFX okuma
Senaryo | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Boş | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Bir sertifika, özel anahtar yok | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Özel anahtarla bir sertifika | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Birden çok sertifika, özel anahtar yok | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Birden çok sertifika, bir özel anahtar | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Birden çok sertifika, birden çok özel anahtar | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
PKCS12/PFX yazma
Senaryo | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Boş | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Bir sertifika, özel anahtar yok | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Özel anahtarla bir sertifika | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Birden çok sertifika, özel anahtar yok | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Birden çok sertifika, bir özel anahtar | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Birden çok sertifika, birden çok özel anahtar | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Kısa ömürlü yükleme | ✔️ | ✔️ | ❌ | ✔️ | ✔️ |
macOS, diske yazma gerektiren anahtarlık nesnesi olmadan sertifika özel anahtarlarını yükleyemez. Anahtarlıklar PFX yüklemesi için otomatik olarak oluşturulur ve artık kullanımda olmadığında silinir. X509KeyStorageFlags.EphemeralKeySet seçeneği özel anahtarın diske yazılmaması gerektiği anlamına gelir ve macOS'ta bu bayrağın belirtilmesi bir PlatformNotSupportedExceptionile sonuçlanabilir.
PKCS7 sertifika koleksiyonu yazma
Hem Windows hem de Linux DER ile kodlanmış PKCS7 blobları yayar. macOS süresiz uzunlukta CER ile kodlanmış PKCS7 blobları yayar.
X509store
Windows'da sınıfı, X509Store Windows Sertifika Deposu API'lerinin bir gösterimidir. Bu API'ler .NET Core ve .NET 5'te .NET Framework ile aynı şekilde çalışır.
Windows olmayanlarda sınıfı sistem X509Store güveni kararlarının (salt okunur), kullanıcı güveni kararlarının (okuma-yazma) ve kullanıcı anahtarı depolama alanının (okuma-yazma) bir projeksiyonudur.
Aşağıdaki tablolarda her platformda hangi senaryoların desteklendiği gösterilmektedir. Desteklenmeyen senaryolar için (❌ tablolarda) bir CryptographicException oluşturulur.
Mağazam
Senaryo | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
CurrentUser\My (ReadOnly) dosyasını açın | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
CurrentUser\My Dosyasını Aç (ReadWrite) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
CurrentUser\My (ExistingOnly) dosyasını açın | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
LocalMachine\My dosyasını açın | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
Linux'ta depolar ilk yazmada oluşturulur ve varsayılan olarak hiçbir kullanıcı deposu yoktur, bu nedenle ile ExistingOnly
açma CurrentUser\My
işlemi başarısız olabilir.
macOS'ta mağaza, CurrentUser\My
varsayılan olarak kullanıcının varsayılan anahtarlığıdır login.keychain
. Mağaza LocalMachine\My
şeklindedir System.keychain
.
Kök depo
Senaryo | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
CurrentUser\Root'ı aç (Salt Okunur) | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
CurrentUser\Root Dosyasını Aç (ReadWrite) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
CurrentUser\Root'ı aç (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ReadOnly ise) | ❌ | ✔️ (ReadOnly ise) |
LocalMachine\Root(ReadOnly) dosyasını açın | ✔️ | ✔️ | ✔️ | ❌ | ✔️ |
LocalMachine\Root'ı açın (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
LocalMachine\Root'ı açın (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ReadOnly ise) | ❌ | ✔️ (ReadOnly ise) |
Linux'ta depo, LocalMachine\Root
OpenSSL için varsayılan yolda CA paketinin bir yorumudur.
macOS'ta depo, CurrentUser\Root
kullanıcı güveni etki alanı için sonuçların yorumlanmasıdır SecTrustSettings
. Mağaza LocalMachine\Root
, yönetici ve sistem güven etki alanları için sonuçların yorumlanmasıdır SecTrustSettings
.
Ara depo
Senaryo | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
CurrentUser\Intermediate'ı açma (Salt Okunur) | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
CurrentUser\Intermediate Dosyasını Aç (ReadWrite) | ✔️ | ✔️ | ❌ | ❌ | ❌ |
CurrentUser\Intermediate Dosyasını Aç (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ReadOnly ise) | ❌ | ❌ |
LocalMachine\Intermediate(ReadOnly) dosyasını açın | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
LocalMachine\Intermediate dosyasını açın (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
LocalMachine\Intermediate'ı aç (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ReadOnly ise) | ❌ | ❌ |
Linux'ta depo, CurrentUser\Intermediate
başarılı X509Chain derlemelerinde Yetkili Bilgileri Erişim kayıtları tarafından ara CA'ları indirirken önbellek olarak kullanılır. Depo LocalMachine\Intermediate
, OpenSSL için varsayılan yoldaki CA paketinin bir yorumudur.
macOS'ta CurrentUser\Intermediate
mağaza özel mağaza olarak değerlendirilir. Bu depoya eklenen sertifikalar X.509 zincir binasını etkilemez.
İzin Verilmeyen depo
Senaryo | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
CurrentUser\İzin Verilmeyen 'i Aç (Salt Okunur) | ✔️ | ⚠️ | ✔️ | ✔️ | ✔️ |
Open CurrentUser\Disallowed (ReadWrite) | ✔️ | ⚠️ | ❌ | ❌ | ❌ |
CurrentUser\İzin Verilmeyeni Aç (ExistingOnly) | ✔️ | ⚠️ | ✔️ (ReadOnly ise) | ✔️ (ReadOnly ise) | ✔️ (ReadOnly ise) |
LocalMachine\Disallowed (ReadOnly) dosyasını açın | ✔️ | ❌ | ✔️ | ✔️ | ✔️ |
LocalMachine\Disallowed (ReadWrite) dosyasını açın | ✔️ | ❌ | ❌ | ❌ | ❌ |
LocalMachine\Disallowed (ExistingOnly) öğesini açın | ✔️ | ❌ | ✔️ (ReadOnly ise) | ✔️ (ReadOnly ise) | ✔️ (ReadOnly ise) |
Linux'ta mağaza Disallowed
zincir oluşturmada kullanılmaz ve içindekileri eklemeye çalışmak bir CryptographicExceptionile sonuçlanır. Zaten edinilmiş içerik varsa mağaza açılırken Disallowed
bir CryptographicException oluşturulur.
macOS'ta CurrentUser\Disallowed ve LocalMachine\Disallowed depoları, güveni olarak ayarlanmış Always Deny
sertifikalar için uygun SecTrust Ayarlar sonuçlarının yorumlarıdır.
Var olmayan depo
Senaryo | Windows | Linux | macOS | iOS, tvOS, MacCatalyst | Android |
---|---|---|---|---|---|
Var olmayan depo açma (ExistingOnly) | ❌ | ❌ | ❌ | ❌ | ❌ |
Mevcut olmayan CurrentUser depounu açma (ReadWrite) | ✔️ | ✔️ | ⚠️ | ❌ | ❌ |
LocalMachine varolmayan depo açma (ReadWrite) | ✔️ | ❌ | ❌ | ❌ | ❌ |
macOS'ta, X509Store API'siyle özel mağaza oluşturma yalnızca konum için CurrentUser
desteklenir. Kullanıcının anahtarlık dizininde (~/Library/Keychains) parolasız yeni bir anahtarlık oluşturur. Parolayla anahtarlık oluşturmak için SecKeychainCreate
P/Invoke kullanılabilir. Benzer şekilde, SecKeychainOpen
anahtarlıkları farklı konumlarda açmak için de kullanılabilir. IntPtr
Sonuç, geçerli kullanıcının izinlerine new X509Store(IntPtr)
bağlı olarak okuma/yazma özellikli bir depo elde etmek için öğesine geçirilebilir.
X509Chain
macOS Çevrimdışı CRL kullanımını X509RevocationMode.Offline
desteklemediğinden olarak X509RevocationMode.Online
değerlendirilir.
macOS, CRL (Sertifika İptal Listesi) / OCSP (Çevrimiçi Sertifika Durum Protokolü) / AIA (Yetkili Bilgileri Erişimi) indirme işlemi için kullanıcı tarafından başlatılan zaman aşımını desteklemez, bu nedenle X509ChainPolicy.UrlRetrievalTimeout
yoksayılır.
Ek kaynaklar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin