PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Certificate Authority mit "openssl ca": Auslesen der Speicher



inoculator
17.05.21, 11:33
Moin zusammen,

eine CA ist im eigentlichen Sinne zwar keine Serveranwendung, aber ich wusste nicht, wo in diesem Forum das richtig unterzubringen wäre.
Sollte ein Admin das in eine bessere Kategorie verschieben können/wollen, dann bitte ich darum.

Thema:
ich betreibe eine kleine Root CA mit einer untergeordneten Intermediate CA.

Mein aktueller Status:
Ich kann die CAs aufsetzen und Zertifikate für meine Anwendungen (Apache, Dovecot ,etc) austellen.

Was mir aktuell fehlt sind Funktionen, mit denen ich den Speicher der CA auslesen kann.
Aktuelle Problemstellung:
Ein Zertifikat ist ausgelaufen und der Anwender sendet einen neuen Request.
Aktuell kann ich den Request manuell abarbeiten.
Ich möchte mir das ganze etwas automatisieren. Hürde: Das Zertifikat ist für den FQDN schon im Speicher, ich bekomme das aber nur als Fehler gemeldet, wenn ich das Zertifikat ausstellen möchte.
Ich suche einen Befehl, mit dem ich das Zertifikat vorher prüfen kann, ersatzweise ein Kommando, mit dem ich alle aktuellen Zertifikate im Speicher der CA anzeigen lassen kann.
Hier mal ein Beispiel aus der Praxis, um das Problem zu verdeutlichen:

openssl ca -config /var/caintermed/caintermed.cnf -keyfile /var/caintermed/keys/caintermed.key.pem -out /var/caintermed/certs/20210517-110336-[FQDN].horde.cert.pem -in /var/caintermed/requests/20210517-110336-[FQDN].horde.csr.pem
Using configuration from /var/caintermed/caintermed.cnf
Enter pass phrase for /var/caintermed/keys/caintermed.key.pem:
Check that the request matches the signature
Signature ok
ERROR:There is already a certificate for /C=DE/ST=NRW/O=******/OU=privat/CN=[FQDN]/emailAddress=****@****.***
The matching entry has the following details
Type :Valid
Expires on :210314183558Z
Serial Number :1008
File name :unknown
Subject Name :/C=DE/ST=NRW/O=*****/OU=privat/CN=[FQDN]/emailAddress=***@****.***


Mein Ziel (Abstrakt):

CHECK="put any valid option to just check the status in here"
openssl ca ${CHECK} -config /var/caintermed/caintermed.cnf -in /var/caintermed/requests/20210517-110336-[FQDN].horde.csr.pem

Using configuration from /var/caintermed/caintermed.cnf
Enter pass phrase for /var/caintermed/keys/caintermed.key.pem:

The matching entry has the following details
Type :Valid
Expires on :210314183558Z
Serial Number :1008
File name :unknown
Subject Name :/C=DE/ST=NRW/O=*****/OU=privat/CN=[FQDN]/emailAddress=***@****.***


Am Ende möchte ich erreichen, daß ich VOR der Abarbeitung des Requests prüfen kann, ob das Zertifikat im Speicher ist, es gültig und abgelaufen ist.
Wenn ja, dann kann ich die Serial Number auslesen und es zurückziehen, bevor ich das Neue abarbeite.

marce
17.05.21, 12:09
Ich kann's lokal gerade nicht nachbauen / nachstellen, aber https://stackoverflow.com/questions/9496698/how-to-revoke-an-openssl-certificate-when-you-dont-have-the-certificate sieht danach aus, als wären dort alle Tipps enthalten, die Du zur Lösung des Problems brauchst.

inoculator
19.05.21, 11:28
Hi Marce,

der Thread dreht sich um das Zurückziehen der Zertifikate und berührt hier die von mir gefragte Kontrolle leider auch nicht.
Wenn ich den Status des Zertifikates in der Datenbank habe, kann ich ggfls das Zurückziehen auslösen, das ist nicht das Problem.
Ich suche nach einer Lösung, die Zertifikatsdatenbank abzufragen OHNE über eine Fehlerbehandlungsroutine gehen zu müssen.
Momentan scheint das nur über einen umständlichen Loop durch alle Dateien in /var/caintermed/certs zu gehen. Da openssl aber ein recht mächtiges Tool ist, war meine Aufassung, daß es einen solchen Befehl geben muss, zumal beim Abarbeiten des Request ja eine passende Ausgabe kommt -nur halt leider als Chunk in Fehlerform.

marce
19.05.21, 11:33
hm, aber müsste ein existierendes Zert. nicht in der Datenbank (die im Link erwähnte /etc/ssl/index.txt - wo die bei Dir liegt hängt von Deiner Konfiguration ab) stehen und sich da einfach per grep o.ä. auslesen lassen? Spricht - Zeile vorhanden - dann zurückziehen und neu ertellen, wenn nicht vorhanden erstellen?

https://pki-tutorial.readthedocs.io/en/latest/cadb.html