![]() |
TCPServer/TCPClient SSL Verifizieren
Hi,
ich weiß nicht ob mein Gedankengang falsch ist, aber ich finde weder hier noch bei Google etwas über meine frage. Ich möchte einen TCPServer mit Selbst erstellten Zertifikaten erstellen. Das klappt auch. Ich kann mit einem TCPClient (alles Indy) mit SSL drauf Connecten. Nun zu meiner eigentlichen Frage. Ist es möglich das nur Clients mit dem richtigen Zertifikat Connecten können? Wenn ja, wie geht das? Wenn nicht, dann habe ich falsch gedacht. Es wird natürlich zusätzlich User und Pass erwartet. Wie gesagt, das klappt. Aber ich brauch dem Client gar kein Zertifikat mitgeben und er Conncted fröhlich vor sich hin. Vielen dank im Voraus Nachtrag: Die Zertifikate erstelle ich ![]() |
AW: TCPServer/TCPClient SSL Verifizieren
.. die Abweisung sollte doch auf dem Server erfolgen.
Bei dem TIdServerIOHandlerOpenSsl gibt es das Event onVerifyPeer. Dort kannst Du das Zertifikat auslesen und gegebenenfalls ablehnen. Grüße Klaus |
AW: TCPServer/TCPClient SSL Verifizieren
Hast du da vielleicht einen Link zu einem Beispiel. Ich weiß z.b. auch nicht wie ich den ServerSSLIOHandler einstellen soll. Bei mir läuft er da nicht rein.
Ich habe das beispiel ![]() |
AW: TCPServer/TCPClient SSL Verifizieren
Also,
ich habe es nur soweit das wenn der Client Connected der Server in IdServerIOHandlerSSLOpenSSL1VerifyPeer springt. Aber nun stehe ich wieder auf dem schlauch. Keine ahnung was ich da machen soll. Im moment gebe ich einfach True zurück. Das soll er aber nur zurückgeben wenn es passt. Die sache die in Certificate stehen verstehe ich nicht. Leider. Muss man da nochwas umrechnen? Ist das überhaupt richtig das ich beiden (Client und Server) die gleichen Zertifikate mitgebe? Google bringt mich nicht weiter. Wenn ich die antwort hätte, hätte ich die schon gepostet. |
AW: TCPServer/TCPClient SSL Verifizieren
im onVerifyPeer gibt es doch den Parameter Certificate diese hat das Property FingerprintAsString
das könntest Du doch mit dem Fingerprint des Client Certifcate vergleichen. |
AW: TCPServer/TCPClient SSL Verifizieren
Hi,
erstmal danke das mir helfen möchtest. Dort Certificate.FingerprintAsString ist er als String drin. Aber ich habe vom Client keinen Fingerprint damit ich vergleichen könnte. Ich frage einfach mal, hast du keine Batch oder link zu einer Batch (kann auch Unix sein) um die Zertifikate zu erstellen? Ich komme so einfach nicht weiter. Man findet aber auch kein Beispiel im Netz. Bin ich denn der einzige der das machen möchte? Würde mich wundern. Es würde um Server Zertifikat und Client Zertifikat gehen. Ich weiß nicht ob es die gleichen sind. |
AW: TCPServer/TCPClient SSL Verifizieren
Zitat:
Das Client-Zertifikat muss man dem Client immer bereitstellen, denn dieser muss es beim Verbindungsaufbau dem Server vorweisen. Es kann so die Anmeldung mit Benutzer/Passwort ersetzen. |
AW: TCPServer/TCPClient SSL Verifizieren
Zitat:
Daher einfach das Client-Zertifikat im Explorer öffnen. Alternativ: ![]() (das setzt jedoch voraus, dass das Zertifikat im Zertifikatsspeicher abgelegt wurde) |
AW: TCPServer/TCPClient SSL Verifizieren
Hi,
die frage ist immernoch wie erstelle ich Server und Client Zertifikat. Klar, mit openssl, aber mit welchen Parametern? Sorry wenn ich dumm fragen muss. Aber das ist das erstmal das ich einen Client Verifizieren möchte. |
AW: TCPServer/TCPClient SSL Verifizieren
vom Format sind die Client- und ServerZertifikate gleich.
Erstellen kannst Du sie mit openssl.
Delphi-Quellcode:
cmdParameter := format('req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout %s -out %s '+
'-subj "/C=DE/L=%s/O=%s/CN=%s" '+ '-config "%s"',[certFolder+keyFileName, certFolder+certFileName, '.', '.', '.'), openSslConfFile]); end; errorCode := shellExecute(0, 'open', pChar(openSslFolder+'openSSL.exe'), pchar(cmdParameter), nil, SW_Hide); Grüße Klaus |
AW: TCPServer/TCPClient SSL Verifizieren
Hallo Klaus01,
erstmal vielen dank für deine Hilfe. Allerdings bleiben noch ein paar fragen. Da kommen 2 Dateien raus. Ein PrivatKey und ein Zertifikat. Laut dieser ![]() Nochmal zum verständniss. In den Verify gibt es ein AOk. Das soll True sein wenn die Schlüssel passen (falls ich das richtig verstanden habe). Das AOk kann man als Result zurückgeben. Ich habe mich mal zum Testen beim Server ( ![]() Dann noch etwas. Der IdSSLIOHandlerSocketOpenSSL möchte das Cert, Key und RootFile haben. Ist das nicht blödsinn die alle mit auszuliefern? |
AW: TCPServer/TCPClient SSL Verifizieren
Du möchtest doch prüfen, ob die Clients sich verbinden dürfen - wie möchtest Du es machen, wenn Du denen kein Zertifikat mitgibts das Du kennst?
Die Clients müssen nicht zwingend das gleiche Zertifikat wie der Server haben. Ich würde den Clients eigene spendieren. Oder eines für alle Clients. Bisher habe ich immer nur das cert und das key File benötigt. Grüße Klaus |
AW: TCPServer/TCPClient SSL Verifizieren
Danke für die Info. Ich probiere es mal.
Nachtrag: Wo trägst du die Dateien ein? |
AW: TCPServer/TCPClient SSL Verifizieren
.. kannst Du user spezifisch ablegen oder in ProgramData\Deine Software\certificates
|
AW: TCPServer/TCPClient SSL Verifizieren
Nein, da habe ich mich falsch ausgedrückt.
Ich meinte IdServerIOHandlerSSLOpenSSL1.SSLOptions.CertFile IdServerIOHandlerSSLOpenSSL1.SSLOptions.KeyFile IdServerIOHandlerSSLOpenSSL1.SSLOptions.RootCert Das gleich beim Client. Welche Datei wo rein? Sorry wenn ich etwas unbeholfen bin. |
AW: TCPServer/TCPClient SSL Verifizieren
ja, in certFile und keyFile
|
AW: TCPServer/TCPClient SSL Verifizieren
Hi Klaus01,
ich habe nun selber nochmal gesucht. Aber du scheinst der einzige zu sein der mir helfen kann. Damit ich keinen Fehler bekomme müsste ich den Privatkey ja mit ausliefern. Davon raten alle ab. Ist auch verständlich, weil wenn man die beiden Keys hat kann man sich mit einem anderen Client einloggen. Oder habe ich mal wieder was falsch verstanden. Wenn ja dann tut es mir leid. Aber ich kann mich im moment sehr schlecht konzentrieren. Ich habe cert und key in beide reingemacht (Server und Client) und dann kann ich Connecten. Was mich trotzdem wundert ist, das 2x durch den Verify läuft. Das erstemal mit False und direkt danach mit True. Ich hoffe du kannst mir nochmal helfen. Schonmal danke im Voraus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz