{"id":8310,"date":"2022-01-14T14:16:29","date_gmt":"2022-01-14T12:16:29","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=8310"},"modified":"2022-01-14T14:16:30","modified_gmt":"2022-01-14T12:16:30","slug":"neues-https-ssl-zertifikat-in-ibm-http-server-fuer-hcl-connections-einpflegen","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/neues-https-ssl-zertifikat-in-ibm-http-server-fuer-hcl-connections-einpflegen\/","title":{"rendered":"Neues HTTPS\/SSL Zertifikat in IBM HTTP Server f\u00fcr HCL Connections einpflegen"},"content":{"rendered":"<p>Dieser Artikel beschreibt, wie man ein neues SSL-Zertifikat in die Schl\u00fcsseldatenbank des IBM HTTP Servers (IHS) einspielt. Ich gehe davon aus, dass sowohl Zertifikat als auch privater Schl\u00fcssel vorliegen. Es wird kein selbst signiertes Zertifikat \u00fcber den IHS erstellt. Das ist zwar auch m\u00f6glich, aber auf diesem Weg liegt der komplette Prozess bei den Tools f\u00fcr den Keystore. <\/p>\n<p>In diesem Szenario soll das Zertifikat also au\u00dferhalb von den IHS-Werkzeugen erstellt werden. Man kann nat\u00fcrlich trotzdem mit z.B. OpenSSL ein selbst signiertes Zertifikat erstellen, wenn dies ben\u00f6tigt wird &#8211; etwa f\u00fcr Testsysteme.<\/p>\n<h2 class=\"wp-block-heading\">Zertifikat + Schl\u00fcssel in ein unterst\u00fctztes Format umwandeln (z.B. P12)<\/h2>\n<p>Der IHS nutzt eine eigene Datenbank, in der mehrere Zertifikate zusammen mit ihren privaten Schl\u00fcsseln gespeichert werden. Man kann dort nicht direkt das Zertifikat mit dem privaten Schl\u00fcssel setzen, wie man es von anderen Webservern wie z.B. Nginx her kennt. Stattdessen ben\u00f6tigen wir ein Format, welches beides in einer Datei zusammenf\u00fchrt,  etwa P12. Mithilfe von OpenSSL kann man Zertifikat + privaten Schl\u00fcssel umwandeln:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nopenssl pkcs12 -export -inkey private.key -in cert.crt -name mein-zertifikat -out openssl-bundle.p12\n<\/pre>\n<\/div>\n<p>Der mit<strong> -name<\/strong> angegebene Bezeichner wird sp\u00e4ter im IHS Schl\u00fcsselmanager verwendet, um das Zertifikat zuzuordnen. <strong>Wichtig: An dieser Stelle unbedingt ein Passwort vergeben!<\/strong> Leere Passw\u00f6rter (= nur Enter dr\u00fccken) sind zwar g\u00fcltig und werden von OpenSSL akzeptiert. Allerdings funktioniert der anschlie\u00dfende Import in den IHS-Store nur, wenn ein Passwort gesetzt wurde.<\/p>\n<h2 class=\"wp-block-heading\">Ein Zertifikatsbundle (P12) zum IHS Keystore hinzuf\u00fcgen<\/h2>\n<p>Um das soeben erstellte P12-Zertifikat in den Keystore des IHS zu importieren, ben\u00f6tigen wir gskcapicmd. Das Werkzeug ist standardm\u00e4\u00dfig im <strong>bin<\/strong> Ordner vorhanden. Bevor wir mit dem Store arbeiten, macht es grunds\u00e4tzlich Sinn, eine Sicherungskopie von Ihm zu erstellen. In diesem Beispiel hei\u00dft er<strong> ihs-key<\/strong>. Ich w\u00fcrde daher einen Backup-Ordner anlegen und <strong>ihs-key.*<\/strong> dort hin kopieren.<\/p>\n<p>Anschlie\u00dfend das Zertifikatspaket importieren:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n\/opt\/IBM\/HTTPServer\/bin\/gskcapicmd -cert -import -db openssl-bundle.p12 -pw &quot;OpenSSLP12PW&quot; -target ihs-key.kdb -target_pw &quot;KdbPasswort&quot;\n<\/pre>\n<\/div>\n<p><strong>-pw<\/strong> gibt das soeben per OpenSSL festgelegte Passwort f\u00fcr die P12-Datei an, <strong>-target_pw <\/strong>ist das Passwort vom IHS-Schl\u00fcsselspeicher. Man kann beide Parameter auch weglassen, damit die Passw\u00f6rter nicht in der Bash-History stehen. Das Programm fragt euch dann interaktiv nach den Kennw\u00f6rtern.<\/p>\n<h2 class=\"wp-block-heading\">Vorhandene Zertifikate pr\u00fcfen<\/h2>\n<p>Mit dem Parameter -list l\u00e4sst sich pr\u00fcfen, ob das neue Zertifikat hinzugef\u00fcgt wurde. Und noch wichtiger: Welches Zertifikat als Standard gesetzt ist. Man kann in einem Store mehrere Zertifikate hinterlegen, allerdings wird das Standard-Zertifikat verwendet. Wenn das beispielsweise abl\u00e4uft, macht es Sinn, das neue, hinzugef\u00fcgte als Standard zu setzen.<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n\/opt\/IBM\/HTTPServer\/bin\/gskcapicmd -cert -list -db ihs-key.kdb -pw &quot;KdbPasswort&quot; -expiry 1000\n...\n-       altes_zertifikat\n          Not Before : August 18, 2016 2:00:00 AM GMT+02:00\n          Not After : November 17, 2018 12:59:59 AM GMT+01:00\n*-      aktuelles_zertifikat\n          Not Before : December 16, 2020 1:00:00 AM GMT+01:00\n          Not After : January 17, 2022 12:59:59 AM GMT+01:00\n-       neues_zertifikat\n          Not Before : December 20, 2021 1:00:00 AM GMT+01:00\n          Not After : January 19, 2023 12:59:59 AM GMT+01:00\n<\/pre>\n<\/div>\n<p>Das derzeitige Standard-Zertifikat l\u00e4sst sich am * links erkennen, in diesem Beispiel hei\u00dft es <strong>aktuelles_zertifikat<\/strong>.<\/p>\n<h2 class=\"wp-block-heading\">Standardzertifikat setzen<\/h2>\n<p>Um das Standard-Zertifikat auf das neu hinzugef\u00fcgte (hier mit der Bezeichnung <strong>neues_zertifikat<\/strong>) zu setzen, kann <strong>-setdefault<\/strong> genutzt werden:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n\/opt\/IBM\/HTTPServer\/bin\/gskcapicmd -cert -setdefault -db ihs-key.kdb -pw &quot;KdbPasswort&quot; -label &quot;neues_zertifikat&quot;\n<\/pre>\n<\/div>\n<h2 class=\"wp-block-heading\">(Alte), nicht mehr ben\u00f6tigte Zertifikate l\u00f6schen<\/h2>\n<p>Im obigen Beispiel besteht der Store aus drei Zertifikaten. Das oberste ist bereits 2018 abgelaufen und k\u00f6nnte daher bereinigt werden:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n\/opt\/IBM\/HTTPServer\/bin\/gskcapicmd -cert -delete -db ihs-key.kdb -pw &quot;KdbPasswort&quot; -label &quot;altes_zertifikat&quot;\n<\/pre>\n<\/div>\n<h2 class=\"wp-block-heading\">So werden \u00c4nderungen im Keystore wirksam<\/h2>\n<p>Die \u00c4nderungen werden nicht sofort wirksam, sondern man muss den IHS neu starten. Leider blockiert <\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n\/opt\/IBM\/HTTPServer\/bin\/apachectl -k stop\n# Warten, bis der IHS gestoppt wurde.\n# Man kann den Befehl zum stoppen mehrfach aufrufen, bis \n# &quot;httpd (no pid file) not running&quot; erscheint\n\n\/opt\/IBM\/HTTPServer\/bin\/apachectl -k start\n<\/pre>\n<\/div>\n<h2 class=\"wp-block-heading\">Wird das neue Zertifikat ausgeliefert?<\/h2>\n<p>Abschlie\u00dfend macht es Sinn zu testen, ob das neue Zertifikat auch tats\u00e4chlich ausgeliefert wird. Gerade in Unternehmensnetzwerken sitzt ggf. ein Reverse-Proxy davor, wenn das System z.B. nach au\u00dfen ins Internet erreichbar sein soll und es daf\u00fcr einen Proxy-Server in der DMZ gibt. Dies kann etwa im Browser getestet werden. Gerade wenn Proxy-Server im Spiel sind, ist OpenSSL hilfreich. So kann man auch (lokale) Server anfragen und damit leichter herausfinden, welcher Server bereits das neue Zertifikat ausliefert und wo noch das alte liegt:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ echo | openssl s_client -servername localhost -connect localhost:443 | openssl x509 -noout -dates\ndepth=3 C = GB, ST = Greater Manchester, L = Salford, O = Comodo CA Limited, CN = AAA Certificate Services\nverify return:1\ndepth=2 C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority\nverify return:1\ndepth=1 C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA\nverify return:1\ndepth=0 CN = dein-cnx-host.de\nverify return:1\nDONE\nnotBefore=Dec 20 00:00:00 2021 GMT\nnotAfter=Jan 18 23:59:59 2023 GMT\n<\/pre>\n<\/div>\n<p>Die Zertifikatskette ist dabei ebenfalls ersichtlich. Falls die nicht korrekt ist, erhaltet ihr Fehler wie <em>&#8222;verify error:num=21:unable to verify the first certificate&#8220;<\/em>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Artikel beschreibt, wie man ein neues SSL-Zertifikat in die Schl\u00fcsseldatenbank des IBM HTTP Servers (IHS) einspielt. Ich gehe davon aus, dass sowohl Zertifikat als auch privater Schl\u00fcssel vorliegen. Es wird kein selbst signiertes Zertifikat \u00fcber den IHS erstellt. Das ist zwar auch m\u00f6glich, aber auf diesem Weg liegt der komplette Prozess bei den Tools &#8230;<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[765],"tags":[946,795,1011,1012],"class_list":["post-8310","post","type-post","status-publish","format-standard","hentry","category-hcl-connections","tag-ibm-http-server","tag-ihs","tag-ssl","tag-tls"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=8310"}],"version-history":[{"count":2,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8310\/revisions"}],"predecessor-version":[{"id":8312,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/8310\/revisions\/8312"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=8310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=8310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=8310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}