Laden...

Fehler The server mode SSL must use a certificate with the associated private key bei SslStream.AuthenticateAsServer

Erstellt von Kriz vor einem Jahr Letzter Beitrag vor einem Jahr 1.100 Views
K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor einem Jahr
Fehler The server mode SSL must use a certificate with the associated private key bei SslStream.AuthenticateAsServer

Servus,

ich habe eine *.crt Datei mit Certificate und Private Key Abschnitt.
Dieses lese ich ein mit


X509Certificate2 serverCertificate = X509Certificate2.CreateFromCertFile("Data\\certificate.crt");

Nun möchte ich einen verschlüsselten TCPListener starten, bekomme aber bei


SslStream sslStream = new SslStream(client.GetStream(), false);
sslStream.AuthenticateAsServer(serverCertificate, clientCertificateRequired: true, checkCertificateRevocation: true);

den Fehler > Fehlermeldung:

The server mode SSL must use a certificate with the associated private key

Woran haperts, was hab ich vergessen?

Danke im Vorraus!
Kriz

6.911 Beiträge seit 2009
vor einem Jahr

Hallo Kriz,

bei X509Certificate2.CreateFromCertFile muss hierfür ein Zertifikat mit privatem Schlüssel angegeben werden. Oder der private Schlüssel wird als extra Argument bei dieser Methode angegeben.

Für die Serverseite sind public und private key nötig, andernfalls kann SSL nicht funktionieren.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor einem Jahr

Hallo gfoidl,

erstmal danke für die Antwort!
Das heisst das vorhandene Zertifikat (mit CERTIFICATE und PRIVATE KEY Abschnitt) kann ich als Client-Zertifikat nehmen, aber ist als Server-Zertifikat ungeeignet?!

C
55 Beiträge seit 2020
vor einem Jahr

Nein, bloß nicht.
Der Private Key sollte nur dem Server bekannt sein. Die Clients brauchen Public Keys.

6.911 Beiträge seit 2009
vor einem Jahr

Hallo,

jetzt zeigt sich warume es wichtig mit möglichst genauen Begriffen zu arbeiten 😉

Das heisst das vorhandene Zertifikat (mit CERTIFICATE und PRIVATE KEY Abschnitt) kann ich als Client-Zertifikat nehmen

"Client-Zertifikat" ist hier undeutlich und je nach dem was genau gemeint ist hat ClaraSoft recht od. auch nicht.

In Bezug auf SSL (lässt sich vom Thema ableiten) hat ClaraSoft recht.
Der Server braucht den public und private key damit er "verschlüsseln" kann. Der Client hingegen braucht vom Server nur den public key.
TCPListener ist server-seitig, daher klappte es vermutlich nicht, da kein private key vorhanden ist.

Ist bei "Client-Zertifikat" jedoch der Zusammenhang "Authentifizierung per Client-Zertifikat" (da auch mit SSL / TLS zusammenhängt) so benötigt der Client public + private key, aber seine eigenen! Und nicht jene vom Server.

Grundsätzlich sollten die private Schlüssel (keys) nur auf der Seite bleiben zu der sie gehören -- daher auch "private".
D.h. Client private key kennt der Server nicht und umgekehrt. Alles andere ist absolut unsicher (und fahrlässig).

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"