Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Hitelesítési problémák elhárítása
Ez a cikk a titkosítással és biztonsággal kapcsolatos funkciók .NET-ben való használatakor SslStream előforduló leggyakoribb hitelesítési problémákat mutatja be az operációsrendszer-API-val (például a Windows Schannelnel) vagy az alacsony szintű rendszerkódtárakkal (például Linuxon futó OpenSSL) való együttműködéssel. A .NET-alkalmazás viselkedése, beleértve a kivételüzeneteket és a hibakódokat, a futtatott platformtól függően változhat.
Egyes problémák kivizsgálása és elhárítása egyszerűbb lehet, ha megfigyeli a vezetéken keresztül küldött tényleges üzeneteket olyan eszközökkel, mint a Wireshark vagy a tcpdump. Ezekkel az eszközökkel megvizsgálhatók a ClientHello, ServerHello és más üzenetek a meghirdetett támogatott TLS-verziók, a megengedett és egyeztetett titkosítási csomagok, valamint a hitelesítéshez cserélt tanúsítványok szempontjából.
A köztes tanúsítványok nem lesznek elküldve
A TLS-kézfogás során a szerver (és a kliens is, ha ügyfél-hitelesítést kérnek) elküldi a tanúsítványát, hogy igazolja saját identitását a kliensnek. A tanúsítvány hitelességének ellenőrzéséhez tanúsítványláncot kell létrehozni és ellenőrizni. A lánc gyökerének a megbízható főtanúsítvány-szolgáltató (CA) egyikének kell lennie, amelynek tanúsítványát a számítógép tanúsítványtárolójában tárolja a rendszer.
Ha a társtanúsítványt nem az egyik megbízható hitelesítésszolgáltató adta ki, a tanúsítványlánc létrehozásához köztes hitelesítésszolgáltatói tanúsítvány szükséges. Ha azonban a köztes tanúsítvány nem érhető el, nem lehet ellenőrizni a tanúsítványt, és a TLS-kézfogás sikertelen lehet.
Ez a probléma leggyakrabban Windows rendszeren jelentkezik. Annak ellenére, hogy az alkalmazás közbenső tanúsítványokat adott meg a hitelesítési lehetőségeken keresztül, a rendszer csak akkor küldi el őket a társnak, ha azok a Windows tanúsítványtárolójában vannak tárolva. Ez a korlátozás annak a ténynek köszönhető, hogy a tényleges TLS-kézfogás az alkalmazás folyamatán kívül történik.
Kiszolgálóalkalmazásoknál lehetőség van SslStreamCertificateContext-ot SslServerAuthenticationOptions.ServerCertificateContext-ként átadni. A SslStreamCertificateContext példány létrehozása során lehetősége van további köztes tanúsítványok átadására, melyek ideiglenesen bekerülnek a tanúsítványtárolóba.
Sajnos az ügyfélalkalmazás esetében az egyetlen megoldás a tanúsítványok manuális hozzáadása a tanúsítványtárolóhoz.
A kézfogás átmeneti kulcsokkal meghiúsult
Windows rendszeren hibaüzenet (0x8009030E): No credentials are available in the security package jelenhet meg, amikor rövid élettartamú kulcsokkal próbál tanúsítványokat használni. Ezt a viselkedést a mögöttes OS API (Schannel) hibája okozza. További releváns információk és kerülő megoldások találhatók a kapcsolódó GitHub-témában.
Az ügyfél és a kiszolgáló nem rendelkezik közös algoritmussal
Az ClientHello és ServerHello üzenetek vizsgálatakor kiderülhet, hogy sem az ügyfél, sem a kiszolgáló nem kínál titkosítási csomagot, vagy hogy egyik titkosítás sem érhető el, még akkor sem, ha kifejezetten konfigurálva vannak CipherSuitesPolicy által (csak Linuxon érhető el). A mögöttes TLS-kódtár letilthatja a nem biztonságosnak ítélt TLS-verziókat és titkosítási csomagokat.
Számos Linux-disztribúció esetén a megfelelő konfigurációs fájl a következő helyen /etc/ssl/openssl.cnftalálható: .
Windows rendszeren a Enable-TlsCipherSuite és Disable-TlsCipherSuite PowerShell-parancsmagok használhatók a titkosítási csomagok konfigurálására. Az egyes TLS-verziók a beállításkulcs konfigurálásával HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS <version>\{Client|Server}\Enabled engedélyezhetők/tilthatók le.