Linux Server Zertifikat erneuern via Commandline - how to?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Hey ho,

so wie ich dich verstehe möchtest du das Zertifikat von Server B herunterladen und dann im CertStore / Truststore ablegen, oder?

Ist das Zertifikat von einer CA unterschrieben? Dann könntest du auch der CA vertrauen und dem Zertifikat würde vertraut werden. Entweder lädst du es per Browser runter und wirfst es mit scp oder einem Editor deiner Wahl hoch (ist ja nur Text). Oder eleganter mittels openssl wie du es bereits probiert hast, pack aber noch eine Umleitung von stdErr nach dev/null dazu, dann verschwinden die Zusatzinfos:

openssl s_client -CApath /etc/ssl/certs -connection host:443 < /dev/null 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > hostname.crt

Ich würde schauen, dass ich die CA Zertifikate in den Truststore werfe, allerdings kommt es darauf an welche Distribution und welche SSL Lib du verwendest. Wenn du einen JavaClient nutzt, musst du diesen vermutlich bei Java hinterlegen, ich erinnere mich dass Java seine Zertifikat selbst verwaltet und nicht von Openssl verwendet.

Eventuell kannst du aber auch bei deinem Javaclient den CApfad angeben, entweder im Framework oder bei der Java Ausführung.

Welches Java, Framework nutzt du denn? Dann kann man ggf. mal nachlesen.

Aber kurz zur Erklärung, der Openssl connect Befehl funktioniert, liefert dir auch das Zertifikat aus und der CA Chain ist trusty? Bei Lets Encrypt zum Beispiel würde es so aussehen:

depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = xyz.tld
verify return:1
DONE

Woher ich das weiß:Berufserfahrung

DrClean 
Fragesteller
 18.08.2023, 07:26

Hallo und vielen lieben Dank - Problem ist, ich habe auf dem System sehr primitive Möglichkeiten. Wurde von meinem Vorgänger eingerichtet und die Dokumentation, du ahnst es, ist 0,0 zu gebrauchen. Was das heisst, ich muss alle von dir oben, zurecht erfragten Dinge selber auch ausfindig machen. Zum Framework. Der Hersteller der SW hat mir bestätigt, dass die das Problem schon bei einem Kunden hatten. Seine Anleitung zur Problemlösung kann ich nicht verwenden, weil er davon ausgeht, dass ich einen Windows Host verwende und da Zertifikate in den bekannten C: Strukturen von Win. herumschiebe. Geht nicht. Ins Framework tauche ich somit erst tiefer ein, wenn ich das mit dem Zert. Import heute nicht hinbekomme.

Danke für den Tipp. also ich führe zuerst den Befehlt oben von dir aus und dann mache ich noch sowas hier, was meinst du?

keytool -import -alias HOST -keystore PFAD ZUM KEYSTORE -file HOST.crt

was ich gestern noch bis spät nicht hinbekommen habe, ist ausfindig zu machen wie der Pfad zum Keystore lautet. Ich hab /etc/ssl/certs angenommen. aber irgendwie kriege ich dann den Error:

keystore error: java.io.FileNotFoundExeption: /etc/ssl/certs (is a directory)

Vielleicht verstehe ich die Befehle auch nicht wirklich, wollen wir die nochmals durchgehen, damit ich einen Sparringpartner habe. musste mir das alles zusammensuchen und bin schon seit Jahren nicht mehr als Sysadmin im Einsatz.

Danke dir vielmals. komm gut in den Freitag...

0
y0l0m4st3r  20.08.2023, 22:47
@DrClean

Hey ho,

ja das typische Problem bei Linux, zu wissen wo die Zertifikate hin müssen. Ubuntu und Debian haben unter /etc/ssl/certs/ eine Ansammlung von Zertifikaten. Wenn du die dort hinterlegst, musst du meine ich mit update-ca-certs noch einmal in den globalen Store kopieren lassen.

https://ubuntu.com/server/docs/security-trust-store

Da steht beschrieben wie es funktioniert. Bei Java sieht es aber glaube ich noch anders aus, da würde ich mal probieren ohne keystore die Datei hinzuzufügen, denn vllt nimmt das Tool den Standardpfad. Du musst auf jeden Fall bei keystore eine Datei angeben, wenn du -keystore verwendest, keinen Ordner (siehe Fehlermeldung).

Aber deswegen fragte ich nach dem Framework oder der Java Version. Vielleicht wirst du darüber schlau, führe java -version oder --version aus und les dich mal ein, wie du bei der jeweiligen Java Version CA Certs hinzufügst. Könnte sein, dass OpenJDK, Oracle JDK und Konsorten es anders handhaben, da bin ich nicht ganz im Thema.

Hoffe ich konnte trotzdem bisschen helfen :)

0
DrClean 
Fragesteller
 21.08.2023, 13:34
@y0l0m4st3r

du hast mir sehr geholfen. der KeyStore ist unter /opt/java/openjdk/lib/security/cacerts

ich habe es dann so hinbekommen:

  1. ins Verzeichnis /usr/local/tomcat/webapp gewechelt
  2. openssl s_client -connect HOST:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > HOST.crt ausführen
  3. which java ausführen
  4. in Folder /opt/java/openjdk/lib/security/ wechseln für check
  5. zurück zu /usr/local/tomcat/webapp
  6. keytool -import -alias "ALIASNAME bei mir gleich HOSTNAME" -keystore /opt/java/openjdk/lib/security/cacerts -file HOST.crt ausführen
  7. Passwort changeit (ist Standard so in Linux) eingeben

=> keine Fehlermeldung bei der Ausführung

Lustig ist;
offenbar ist die Firewall doch Teils zu (aus welchem Grund auch immer) und deswegen geht das Ganze nicht. Versuche diesen Lösungsansatz aktuell noch mit dem Firewallteam. Lustig ist auch; selbst wenn die Firewall nicht das Problem wäre, nach dem Reboot des WebApp wären alle oben erwähnten Einstellungen 1-6 wieder überschrieben. Azure ist so konfiguriert. Offenbar gibt es da in Azure Virtual Server oder Azure DevOps ein Share. Da muss alles konfiguriert werden weil nach jedem Reboot die Einstellungen die auf dem Share (Host / Client) angezogen werden. Und jetzt habe ich das Problem, dass ich den Share nicht finde. Ich liebe es, nach Ressourcenabgängen deren Arbeit zu übernehmen... ;-)

danke dir auf alle Fälle und hoffe, oben beschriebenes hilft dem einen oder anderen. viele Grüsse...

1