OpenSSL Zertifikat
-
Hallo ich möchte einen SSL Server programmieren. Dazu benötige ich ein Zertifikat und einen entsprechenden Private Key.
Den Private Key habe ich nach folgender Anleitung erstellt (Punkt 2).
http://www.openssl.org/docs/HOWTO/keys.txt
openssl genrsa -out key.pem 1024
Und das Zertifikat nach http://www.openssl.org/docs/HOWTO/certificates.txt Punkt 4 mit
openssl req -new -x509 -key key.pem -out cacert.pem -days 1095
Der Quellcode(C) zum laden von Privatekey und Zertifikat sieht so aus:
SSL_CTX_use_certificate_file(connection.ssl_ctx_server,"cacert.pem",SSL_FILETYPE_PEM); SSL_CTX_use_PrivateKey_file(connection.ssl_ctx_server,"key.pem", SSL_FILETYPE_PEM); if (!SSL_CTX_check_private_key(connection.ssl_ctx_server)) { LOG_MESSAGE("Zertifikat gehört nicht zum geladenen Private Key"); exit(-1); }
Tja leider kommt bei mir dann immer nur die Meldung "Zertifikat gehört nicht zum geladenen Private Key". Wenn da jemanden helfen kann, würde ich mich sehr freuen.
-
Die Keys sind offenbar korrekt, mit
openssl s_server -cert cacert.pem -key privkey.pem -accept 40995
habe ich testweise einen Server gestartet, und mittelnet -z ssl localhost 40995
eine Verbindung aufgebaut. Das hat funktioniert!Nun kann nur noch mein C-Quelltext falsch sein, aber ich weis nicht was, hab hab es jetzt u.a. mit folgenden Funktionen ausprobiert
* SSL_CTX_use_PrivateKey_file
* SSL_CTX_use_RSAPrivateKey_file.
und* SSL_CTX_use_certificate_chain_file
* SSL_CTX_use_certificate_file.Das Ergebnis ist aber immer wieder dasselbe.
Da komme ich einfach nicht weiter ... keiner da der was davon versteht?
-
So jetzt hab ich den Code noch etwas verbessert, und das Prog scheitert schon bei der 1. Bedingung
if (!SSL_CTX_use_certificate_file(connection.ssl_ctx_server,"cacert.crt",SSL_FILETYPE_PEM)) { LOG_MESSAGE("Konnte Zertifikat nicht laden"); exit(-1); } if (!SSL_CTX_use_PrivateKey_file(connection.ssl_ctx_server,"privkey.pem", SSL_FILETYPE_PEM)) { LOG_MESSAGE("Konnte Privatekey nicht laden"); exit(-1); } if (!SSL_CTX_check_private_key(connection.ssl_ctx_server)) { LOG_MESSAGE("Zertifikat gehört nicht zum geladenen Private Key"); exit(-1); }
Und kann das Zertifikat nicht laden, obwohl die Codierung stimmt(ich hab auch die andre probiert), Die Datei sich in dem Verzeichniss befindet. Das selbe Probl mit dem Private Key, wenn ich die Reihenfolge vertausche.
Leserechte sind auch korrekt gesetzt.
-
Ok vergesst es, ich hab den Fehler ... hab vorher mein Arbeitsverzeichniss gewechselt, weil es ein Daemon Prozess werden soll ... so konnte es natürlich nicht funktionieren ...