Autor Beitrag
Raven280438
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99



BeitragVerfasst: Mo 30.09.19 14:32 
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:

ausblenden 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
ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 30.09.19 16:56 
So wie ich SslStream and Authentication sowie das Beispiel in SslStream verstehe, mußt du einen passenden Servername (bzw. laut SslStream.AuthenticateAsClient heißt der Parameter targetHost) angeben - eine IP-Adresse anzugeben ist ungültig:
Zitat:
ausblenden C#-Quelltext
1:
// The server name must match the name on the server certificate.