C-Sharp - Selbst Signierte Zertifikate prüfen
Hallo zusammen,
ich beschäftige mich gerade mit Zertifikaten, da ich Dateien gerne verschlüsselt von einem FTP holen möchte.
Mir ist klar, dass ich das Zertifikat beim Client zu den erlaubten Zertifikate hinzufügen könnte. Da ich aber ohne Adminrechte auskommen möchte, würde ich es gerne selbst prüfen.
Ich habe mir überlegt, das Zertifikat mit abzulegen und den Hash des Zertifikats vom Server sowie des abgelegten zu überprüfen:
Das würde jetzt auch funktionieren...
Aber ich glaube ich habe hier einen Denkfehler. Das Zertifikat wird vom Server ja an jeden geschickt, also könnte sich ein Angreifer (Man-in-the-Middle) sich das Zertifikat einfach kopieren.
Was wäre den der richtige weg das zu validieren?
Vielen Dank!
ich beschäftige mich gerade mit Zertifikaten, da ich Dateien gerne verschlüsselt von einem FTP holen möchte.
Mir ist klar, dass ich das Zertifikat beim Client zu den erlaubten Zertifikate hinzufügen könnte. Da ich aber ohne Adminrechte auskommen möchte, würde ich es gerne selbst prüfen.
Ich habe mir überlegt, das Zertifikat mit abzulegen und den Hash des Zertifikats vom Server sowie des abgelegten zu überprüfen:
public bool myCertificateValidation(Object sender,
X509Certificate cert,
X509Chain chain,
SslPolicyErrors Errors)
{
bool bRet = false;
var pem = System.IO.File.ReadAllText("c:\temp\cert.crt");
byte certBuffer = GetBytesFromPEM(pem, "CERTIFICATE");
var certificate = new X509Certificate2(certBuffer);
if (certificate.GetCertHashString().Equals(cert.GetCertHashString()))
{
bRet = true;
}
return bRet;
}
Das würde jetzt auch funktionieren...
Aber ich glaube ich habe hier einen Denkfehler. Das Zertifikat wird vom Server ja an jeden geschickt, also könnte sich ein Angreifer (Man-in-the-Middle) sich das Zertifikat einfach kopieren.
Was wäre den der richtige weg das zu validieren?
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 365893
Url: https://administrator.de/forum/c-sharp-selbst-signierte-zertifikate-pruefen-365893.html
Ausgedruckt am: 28.04.2025 um 08:04 Uhr
8 Kommentare
Neuester Kommentar

Aber ich glaube ich habe hier einen Denkfehler. Das Zertifikat wird vom Server ja an jeden geschickt, also könnte sich ein Angreifer (Man-in-the-Middle) sich das Zertifikat einfach kopieren.
Jepp, Denkfehler. Ein Zertifikat hat immer zwei Teile, einen öffentlichen Part (crt) und einen privaten Teil (key). Ohne den privaten Key kann niemand etwas mit dem crt anfangen.https://stackoverflow.com/questions/8908206/how-to-check-if-private-publ ...
https://blogs.msdn.microsoft.com/alejacma/2008/06/25/how-to-sign-and-ver ...
Verifying that a Private Key Matches a Certificate
Gruß Snap

Zitat von @leon123:
Ich habe im Filezilla ein eigenes Zertifikat erstellt und habe das ein .crt erhalten.
Ja das schon, aber im Hintergrund hat Filezilla auch seinen privaten Schlüssel dafür, und ohne den kann jemand anderes dein Cert nicht verwenden da ihm der private Schlüssel dazu fehlt.Ich habe im Filezilla ein eigenes Zertifikat erstellt und habe das ein .crt erhalten.
Wenn ich mich am Server anmelde schickt mir der Server das .crt. Wie kann ich jetzt sicherstellen, dass es auch der Server ist?
Ist oben verlinkt.Hier nochmal
https://stackoverflow.com/questions/22076184/how-to-validate-a-certifica ...

Doch, gehen hier einwandfrei.
Public und Private Key lassen sich auch schnell mit openssl trennen.
Wenn du sowas unvschlüsselt im Klartext ohne P12 oder PFX Container verschickst ist das natürlich unsicher hoch drei
.
Ich glaube du solltest die Grundlagen besser nochmal 2 3 mal durchlesen.
Kannst du bitte noch ein bisschen ausholen. Ich checke die Zertifikate Geschichte einfach immer noch nicht. Ich habe mir heute morgen schon einiges angesehen und das Grundkonzept sollte ich eigentlich verstanden haben (hat man ja auch irgendwann in der schule gelernt) aber wenn ich es jetzt praktisch anwenden will, tu ich mir verdammt schwer.
Ich habe jetzt ein certificat.crt vom Filezilla erhalten.
Schau da mal rein ob dort ein private Key enthalten ist.Ich habe jetzt ein certificat.crt vom Filezilla erhalten.
Das habe ich auf den Client kopiert.
(Komischerweise kann ich das auch nicht installieren. Windows sagt mir ungültiges Sicherheitszertifikat und in der mmc Konsole kennt Windows den Dateityp nicht.)
Dann ist das ein PEM mit öffentlichem und privatem Key. Windows erwartet hier PFX oder P12 Container.(Komischerweise kann ich das auch nicht installieren. Windows sagt mir ungültiges Sicherheitszertifikat und in der mmc Konsole kennt Windows den Dateityp nicht.)
Public und Private Key lassen sich auch schnell mit openssl trennen.
Wenn du sowas unvschlüsselt im Klartext ohne P12 oder PFX Container verschickst ist das natürlich unsicher hoch drei
Wenn ich mich jetzt zum Server Verbinde, schickt dieser mir das Zertifikat. Ich habe ja keinen privaten Key, das wäre ja fatal.
Den private Key bleibt ja auch am Server!Ich glaube du solltest die Grundlagen besser nochmal 2 3 mal durchlesen.

Also nochmal:
Der Server verschlüsselt mit seinem privaten Schlüssel und seinem öffentlichen Schlüssel die Nachrichten.
Um nun festzustellen das die Nachrichten tatsächlich von deinem Server kommen erstellst du einen Hash über den modulus des öffentlichen Teils des Zertifikats und den Hash über deinen modulus des geheimen privaten Schlüssel mit sha256, sind beide Hashes identisch kannst du sicher sein das es dein Server ist.
Gibts überall
https://www.sslshopper.com/certificate-key-matcher.html
Du verwechselst hier Signatur und Verschlüsselung.
Viel Erfolg i'm out.
Der Server verschlüsselt mit seinem privaten Schlüssel und seinem öffentlichen Schlüssel die Nachrichten.
Um nun festzustellen das die Nachrichten tatsächlich von deinem Server kommen erstellst du einen Hash über den modulus des öffentlichen Teils des Zertifikats und den Hash über deinen modulus des geheimen privaten Schlüssel mit sha256, sind beide Hashes identisch kannst du sicher sein das es dein Server ist.
Gibts überall
https://www.sslshopper.com/certificate-key-matcher.html
Du verwechselst hier Signatur und Verschlüsselung.
Viel Erfolg i'm out.