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
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!"
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?!
Nein, bloß nicht.
Der Private Key sollte nur dem Server bekannt sein. Die Clients brauchen Public Keys.
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!"