Mam zamiar nauczyć się obsługi ruchu HTTPS w C# jako strony serwera i jak na pierwsze kroki mam pewne problemy.Tryb serwera C# SSL musi korzystać z certyfikatu z odpowiednim kluczem prywatnym
Oto kod (http://pastebin.com/C4ZYrS8Q):
class Program
{
static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None) return true;
Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
return false;
}
static void Main()
{
var tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8080);
tcpListener.Start();
var clientAccept = tcpListener.AcceptTcpClient();
Thread.Sleep(1000);
if (clientAccept.Available > 0)
{
var sslStream = new SslStream(clientAccept.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
var certificate = new X509Certificate("path\server.pfx", "password");
sslStream.AuthenticateAsServer(certificate);
}
Console.ReadLine();
}
}
nie kłóć się! :) To jest kod testowy tylko tam, gdzie chcę tylko wykonać kilka podstawowych kroków z obsługą SSL w C#.
Więc ... problem występuje na tej linii:
sslStream.AuthenticateAsServer(certificate);
Od Russian to tłumaczy się jako: - tryb serwera SSL musi użyć certyfikatu z odpowiednim kluczem prywatnym.
myślałem, że zrobiłem mój certyfikat X509 nieprawidłowe, ale ponownie sprawdzane:
makecert.exe -r -pe -n "CN=localhost" -sky exchange -sv server.pvk server.cer
pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx -pi <password>
I wydaje się, że wszystko jest w porządku z tworzeniem X509, a dowodem na to jest to inna linia działa poprawnie :
var certificate = new X509Certificate("path\server.pfx", "password");
Program nie rzucił wyjątku na powyższej linii.
Jaki jest problem z hanldingiem protokołu SSL w moim kodzie i jak obsłużyć przychodzący strumień SSL jako serwer?
Co klient może komunikować się z serwerem za pomocą SSL? Pokaż kod klienta. –
@HamletHakobyan po prostu przeglądarka Chrome, to klient, z użyciem 'https: //' URI –