Dela via


Plattformsoberoende kryptografi i .NET

Kryptografiska åtgärder i .NET utförs av operativsystembibliotek (OS). Det här beroendet har fördelar:

  • .NET-appar drar nytta av tillförlitligheten i operativsystemet. Att skydda kryptografibibliotek från sårbarheter är en hög prioritet för OS-leverantörer. För att göra det tillhandahåller de uppdateringar som systemadministratörer bör tillämpa.
  • .NET-appar har åtkomst till FIPS-verifierade algoritmer om OS-biblioteken är FIPS-verifierade.

Beroendet av OS-bibliotek innebär också att .NET-appar endast kan använda kryptografiska funktioner som operativsystemet stöder. Även om alla plattformar stöder vissa kärnfunktioner kan vissa funktioner som .NET stöder inte användas på vissa plattformar. Den här artikeln identifierar de funktioner som stöds på varje plattform.

Den här artikeln förutsätter att du har en fungerande kunskap om kryptografi i .NET. Mer information finns i .NET Cryptography Model och .NET Cryptographic Services.

Hash-algoritmer

Alla hash-algoritmer och hash-baserade HMAC-klasser (meddelandeautentisering), inklusive klasserna *Managed , skjuts upp till OS-biblioteken med undantag för .NET i webbläsarens WASM. I webbläsarens WASM implementeras SHA-1, SHA-2-256, SHA-2-384, SHA-2-512 med hanterad kod.

SHA-3

.NET 8 introducerade stöd för SHA-3-hashalgoritmerna, inklusive SHAKE-128 och SHAKE-256. SHA-3-stöd stöds för närvarande i Windows 11 build 25324 eller senare och Linux med OpenSSL 1.1.1 eller senare.

Symmetrisk kryptering

De underliggande chiffer och kedjekopplingar görs av systembiblioteken.

Chiffer + läge 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

Autentiserad kryptering

Stöd för autentiserad System.Security.Cryptography.AesCcmkryptering (AE) tillhandahålls för AES-CCM, AES-GCM och ChaCha20Poly1305 via klasserna , System.Security.Cryptography.AesGcmrespektive System.Security.Cryptography.ChaCha20Poly1305 .

Eftersom autentiserad kryptering kräver nyare plattforms-API:er för att stödja algoritmen kanske stödet inte finns på alla plattformar. Den IsSupported statiska egenskapen för klasserna för algoritmen kan användas för att identifiera vid körning om den aktuella plattformen stöder algoritmen eller inte.

Chiffer + läge Windows Linux macOS iOS, tvOS, MacCatalyst Android Webbläsare
AES-GCM ✔️ ✔️ ⚠️ ✔️
AES-CCM ✔️ ✔️ ⚠️ ✔️
ChaCha20Poly1305 Windows 10 Build 20142+ OpenSSL 1.1.0+ ⚠️ API-nivå 28+

AES-CCM på macOS

På macOS stöder systembiblioteken inte AES-CCM för kod från tredje part, så AesCcm klassen använder OpenSSL som stöd. Användare på macOS måste hämta en lämplig kopia av OpenSSL (libcrypto) för att den här typen ska fungera, och den måste finnas i en sökväg som systemet skulle läsa in ett bibliotek från som standard. Vi rekommenderar att du installerar OpenSSL från en pakethanterare, till exempel Homebrew.

Biblioteken libcrypto.0.9.7.dylib och libcrypto.0.9.8.dylib som ingår i macOS kommer från tidigare versioner av OpenSSL och kommer inte att användas. Biblioteken libcrypto.35.dylib, libcrypto.41.dyliboch libcrypto.42.dylib kommer från LibreSSL och kommer inte att användas.

AES-GCM och ChaCha20Poly1305 på macOS

macOS stödde inte AES-GCM eller ChaCha20Poly1305 förrän macOS 10.15 för kod från tredje part. Före .NET 8 AesGcm och ChaCha20Poly1305 har samma krav som AES-CCM och användarna måste installera OpenSSL för att dessa typer ska fungera.

Från och med .NET 8 använder .NET på macOS Apples CryptoKit-ramverk för AES-GCM och ChaCha20Poly1305. Användarna behöver inte installera eller konfigurera ytterligare beroenden för AES-GCM eller ChaCha20Poly1305 på macOS.

AES-CCM-nycklar, nonces och taggar

  • Nyckelstorlekar

    AES-CCM fungerar med 128, 192 och 256-bitars nycklar.

  • Nonce-storlekar

    Klassen AesCcm stöder nonces för 56, 64, 72, 80, 88, 96 och 104 bitar (7, 8, 9, 10, 11, 12 och 13 byte).

  • Taggstorlekar

    Klassen AesCcm stöder skapande eller bearbetning av taggarna 32, 48, 64, 80, 96, 112 och 128 bitar (4, 8, 10, 12, 14 och 16 byte).

AES-GCM-nycklar, nonces och taggar

  • Nyckelstorlekar

    AES-GCM fungerar med 128, 192 och 256-bitars nycklar.

  • Nonce-storlekar

    Klassen AesGcm stöder endast 96-bitars nonces (12 byte).

  • Taggstorlekar I Windows och Linux AesGcm har klassen stöd för att skapa eller bearbeta taggarna 96, 104, 112, 120 och 128 bitar (12, 13, 14, 15 och 16 byte). På macOS är taggstorleken begränsad till 128-bitars (16 byte) på grund av begränsningar i CryptoKit-ramverket.

ChaCha20Poly1305-nycklar, nonces och taggar.

ChaCha20Poly1305 har en fast storlek för nyckel-, nonce- och autentiseringstaggen. ChaCha20Poly1305 använder alltid en 256-bitarsnyckel, en 96-bitars (12 byte) nonce och en 128-bitars tagg (16 byte).

Asymmetrisk kryptografi

Det här avsnittet innehåller följande underavsnitt:

RSA

RSA-nyckelgenereringen (Rivest–Shamir–Adleman) utförs av OS-biblioteken och omfattas av deras storleksbegränsningar och prestandaegenskaper.

RSA-nyckelåtgärder utförs av OS-biblioteken och de typer av nycklar som kan läsas in omfattas av OS-kraven.

.NET exponerar inte RSA-åtgärder (oskyddade) "raw".

Stöd för utfyllnad och sammandrag varierar beroende på plattform:

Utfyllnadsläge Windows (CNG) Linux (OpenSSL) macOS iOS, tvOS, MacCatalyst Android Windows (CAPI)
PKCS1-kryptering ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-1 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-2 ✔️ ✔️ ✔️ ✔️ ✔️
OAEP - SHA-32 Windows 11 Build 25324+ OpenSSL 1.1.1+
PKCS1-signatur (MD5, SHA-1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
PKCS1-signatur (SHA-2) ✔️ ✔️ ✔️ ✔️ ✔️ ⚠️1
PKCS1-signatur (SHA-3)2 Windows 11 Build 25324+ OpenSSL 1.1.1+
PSS ✔️ ✔️ ✔️ ✔️ ✔️

1 Windows CryptoAPI (CAPI) kan använda PKCS1-signatur med en SHA-2-algoritm. Men det enskilda RSA-objektet kan läsas in i en kryptografisk tjänstprovider (CSP) som inte stöder det.

2 Kräver .NET 8.

RSA i Windows

RSA-inbyggt interop

.NET exponerar typer för att tillåta att program samverkar med de OS-bibliotek som .NET-kryptografikoden använder. De typer som berörs översätter inte mellan plattformar och bör endast användas direkt när det behövs.

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

1 På icke-Windows RSACryptoServiceProvider kan användas för kompatibilitet med befintliga program. I så fall genererar alla metoder som kräver OS-interop, till exempel att öppna en namngiven nyckel, en PlatformNotSupportedException.

2 På macOS fungerar RSAOpenSsl om OpenSSL är installerat och en lämplig libcrypto dylib kan hittas via dynamisk inläsning av bibliotek. Om det inte går att hitta ett lämpligt bibliotek genereras undantag.

ECDSA

ECDSA-nyckelgenereringen (Elliptic Curve Digital Signature Algorithm) utförs av OS-biblioteken och omfattas av deras storleksbegränsningar och prestandaegenskaper.

ECDSA-nyckelkurvor definieras av OS-biblioteken och omfattas av deras begränsningar.

Elliptisk kurva Windows 10 Windows 7 – 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (sekp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (sekp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (sekp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Brainpool-kurvor (som namngivna kurvor) ✔️ ⚠️1 ⚠️4
Andra namngivna kurvor ⚠️2 ⚠️1 ⚠️4
Explicita kurvor ✔️ ✔️ ✔️
Exportera eller importera som explicit ✔️ 3 ✔️ 3 3 ✔️

1 Linux-distributioner har inte stöd för samma namngivna kurvor.

2 Stöd för namngivna kurvor har lagts till i Windows CNG i Windows 10. Mer information finns i CNG Med namnet Elliptiska kurvor. Namngivna kurvor är inte tillgängliga i tidigare versioner av Windows, förutom tre kurvor i Windows 7.

3 Export med explicita kurvparametrar kräver stöd för OS-bibliotek, som inte är tillgängligt på Apple-plattformar eller tidigare versioner av Windows.

4 Android-stöd för vissa kurvor beror på Android-versionen. Android-distributörer kan också välja att lägga till eller ta bort kurvor från sin Android-version.

ECDSA Native Interop

.NET exponerar typer för att tillåta att program samverkar med de OS-bibliotek som .NET-kryptografikoden använder. De typer som berörs översätter inte mellan plattformar och bör endast användas direkt när det behövs.

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

* På macOS fungerar ECDsaOpenSsl om OpenSSL är installerat i systemet och en lämplig libcrypto dylib kan hittas via dynamisk biblioteksinläsning. Om det inte går att hitta ett lämpligt bibliotek genereras undantag.

ECDH

ECDH-nyckelgenereringen (Elliptic Curve Diffie-Hellman) utförs av OS-biblioteken och omfattas av deras storleksbegränsningar och prestandaegenskaper.

Klassen ECDiffieHellman stöder det "råa" värdet för ECDH-beräkningen samt genom följande viktiga härledningsfunktioner:

  • HASH(Z)
  • HASH(prepend || Z || tillägg)
  • HMAC(nyckel, Z)
  • HMAC(key, prepend || Z || tillägg)
  • HMAC(Z, Z)
  • HMAC(Z, prepend || Z || tillägg)
  • Tls11Prf(etikett, frö)

"Raw"-nyckelhärledning introducerades i .NET 8.

ECDH-nyckelkurvor definieras av OS-biblioteken och omfattas av deras begränsningar.

Elliptisk kurva Windows 10 Windows 7 – 8.1 Linux macOS iOS, tvOS, MacCatalyst Android
NIST P-256 (sekp256r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-384 (sekp384r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
NIST P-521 (sekp521r1) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Brainpool-kurvor (som namngivna kurvor) ✔️ ⚠️1 ⚠️4
Andra namngivna kurvor ⚠️2 ⚠️1 ⚠️4
Explicita kurvor ✔️ ✔️ ✔️
Exportera eller importera som explicit ✔️ 3 ✔️ 3 3 ✔️

1 Linux-distributioner har inte stöd för samma namngivna kurvor.

2 Stöd för namngivna kurvor har lagts till i Windows CNG i Windows 10. Mer information finns i CNG Med namnet Elliptiska kurvor. Namngivna kurvor är inte tillgängliga i tidigare versioner av Windows, förutom tre kurvor i Windows 7.

3 Export med explicita kurvparametrar kräver stöd för OS-bibliotek, som inte är tillgängligt på Apple-plattformar eller tidigare versioner av Windows.

4 Android-stöd för vissa kurvor beror på Android-versionen. Android-distributörer kan också välja att lägga till eller ta bort kurvor från sin Android-version.

ECDH-inbyggt interop

.NET exponerar typer för att tillåta att program samverkar med de OS-bibliotek som .NET använder. De typer som berörs översätter inte mellan plattformar och bör endast användas direkt när det behövs.

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

* På macOS fungerar ECDiffieHellmanOpenSsl om OpenSSL är installerat och en lämplig libcrypto dylib kan hittas via dynamisk inläsning av bibliotek. Om det inte går att hitta ett lämpligt bibliotek genereras undantag.

DSA

DSA-nyckelgenereringen (digital signaturalgoritm) utförs av systembiblioteken och omfattas av deras storleksbegränsningar och prestandaegenskaper.

Funktion Windows CNG Linux macOS Windows CAPI iOS, tvOS, MacCatalyst Android
Nyckelskapande (<= 1 024 bitar) ✔️ ✔️ ✔️ ✔️
Nyckelskapande (> 1 024 bitar) ✔️ ✔️ ✔️
Läser in nycklar (<= 1 024 bitar) ✔️ ✔️ ✔️ ✔️ ✔️
Läser in nycklar (> 1 024 bitar) ✔️ ✔️ ⚠️* ✔️
FIPS 186-2 ✔️ ✔️ ✔️ ✔️ ✔️
FIPS 186-3 (SHA-2-signaturer) ✔️ ✔️ ✔️

* macOS läser in DSA-nycklar som är större än 1 024 bitar, men beteendet för dessa nycklar är odefinierat. De beter sig inte enligt FIPS 186-3.

DSA i Windows

DSA-inbyggt interop

.NET exponerar typer för att tillåta att program samverkar med de OS-bibliotek som .NET-kryptografikoden använder. De typer som berörs översätter inte mellan plattformar och bör endast användas direkt när det behövs.

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

1 På icke-Windows DSACryptoServiceProvider kan användas för kompatibilitet med befintliga program. I så fall genererar alla metoder som kräver systeminterop, till exempel att öppna en namngiven nyckel, en PlatformNotSupportedException.

2 På macOS fungerar DSAOpenSsl om OpenSSL är installerat och en lämplig libcrypto dylib kan hittas via dynamisk inläsning av bibliotek. Om det inte går att hitta ett lämpligt bibliotek genereras undantag.

X.509-certifikat

Merparten av stödet för X.509-certifikat i .NET kommer från OS-bibliotek. Om du vill läsa in ett certifikat till en X509Certificate2 instans i X509Certificate .NET måste certifikatet läsas in av det underliggande OS-biblioteket.

Läsa en PKCS12/PFX

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Tomt ✔️ ✔️ ✔️ ✔️ ✔️
Ett certifikat, ingen privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Ett certifikat med privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, inga privata nycklar ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, en privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, flera privata nycklar ✔️ ✔️ ✔️ ✔️ ✔️

Skriva en PKCS12/PFX

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Tomt ✔️ ✔️ ✔️ ✔️ ✔️
Ett certifikat, ingen privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Ett certifikat med privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, inga privata nycklar ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, en privat nyckel ✔️ ✔️ ✔️ ✔️ ✔️
Flera certifikat, flera privata nycklar ✔️ ✔️ ✔️ ✔️ ✔️
Tillfällig inläsning ✔️ ✔️ ✔️ ✔️

macOS kan inte läsa in privata certifikatnycklar utan ett nyckelringsobjekt, vilket kräver att du skriver till disken. Nyckelringar skapas automatiskt för PFX-inläsning och tas bort när de inte längre används. Eftersom alternativet X509KeyStorageFlags.EphemeralKeySet innebär att den privata nyckeln inte ska skrivas till disken resulterar det i en PlatformNotSupportedException.

Skriva en PKCS7-certifikatsamling

Både Windows och Linux genererar DER-kodade PKCS7-blobar. macOS genererar obegränsade CER-kodade PKCS7-blobar.

X509Store

I Windows X509Store är klassen en representation av API:erna för Windows Certificate Store. Dessa API:er fungerar på samma sätt i .NET Core och .NET 5 som i .NET Framework.

I icke-Windows X509Store är klassen en projektion av beslut om systemförtroende (skrivskyddad), beslut om användarförtroende (läs-skrivning) och lagring av användarnycklar (läs-skriv).

Följande tabeller visar vilka scenarier som stöds på varje plattform. För scenarier som inte stöds (❌ i tabellerna) genereras en CryptographicException .

Min butik

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna CurrentUser\My (ReadOnly) ✔️ ✔️ ✔️ ✔️ ✔️
Öppna CurrentUser\My (ReadWrite) ✔️ ✔️ ✔️ ✔️ ✔️
Öppna CurrentUser\My (ExistingOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
Öppna LocalMachine\My ✔️ ✔️ ✔️ ✔️

I Linux skapas butiker vid första skrivningen och det finns inga användarlager som standard, så det går inte att öppna CurrentUser\My med ExistingOnly .

På macOS är arkivet CurrentUser\My användarens standardnyckelring, vilket är login.keychain standard. Butiken LocalMachine\My är System.keychain.

Rotarkivet

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna CurrentUser\Root (ReadOnly) ✔️ ✔️ ✔️ ✔️
Öppna CurrentUser\Root (ReadWrite) ✔️ ✔️
Öppna CurrentUser\Root (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly) ✔️ (om ReadOnly)
Öppna LocalMachine\Root (ReadOnly) ✔️ ✔️ ✔️ ✔️
Öppna LocalMachine\Root (ReadWrite) ✔️
Öppna LocalMachine\Root (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly) ✔️ (om ReadOnly)

I Linux LocalMachine\Root är store en tolkning av CA-paketet i standardsökvägen för OpenSSL.

På macOS är arkivet CurrentUser\Root en tolkning av SecTrustSettings resultatet för domänen för användarförtroende. Arkivet LocalMachine\Root är en tolkning av SecTrustSettings resultaten för administratörs- och systemförtroendedomänerna.

Mellanlagringsplatsen

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna CurrentUser\Intermediate (ReadOnly) ✔️ ✔️ ✔️
Öppna CurrentUser\Intermediate (ReadWrite) ✔️ ✔️
Öppna CurrentUser\Intermediate (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly)
Öppna LocalMachine\Intermediate (ReadOnly) ✔️ ✔️ ✔️
Öppna LocalMachine\Intermediate (ReadWrite) ✔️
Öppna LocalMachine\Intermediate (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly)

I Linux används arkivet CurrentUser\Intermediate som en cache när mellanliggande certifikatutfärdare laddas ned av sina åtkomstposter för utfärdarinformation i lyckade X509Chain-versioner. Arkivet LocalMachine\Intermediate är en tolkning av CA-paketet i standardsökvägen för OpenSSL.

På macOS CurrentUser\Intermediate behandlas butiken som ett anpassat arkiv. Certifikat som läggs till i det här arkivet påverkar inte X.509-kedjebygget.

Det otillåtna arkivet

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna CurrentUser\Otillåten (ReadOnly) ✔️ ⚠️ ✔️ ✔️ ✔️
Öppna CurrentUser\Otillåten (ReadWrite) ✔️ ⚠️
Öppna CurrentUser\Otillåten (ExistingOnly) ✔️ ⚠️ ✔️ (om ReadOnly) ✔️ (om ReadOnly) ✔️ (om ReadOnly)
Öppna LocalMachine\Otillåten (ReadOnly) ✔️ ✔️ ✔️ ✔️
Öppna LocalMachine\Otillåten (ReadWrite) ✔️
Öppna LocalMachine\Otillåten (ExistingOnly) ✔️ ✔️ (om ReadOnly) ✔️ (om ReadOnly) ✔️ (om ReadOnly)

I Linux används inte arkivet Disallowed i kedjebyggande, och om du försöker lägga till innehåll i det resulterar det i en CryptographicException. En CryptographicException utlöses när butiken Disallowed öppnas om den redan har hämtat innehåll.

I macOS är arkiven CurrentUser\Disallowed och LocalMachine\Disallowed tolkningar av lämpliga SecTrust Inställningar resultat för certifikat vars förtroende är inställt på Always Deny.

Obefintligt arkiv

Scenario Windows Linux macOS iOS, tvOS, MacCatalyst Android
Öppna ett arkiv som inte finns (ExistingOnly)
Öppna CurrentUser-arkivet som inte finns (ReadWrite) ✔️ ✔️ ⚠️
Öppna LocalMachine non-existent store (ReadWrite) ✔️

På macOS stöds skapande av anpassade butiker med X509Store-API:et endast för CurrentUser plats. Den skapar en ny nyckelring utan lösenord i användarens nyckelringskatalog (~/Bibliotek/nyckelringar). Om du vill skapa en nyckelring med lösenord kan en P/Invoke till SecKeychainCreate användas. SecKeychainOpen På samma sätt kan användas för att öppna nyckelringar på olika platser. IntPtr Resultatet kan skickas till för new X509Store(IntPtr) att hämta ett läs-/skrivkompatibelt arkiv, med förbehåll för den aktuella användarens behörigheter.

X509Chain

macOS stöder inte crl-användning offline, så X509RevocationMode.Offline behandlas som X509RevocationMode.Online.

macOS stöder inte en användarinitierad tidsgräns för nedladdning av CRL (listan över återkallade certifikat) /OCSP (Online Certificate Status Protocol) /AIA (Authority Information Access), så X509ChainPolicy.UrlRetrievalTimeout ignoreras.

Ytterligare resurser