/ / Jak korzystać z uwierzytelniania certyfikatów dla niestandardowego protokołu TCP? - c #, uwierzytelnianie, sieć, certyfikat

Jak korzystać z uwierzytelniania certyfikatów dla niestandardowego protokołu TCP? - c #, uwierzytelnianie, sieć, certyfikat

Wiem, że WCF ma uwierzytelnianie certyfikatu. Jak mogę zrobić to samo dla mojego protokołu niestandardowych gniazd? Jakie klasy należy użyć do weryfikacji certyfikatów? Jakie dane należy przenieść między stronami? Jakie są wymagane kroki?

Odpowiedzi:

0 dla odpowiedzi № 1

Zakładając, że chcesz korzystać z SSL:

Po stronie serwera można zawijać NetworkStream w SslStream i uwierzytelnij za pomocą X509Certificate:

SslStream stream = new SslStream(networkStream, false);
stream.AuthenticateAsServer(certificate, false, SslProtocols.Default, false);

The false w tym drugim wywołaniu kontroluje, czy serwer wymaga, aby klient również posiadał certyfikat.

Ten link zawiera kod do generowania samopodpisanego certyfikatu, przydatny podczas programowania.

Po stronie klienta należy podać wywołanie zwrotne sprawdzania poprawności:

SslStream stream = new SslStream(networkStream, false, ValidateRemoteCertificate);
stream.AuthenticateAsClient(RemoteHost);

Jeśli chcesz, możesz dostarczyć certyfikaty klienta w razie przeciążenia AuthenticateAsClient.

private bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
return true;
}

// Here you decide whether self-signed certificates are OK
if (allowAnyCertificateAnyway)
{
return true;
}

return false;
}

Mam nadzieję, że to pomaga, wykorzystuje NetworkStream który w końcu jest po prostu otoką Socket. Wszystko to jest wbudowane w strukturę i możesz czytać / pisać od / do SslStream tak jakby był regularny NetworkStream.