{"id":1601,"date":"2015-09-10T22:49:26","date_gmt":"2015-09-10T20:49:26","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=1601"},"modified":"2017-07-30T00:37:11","modified_gmt":"2017-07-29T22:37:11","slug":"nginx-mit-client-zertifikat-authentifizierung","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=1601","title":{"rendered":"nginx mit Client-Zertifikat-Authentifizierung"},"content":{"rendered":"<p>Wenn man bereits sehr viel mit SSL auf seinem Server macht, kommt man fr\u00fcher oder sp\u00e4ter auch dazu, dass man Client-Zertifikat-Logins f\u00fcr seine Seiten haben m\u00f6chte. Nun bietet Apache hier relativ einfach <\/p>\n<pre lang=\"apache\" escaped=\"false\">SSLOptions +FakeBasicAuth<\/pre>\n<p>nutzen und dann in einer htpasswd-Datei die erlaubten Zertifikate verwalten. F\u00fcr nginx gestaltet sich dies leider etwas aufw\u00e4ndiger, aber im Endeffekt auch nicht viel.<!--more--><\/p>\n<p>Um unter nginx Client-Zertifikatslogins zu erzwingen setzt man f\u00fcr den Server-Block neben den \u00fcblichen Direktiven f\u00fcr SSL zus\u00e4tzlich auch <\/p>\n<pre lang=\"nginx\" escaped=\"true\">ssl_verify_client on;<\/pre>\n<p>Die Authentifizierung erfolgt im n\u00e4chsten Schritt mittels dem Modul auth_request:<\/p>\n<pre lang=\"nginx\" escaped=\"true\">\r\nlocation = \/auth {\r\n    internal;\r\n    auth_request off;\r\n\r\n    if ( $sslauth_clientcert_login_allow = 403 ) {\r\n        return 403 \"\";\r\n    }\r\n\r\n    return 200 \"\";\r\n}\r\n\r\nauth_request \/auth;\r\n<\/pre>\n<p>Diese Art der Konfiguration ist zwar nicht sch\u00f6n, aber selten und tut ihren Zweck. Naja, noch nicht ganz, denn wir m\u00fcssen noch definieren, welche Zertifikate zugelassen werden sollen, in einer Map definieren. Dazu m\u00fcssen wir im Verzeichnis conf.d eine Datei anlegen, die in etwa wie folgt ausschaut:<\/p>\n<pre lang=\"nginx\" escaped=\"true\">\r\nmap \"$ssl_client_fingerprint:$ssl_client_serial:$ssl_client_i_dn:$ssl_client_s_dn\" $sslauth_clientcert_login_allow {\r\n    default    403;\r\n\r\n    \"Fingerprint(LC):Serial(UC):Issuer:Subject\"  200;\r\n}\r\n<\/pre>\n<p>Nun den Server einmal neustarten und siehe da, es geht wie gew\u00fcnscht \ud83d\ude42<\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=1601&amp;md5=f6e7d18c18097a63bc563cb3334fbea6\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Wenn man bereits sehr viel mit SSL auf seinem Server macht, kommt man fr\u00fcher oder sp\u00e4ter auch dazu, dass man Client-Zertifikat-Logins f\u00fcr seine Seiten haben m\u00f6chte. Nun bietet Apache hier relativ einfach SSLOptions +FakeBasicAuth nutzen und dann in einer htpasswd-Datei die erlaubten Zertifikate verwalten. F\u00fcr nginx gestaltet sich dies leider etwas aufw\u00e4ndiger, aber im Endeffekt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[112,344,346,50,237],"class_list":["post-1601","post","type-post","status-publish","format-standard","hentry","category-server","tag-kryptographie","tag-nginx","tag-server","tag-ssl","tag-verschlusslung"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1601"}],"version-history":[{"count":4,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1601\/revisions"}],"predecessor-version":[{"id":1707,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1601\/revisions\/1707"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}