Entwickler-Ecke

Netzwerk - TCPClient SSL


Raven280438 - Mo 30.09.19 14:32
Titel: TCPClient SSL
Hi,

Ich schreibe eine Client-Server-Anwendung, bei der ich über eine TCP-Verbindung mit SSL-Verschlüsselung komunizieren möchte.
Ich hab dazu mittels OpenSSL ein eigenes Zertifikat erstelle:


Quelltext
1:
2:
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "GameCert\signkey.key" -out "GameCert\signkey.key"
openssl pkcs12 -export -out "GameCert\certificate.pfx" -in "GameCert\signkey.key"


Der Server akzeptiert Verbindungen via

C#-Quelltext
1:
2:
3:
4:
serverCert = new X509Certificate2("certificate.pfx""cert_password");
[...]
this.MyStream = new SslStream(this.Socket.GetStream(), false);
this.MyStream.AuthenticateAsServer(serverCert, clientCertificateRequired: false, checkCertificateRevocation: true);



Der Client versucht sich dann zum Server zu verbinden:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
this.myStream = new SslStream(this.PlayerSocket.GetStream(), falsenew RemoteCertificateValidationCallback(ValidateServerCertificate), null);
try
{
     this.myStream.AuthenticateAsClient(this.ServerIP);
}
catch (AuthenticationException e)
{
     this.Logger.LogError("SSL-Authentication failed - closing the connection. " + e.Message);
     this.PlayerSocket.Close();
     return;
}


Dabei wir die AuthenticationException geworfen:
Zitat:
Das Remotezertifikat ist laut Validierungsverfahren ungültig.



Woran kann das liegen? Hab ich beim Erstellen des Zertifikats was falsch gemacht?



Gruß


Th69 - Mo 30.09.19 16:56

So wie ich SslStream and Authentication [https://stackoverflow.com/questions/41863244/sslstream-and-authentication] sowie das Beispiel in SslStream [https://docs.microsoft.com/de-de/dotnet/api/system.net.security.sslstream] verstehe, mußt du einen passenden Servername (bzw. laut SslStream.AuthenticateAsClient [https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslstream.authenticateasclient] heißt der Parameter targetHost) angeben - eine IP-Adresse anzugeben ist ungültig:
Zitat:

C#-Quelltext
1:
// The server name must match the name on the server certificate.