{"id":1915,"date":"2017-11-26T16:10:38","date_gmt":"2017-11-26T15:10:38","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=1915"},"modified":"2017-11-26T16:10:38","modified_gmt":"2017-11-26T15:10:38","slug":"zertifikatsanfrage-csr-mit-openssl-erstellen","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/zertifikatsanfrage-csr-mit-openssl-erstellen\/","title":{"rendered":"Zertifikatsanfrage (CSR) mit OpenSSL erstellen"},"content":{"rendered":"<p>Dieses Tutorial beschreibt, wie eine Zertifikatsanfrage (engl. <a href=\"https:\/\/de.wikipedia.org\/wiki\/Certificate_Signing_Request\" target=\"_blank\" rel=\"noopener\">Certificate Signing Request, kurz CSR<\/a>) erstellt werden kann. Dabei wird die Erstellung von Anfragen f\u00fcr Zertifikate mit einem und mehreren enthaltenen Hostnamen behandelt. Die nach diesem Tutorial erstellten Zertifikatsanfragen k\u00f6nnen dann genutzt werden, um sie an eine <a href=\"https:\/\/de.wikipedia.org\/wiki\/Zertifizierungsstelle\" target=\"_blank\" rel=\"noopener\">Zertifizierungsstelle<\/a> (engl. Certificate Authority, kurz CA) zu \u00fcbermitteln.<\/p>\n<p>Voraussetzung, um diesem Tutorial zu folgen, ist eine funktionsf\u00e4hige Installation von <a href=\"https:\/\/www.openssl.org\/\" target=\"_blank\" rel=\"noopener\">OpenSSL<\/a>. Die Installation von OpenSSL ist nicht Gegenstand dieses Tutorials.<\/p>\n<p>Die folgende Tabelle gibt Auskunft \u00fcber die Konfigurationen, mit denen dieses Tutorial getestet wurde.<\/p>\n\n<table id=\"tablepress-8\" class=\"tablepress tablepress-id-8\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Betriebssystem<\/th><th class=\"column-2\">OpenSSL Version<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">Ubuntu 16.04 LTS<\/td><td class=\"column-2\">OpenSSL 1.0.2g<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">CentOS\/RHEL 7<\/td><td class=\"column-2\">OpenSSL 1.0.2k-fips<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">Fedora 26<\/td><td class=\"column-2\">OpenSSL 1.1.0f-fips<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-8 from cache -->\n<h2 id=\"key-and-csr-in-one-step\">Keyfile und CSR in einem Schritt erstellen<\/h2>\n<p>Die Dateien f\u00fcr den privaten Schl\u00fcssel und den CSR k\u00f6nnen auf der Kommandozeile mit dem folgenden Befehl erstellt werden. Dabei werden die ben\u00f6tigten Informationen interaktiv abgefragt.<\/p>\n<pre>\/tmp$ openssl req -newkey rsa:2048 -sha256 -keyout test.key -out test.csr\r\nGenerating a 2048 bit RSA private key\r\n..............................................................................................+++\r\n........................................................................................................................+++\r\nwriting new private key to 'test.key'\r\nEnter PEM pass phrase:\r\nVerifying - Enter PEM pass phrase:\r\n-----\r\nYou are about to be asked to enter information that will be incorporated\r\ninto your certificate request.\r\nWhat you are about to enter is what is called a Distinguished Name or a DN.\r\nThere are quite a few fields but you can leave some blank\r\nFor some fields there will be a default value,\r\nIf you enter '.', the field will be left blank.\r\n-----\r\nCountry Name (2 letter code) [AU]:DE\r\nState or Province Name (full name) [Some-State]:NRW\r\nLocality Name (eg, city) []:.        \r\nOrganization Name (eg, company) [Internet Widgits Pty Ltd]:.\r\nOrganizational Unit Name (eg, section) []:.\r\nCommon Name (e.g. server FQDN or YOUR name) []:test.example.com\r\nEmail Address []:.\r\n\r\nPlease enter the following 'extra' attributes\r\nto be sent with your certificate request\r\nA challenge password []:.\r\nAn optional company name []:.\r\n<\/pre>\n<p>Die einzelnen Argumente des Befehls sind wie folgt zu erkl\u00e4ren:<\/p>\n<p><strong>openssl req<\/strong> ruft das Kommando zur Generierung eines PKCS#10 CSR auf <a href=\"#rfc2986\">[1]<\/a>. Das Argument <strong>-newkey rsa:2048<\/strong> gibt an, dass ein neuer RSA-Key mit einer Schl\u00fcssell\u00e4nge von 2048 Bit generiert werden soll. Dieser Schl\u00fcssel wird anschlie\u00dfend verwendet, um den CSR zu erzeugen. Mit dem Argument <strong>-sha256<\/strong> wird angegeben, dass das beantragte Zertifikat mit dem SHA256-Algorhytmus signiert werden soll. Man beachte, dass dies von der Zertifizierungsstelle \u00fcberschrieben werden kann. Mit <strong>-keyout test.key<\/strong> wird der Dateiname angegeben, unter dem die Private-Key-Datei (test.key) im aktuellen Verzeichnis gespeichert werden soll. Dementsprechend gibt <strong>-out test.csr<\/strong> an, wo die CSR-Datei (test.csr) gespeichert werden soll. Im oben dargestellten Beispiel geschieht dies ebenfalls im aktuellen Verzeichnis.<\/p>\n<p>Das Kommando erzeugt den privaten Schl\u00fcssel und fragt interaktiv nach einer Passphrase, mit welcher die Private-Key-Datei verschl\u00fcsselt wird. Anschlie\u00dfend werden die Informationen abgefragt, welche in den CSR aufgenommen werden sollen. Mit einem &#8222;<code>.<\/code>&#8220; gibt man an, dass der Standardwert aus den eckigen Klammern in den CSR \u00fcbernommen werden soll. Auf die Angabe einer E-Mail-Adresse und eines Challenge-Passworts kann guten Gewissens verzichtet werden, da diese Angaben von den meisten Zertifizierungsstellen ignoriert werden.<\/p>\n<h2 id=\"csr-fuer-mehrere-hostnamen\">CSR f\u00fcr mehrere Hostnamen erstellen<\/h2>\n<p>Um einen CSR f\u00fcr mehrere Hostnamen zu erstellen, bedient man sich am einfachsten einer Konfigurationsdatei. Die im Folgenden verwendete Konfigurationsdatei kann unter <a href=\"#Mein-TLS-Kochbuch\">[2]<\/a> heruntergeladen und unter einem beliebigen Namen (z.B. csr_config.cnf) gespeichert werden. Ausf\u00fchrliche Informationen zum Aufbau der Konfigurationsdatei finden sich in Kapitel 3.3 des unter <a href=\"#Mein-TLS-Kochbuch\">[2]<\/a> verlinkten TLS-Kochbuchs. Beachten Sie, dass hinter dem Parameter <code>subjectAltName<\/code> neben den weiteren Host-\/Domain-Namen auch der <code>commonName<\/code> mit aufgef\u00fchrt werden muss.<\/p>\n<pre>[ req ]\r\ndefault_bits = 2048\r\ndefault_keyfile = test_privatekey.pem\r\ndistinguished_name = req_distinguished_name\r\nencrypt_key = no\r\nprompt = no\r\nstring_mask = nombstr\r\nreq_extensions = v3_req\r\n\r\n[ v3_req ]\r\nbasicConstraints = CA:FALSE\r\nkeyUsage = digitalSignature, keyEncipherment, dataEncipherment\r\nextendedKeyUsage = serverAuth, clientAuth\r\nsubjectAltName = DNS:test.example.com, DNS:*.test.example.com\r\n\r\n[ req_distinguished_name ]\r\ncountryName = DE\r\nstateOrProvinceName = Nordrhein-Westfalen\r\nlocalityName = MeinOrt\r\n0.organizationName = MeineFirma\r\norganizationalUnitName = MeineAbteilung\r\ncommonName = test.example.com\r\n<\/pre>\n<p>Die obige Konfigurationsdatei kann nun genutzt werden, um einen CSR f\u00fcr den Hostnamen <code>test.example.com<\/code> und alle m\u00f6glichen Hostnamen unterhalb der Domain <code>.test.example.com<\/code> zu erstellen:<\/p>\n<pre>\/tmp$ openssl req -batch -sha256 -new -config csr_config.cnf -out test2.csr\r\n<\/pre>\n<p>Mit der Option <strong>-batch<\/strong> wird der interaktive Modus deaktiviert. Die Option <strong>-new<\/strong> gibt an, dass ein neuer CSR generiert werden soll. Dabei wird ein Private-Key nach den Vorgaben in der Konfigurationsdatei, welche mit <strong>-config csr_config.cnf<\/strong> angegeben wird, erzeugt.<\/p>\n<h2>Abschlie\u00dfende Bemerkungen<\/h2>\n<p>Die beiden gezeigten Methoden zur Erzeugung einer Zertifikatsanfrage stellen nur einen kleinen Ausschnitt aus dem gro\u00dfen Werkzeugkasten namens OpenSSL dar. Doch sind sie dazu geeignet, in einfacher Weise einen CSR zu erstellen, den man zur Signatur an eine CA seines Vertrauens senden kann.<\/p>\n<h2 id=\"Quellen-und-Links\">Quellen und weiterf\u00fchrende Links<\/h2>\n<ol>\n<li id=\"rfc2986\"><a href=\"https:\/\/tools.ietf.org\/html\/rfc2986\">PKCS #10: Certification Request Syntax Specification<\/a><\/li>\n<li id=\"Mein-TLS-Kochbuch\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/mein-tls-kochbuch\/\">TLS\/SSL-Kochbuch &#8211; Rezepte f\u00fcr die Verwendung von OpenSSL<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Dieses Tutorial beschreibt, wie eine Zertifikatsanfrage (engl. Certificate Signing Request, kurz CSR) erstellt werden kann. Dabei wird die Erstellung von Anfragen f\u00fcr Zertifikate mit einem und mehreren enthaltenen Hostnamen behandelt. Die nach diesem Tutorial erstellten Zertifikatsanfragen k\u00f6nnen dann genutzt werden, um sie an eine Zertifizierungsstelle (engl. Certificate Authority, kurz CA) zu \u00fcbermitteln. Voraussetzung, um diesem<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/zertifikatsanfrage-csr-mit-openssl-erstellen\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[3],"tags":[475,415,430,305,476,474],"class_list":["post-1915","post","type-post","status-publish","format-standard","hentry","category-tutorials","tag-csr","tag-openssl","tag-osbn","tag-planet","tag-req","tag-zertifikatsanfrage"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=1915"}],"version-history":[{"count":5,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1915\/revisions"}],"predecessor-version":[{"id":1924,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1915\/revisions\/1924"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=1915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=1915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=1915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}