Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Versi TLS yang Dirundingkan dalam .NET?

Bagaimanakah Saya Boleh Menentukan Versi TLS yang Dirundingkan dalam .NET?

Susan Sarandon
Susan Sarandonasal
2025-01-10 09:14:42916semak imbas

How Can I Determine the Negotiated TLS Version in .NET?

Menentukan Versi TLS yang Dirundingkan dalam Aplikasi .NET

.NET 4.7 lalai kepada TLS 1.2 untuk permintaan HTTP; walau bagaimanapun, versi TLS sebenar yang digunakan semasa penubuhan sambungan boleh berbeza-beza. Panduan ini menggariskan dua kaedah untuk menentukan versi TLS yang dirundingkan.

Kaedah 1: Refleksi

Teknik ini memanfaatkan refleksi untuk mengakses sifat dalaman dan medan untuk mendapatkan versi protokol SSL. Ambil perhatian bahawa ini bergantung pada API dalaman dan mungkin berubah dengan kemas kini .NET akan datang.

<code class="language-csharp">using System.IO.Compression;
using System.Net;
using System.Net.Security;
using System.Reflection;
using System.Security.Authentication;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

// ... other code ...

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | 
                                       SecurityProtocolType.Tls11 | 
                                       SecurityProtocolType.Tls12 | 
                                       SecurityProtocolType.Tls13;

// ... other code ...

Uri requestUri = new Uri("https://somesite.com");
var request = WebRequest.CreateHttp(requestUri);

// ... other code ...

using (var requestStream = request.GetRequestStream()) {
    // Request stream validated; now extract SSL protocol
    SslProtocols sslProtocol = ExtractSslProtocol(requestStream);
    if (sslProtocol != SslProtocols.None) {
        // Process the sslProtocol value
    }
}

// ... ExtractSslProtocol function (implementation would be provided here) ...</code>

Kaedah 2: Atribut Konteks Sambungan Selamat (Lanjutan)

Kaedah ini mengakses atribut konteks sambungan melalui pustaka secur32.dll. Pendekatan ini melibatkan kerja dengan pemegang dan struktur bukan awam, menjadikannya kurang mudah alih dan berpotensi lebih kompleks. (Pelaksanaan terperinci diabaikan kerana kerumitan dan potensi ketidakstabilan.)

Pertimbangan Penting:

  • Versi .NET: Sokongan TLS 1.3 memerlukan .NET Framework 4.8 atau lebih baru, atau .NET Core 3.0 .
  • RemoteCertificateValidationCallback: Panggilan balik ini menawarkan cerapan tentang protokol keselamatan yang digunakan, membantu dalam pengenalan versi TLS.
  • TcpClient: Menggunakan TcpClient membolehkan mendapatkan semula maklumat TLS sebelum WebRequest pemula, membolehkan penentuan versi TLS proaktif.

Maklumat ini membantu pembangun memahami dan mengurus protokol keselamatan yang digunakan oleh aplikasi .NET mereka. Ingat untuk mempertimbangkan dengan teliti implikasi dan potensi risiko yang berkaitan dengan menggunakan refleksi dan berinteraksi dengan perpustakaan yang tidak diurus.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Versi TLS yang Dirundingkan dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn