BenBE's humble thoughts Thoughts the world doesn't need yet …

10.09.2015

nginx mit Client-Zertifikat-Authentifizierung

Filed under: Server — Schlagwörter: , , , , — BenBE @ 22:49:26

Wenn man bereits sehr viel mit SSL auf seinem Server macht, kommt man früher oder später auch dazu, dass man Client-Zertifikat-Logins für seine Seiten haben möchte. Nun bietet Apache hier relativ einfach

SSLOptions +FakeBasicAuth

nutzen und dann in einer htpasswd-Datei die erlaubten Zertifikate verwalten. Für nginx gestaltet sich dies leider etwas aufwändiger, aber im Endeffekt auch nicht viel.

Um unter nginx Client-Zertifikatslogins zu erzwingen setzt man für den Server-Block neben den üblichen Direktiven für SSL zusätzlich auch

ssl_verify_client on;

Die Authentifizierung erfolgt im nächsten Schritt mittels dem Modul auth_request:

location = /auth {
    internal;
    auth_request off;

    if ( $sslauth_clientcert_login_allow = 403 ) {
        return 403 "";
    }

    return 200 "";
}

auth_request /auth;

Diese Art der Konfiguration ist zwar nicht schön, aber selten und tut ihren Zweck. Naja, noch nicht ganz, denn wir müssen noch definieren, welche Zertifikate zugelassen werden sollen, in einer Map definieren. Dazu müssen wir im Verzeichnis conf.d eine Datei anlegen, die in etwa wie folgt ausschaut:

map "$ssl_client_fingerprint:$ssl_client_serial:$ssl_client_i_dn:$ssl_client_s_dn" $sslauth_clientcert_login_allow {
    default    403;

    "Fingerprint(LC):Serial(UC):Issuer:Subject"  200;
}

Nun den Server einmal neustarten und siehe da, es geht wie gewünscht 🙂

Flattr this!

Keine Kommentare »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress