openSSL Zertifikate verwalten/erstellen

  • Hallo zusammen,

    ich muss lernen via openSSL-Kommndozeile Zertifikate zu erstellen. Mit Windows Tools wie XCA ist das alles kein Problem:
    - Root-Zertifikat + Root-Key erstellen
    - Client-Zertifikat + Key erstellen und es mit dem Root-Zertifikat signieren

    Auf Kommandozeile scheint man für diese beiden klicks in dem Tool aber mehr machen zu müssen, und dann blicke ich nicht mehr durch.

    Wozu brauche ich diese Request?!

    Ich mache folgendes:

    Bash
    openssl genrsa -out rootCA.key 2048
    openssl req -new -key rootCA.key -out rootCA.csr
    openssl x509 -req -days 3650 -in rootCA.csr -signkey rootCA.key -out rootCA.crt
    
    
    openssl genrsa -out client.key 2048
    openssl req -new -key client.key -out client.csr
    openssl x509 -req -days 3650 -in rootCA.csr -signkey rootCA.key -out client.crt
    openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in client.crt -inkey rootCA.key -out client1.p12 -name "client1"

    1. rootCA Key erstellen
    2. rootCA Request erstellen
    3. rootCA Request und Key zu einem Zertifikat packen
    4.
    5. client Key erstellen
    6. client Request erstellen

    und in der Zeile 7. weiß ich nicht genau wie es arbeitet ... ich nahm nach Zeile 3 an, dass Request und Key nun vom rootCA kommen müssen, damit das Zertifikat das raus kommt vom rootCA signiert ist. Scheinbar ist das nicht so. Wenn ich die Zertifikate im XCA importiere erwarte ich die gleiche Darstellung/Anordnung als wenn ich diese im Tool selber erstelle, Sprich 2 Schlüssel, dann das rootCA-Zertifikat oben und das client-Zertifikat eine "Ebene tiefer" unter dem rootCA-Zertifikat.

    8. Hier konvertiere ich in das .p12-Format.

    Kann mir jemand dabei helfen es zu verstehen und Client-Zertifikate von einer CA zu erstellen?

    Grüße Yaerox

    Grüne Hölle

    • Offizieller Beitrag
    Bash
    openssl genrsa -out rootCA.key 2048
    openssl req -new -key rootCA.key -out rootCA.csr
    openssl x509 -req -days 3650 -in rootCA.csr -signkey rootCA.key -out rootCA.crt
    
    
    openssl genrsa -out client.key 2048
    openssl req -new -key client.key -out client.csr
    openssl x509 -req -days 3650 -in rootCA.csr -signkey rootCA.key -out client.crt
    openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in client.crt -inkey rootCA.key -out client1.p12 -name "client1"

    1 Erzeugt den Privaten Schlüssel.
    2 Erzeugt zum Privaten Schlüssel das CSR
    3 Erzeugt den kompletten Key aus privatem Schlüssel und CSR (Selbstsigniert)

    5 Erzeugt den Privaten Schlüssel für den Client
    6 Erzeugt aus dem Key den CSR
    7 Signiert den CSR mit dem RootCA Key, den wir in 3 erzeugt haben
    8 Konvertiert den erzeugten Client Key in ein kombiniertes P12 Format, dass neben dem Client Zertifikat auch das RootCA Zertifikat für die vollständige Zertifikatskette enthält

  • Danke für die Erklärung. Wie es scheint ist das Script von dir zitiert. Ich frage mich dann nur, wo ist der Fehler, bzw. was mache ich falsch? Wie gesagt ist das client-Zertifikat nie vom rootCA signiert.

    Grüße Yaerox

    Grüne Hölle

  • Bei dem neuen Schritt bekomme ich einen Fehler

    Bash
    openssl genrsa -out ca.key 2048
    openssl req -new -x509 -days 1001 -key ca.key -out ca.cer
    
    
    openssl genrsa -out client.key 2048
    openssl req -new -key client.key -out client.csr
    openssl ca -cert ca.cer -in client.csr -keyfile ca.key -days 3650 -out client.cer

    6. Schritt:

    Bash
    # openssl ca -cert ca.cer -in client.csr -keyfile ca.key -days 3650 -out client.cer
    Using configuration from /etc/ssl/openssl.cnf
    I am unable to access the ./demoCA/newcerts directory
    ./demoCA/newcerts: No such file or directory
    #

    Ich habe meine openssl.cnf komplett standard. Auch mit absoluten Pfadangaben kommt dieses Problem...

    Grüße Yaerox

    Grüne Hölle

  • Generate CA key and cert:

    openssl genrsa -out rootCA.key 2048openssl req -x509 -new -key rootCA.key -days 3650 -out rootCA.pem \-subj '/C=AA/ST=AA/L=AA/O=AA Ltd/OU=AA/CN=AA/emailAddress=aa@aa.com'Generate client key and csr:

    openssl genrsa -out client1.key 2048openssl req -new -key client1.key -out client1.csr \-subj '/C=BB/ST=BB/L=BB/O=BB Ltd/OU=BB/CN=BB/emailAddress=bb@bb.com'Generate client cert signed with CA cert:

    openssl x509 -req -days 365 -CA rootCA.pem -CAkey rootCA.key \-CAcreateserial -CAserial serial -in client1.csr -out client1.pemOf course you can set your config file to use right CA files and use the 'openssl ca' tool after that.
    You can verify your certificate like this:

    openssl verify -verbose -CAfile rootCA.pem client1.pem

    So funktioniert es auch bei mir. Jetzt bin ich noch dabei die Einstellungen so anzupassen wie ich denke das sie sein sollten :P

    Ein problem hab ich jedoch noch, wenn ich mit XCA ein rootCA Zertifikat erstelle ist die Unterschrift: selbstsigniert + vertrauenswürdig. Weiß jemand wie ich das via Kommandozeile auch hinbekomme? Derzeit sind die Selbstsigniert und nicht vertrauenswürdig.

    Grüße Yaerox

    Grüne Hölle

    • Offizieller Beitrag

    Vertrauenswürdig wird ein Zertifikat dann, wenn der Rechner das RootCA Zertifikat auch kennt und damit die komplette Zertifikatskette überürpfen kann. Also wäre es vermutlich am leichtesten, das RootCA Zertifikat (ohne sein PrivateKey) auf dem Rechner zu importieren. Das sollte schon helfen.