{"id":963,"date":"2017-03-16T21:03:05","date_gmt":"2017-03-16T20:03:05","guid":{"rendered":"https:\/\/hitco.at\/blog\/?p=963"},"modified":"2017-03-16T21:38:40","modified_gmt":"2017-03-16T20:38:40","slug":"lets-encrypt-csr","status":"publish","type":"post","link":"https:\/\/hitco.at\/blog\/lets-encrypt-csr\/","title":{"rendered":"Let&#8217;s Encrypt Zertifikate erneuern, ohne HPKP, TLSA\/DANE zu beeintr\u00e4chtigen"},"content":{"rendered":"<p>Will man <a href=\"https:\/\/letsencrypt.org\/\">Let&#8217;s Encrypt<\/a>&nbsp;mit Verfahren wie <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Public_Key_Pinning\">HTTP Public Key Pinning (HPKP)<\/a> oder&nbsp;<a href=\"https:\/\/tools.ietf.org\/html\/rfc6698\">DNS-Based Authentication of Named Entities (DANE)<\/a>&nbsp;nutzen, so stellt sich das Problem der sehr kurzlebigen Zertifikate bzw. Schl\u00fcssel-Paare bei Verwendung des <a href=\"https:\/\/certbot.eff.org\/docs\/using.html#certbot-commands\">Erneuerungs-Automatismus der Let&#8217;s Encrypt CertBots<\/a>.<\/p>\n<p>Der Wechsel des RSA-Schl\u00fcsselpaares bedingt ein sehr umsichtiges Vorgehen bei der Nutzung von <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Public_Key_Pinning\">HPKP<\/a>&nbsp;und&nbsp;<a href=\"https:\/\/tools.ietf.org\/html\/rfc6698\">DANE<\/a>. Es w\u00fcrde sich daher anbieten, eine L\u00f6sung zu verwenden, bei der das RSA-Schl\u00fcsselpaar nicht bei jeder Zertifikats-Erneuerung neu generiert sondern beibehalten wird.<\/p>\n<h2>Vorgangsweise<\/h2>\n<ol>\n<li>Existiert bereits ein Zertifikat? Dann existiert auch der Private-Key hierzu bereits &#8211; Vorbereitung somit schon erf\u00fcllt. Falls noch kein Private-Key vorhanden ist, einen solchen generieren:\n<pre style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\">openssl genrsa -out myDomain_privkey.pem 4096<\/span><\/pre>\n<\/li>\n<li>Ein Konfigurationsfile f\u00fcr die Erstellung des Certificate Signing Request (CSR) erstellen:\n<pre><span style=\"color: #0000ff;\">vi myDomain.req.conf<\/span><\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"color: #808080;\">[req]<\/span>\r\n<span style=\"color: #808080;\">distinguished_name = req_distinguished_name<\/span>\r\n<span style=\"color: #808080;\">req_extensions = v3_req<\/span>\r\n<span style=\"color: #808080;\">prompt = no<\/span>\r\n\r\n<span style=\"color: #808080;\">[req_distinguished_name]<\/span>\r\n<span style=\"color: #808080;\">CN = it-security.eu.org<\/span>\r\n\r\n<span style=\"color: #808080;\">[v3_req]<\/span>\r\n<span style=\"color: #808080;\">keyUsage = keyEncipherment, dataEncipherment<\/span>\r\n<span style=\"color: #808080;\">extendedKeyUsage = serverAuth<\/span>\r\n<span style=\"color: #808080;\">subjectAltName = @alt_names<\/span>\r\n\r\n<span style=\"color: #808080;\">[alt_names]<\/span>\r\n<span style=\"color: #808080;\">DNS.1 = it-security.eu.org<\/span>\r\n<span style=\"color: #808080;\">DNS.2 = www.it-security.eu.org<\/span>\r\n<span style=\"color: #808080;\">DNS.3 = demo.it-security.eu.org<\/span>\r\n<\/pre>\n<p>Anzupassen an die eigenen Domains ist der Common-Name (CN) sowie die Subject-Alternative-Names (alt_names).<\/li>\n<li>Einen Certificate Signing Request (CSR) erstellen:\n<pre><span style=\"color: #0000ff;\">openssl req -new -config myDomain.req.conf -key myDomain_privkey.pem&nbsp;-out myDomain.csr<\/span><\/pre>\n<\/li>\n<li>Den erstellen Certificate Signing Request (CSR) begutachten (optional):\n<pre><span style=\"color: #0000ff;\">openssl req -in myDomain.csr -text -noout<\/span><\/pre>\n<\/li>\n<li>Mittels&nbsp;<a href=\"https:\/\/certbot.eff.org\/docs\/using.html#certbot-commands\">Let&#8217;s Encrypt CertBot<\/a>&nbsp;ein neues Zertifikat &#8211; basierend auf dem bestehenden CSR und somit dem bestehenden RSA-Key &#8211; anfordern:\n<pre><span style=\"color: #0000ff;\">letsencrypt certonly --apache --csr myDomain.csr -d it-security.eu.org -d www.it-security.eu.org -d demo.it-security.eu.org<\/span><\/pre>\n<\/li>\n<\/ol>\n<h2>Hinweise:<\/h2>\n<ul>\n<li>F\u00fcr eine Erneuerung des Zertifikates ist zuk\u00fcnftig nur noch Schritt 5 zu wiederholen.<\/li>\n<li>F\u00fcr eine Erweiterung der Subject-Alternative-Names im Zertifikat ist sowohl das Config-File (Schritt 2), als auch die CertBot-Commandline (Schritt 5) anzupassen.<\/li>\n<li>Das Private-Key-File bleibt (solange es nicht neu generiert wird &#8211; siehe Schritt 1) nun fortw\u00e4hrend gleich, somit auch der Public-Key und etwaige TLSA\/DANE-Records sowie HPKP-Header.<\/li>\n<li>Es empfiehlt sich, den RSA-PrivateKey dennoch von Zeit zu Zeit (z.B. j\u00e4hrlich) zu erneuern. Jedenfalls ist der Schl\u00fcssel zu erneuern, wenn der Verdacht auf eine Kompromittierung (Server gehacked, Speichermedium abhanden gekommen, etc&#8230;) vorliegt.<\/li>\n<li>Ein ausf\u00fchrliches Paper zur Nutzung von TLSA\/DANE und HPKP ist in meinem Blog-Eintrag&nbsp;<a href=\"https:\/\/hitco.at\/blog\/sicherer-e-mail-dienste-anbieter-dnssec-dane\/\">Sicherer E-Mail-Dienste-Anbieter (DNSSec &amp; DANE)<\/a>&nbsp;zu finden.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Will man Let&#8217;s Encrypt&nbsp;mit Verfahren wie HTTP Public Key Pinning (HPKP) oder&nbsp;DNS-Based Authentication of Named Entities (DANE)&nbsp;nutzen, so stellt sich das Problem der sehr kurzlebigen Zertifikate bzw. Schl\u00fcssel-Paare bei Verwendung des Erneuerungs-Automatismus der Let&#8217;s Encrypt CertBots. Der Wechsel des RSA-Schl\u00fcsselpaares bedingt ein sehr umsichtiges Vorgehen bei der Nutzung von HPKP&nbsp;und&nbsp;DANE. Es w\u00fcrde sich daher anbieten, eine L\u00f6sung zu verwenden, bei&#8230; <\/p>\n","protected":false},"author":1,"featured_media":972,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[3,4,13],"tags":[163,116,164,162,165],"class_list":["post-963","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it","category-security","category-server","tag-csr","tag-dane","tag-hpkp","tag-lets-encrypt","tag-tlsa"],"_links":{"self":[{"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/posts\/963","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/comments?post=963"}],"version-history":[{"count":13,"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/posts\/963\/revisions"}],"predecessor-version":[{"id":973,"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/posts\/963\/revisions\/973"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/media\/972"}],"wp:attachment":[{"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/media?parent=963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/categories?post=963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hitco.at\/blog\/wp-json\/wp\/v2\/tags?post=963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}