SSL Zertifikat basierte Client Authentifizierung

Mit Hilfe von Client SSL Zertifikaten können Sie Clients anhand eines SSL Zertifikats authentifizieren anstelle z.B. eines Logins oder Kennworts. Es ist möglich, den Public Bereich der Homepage mit z.B. einem PositiveSSL oder RapidSSL Zertifikat an alle Benutzer auszuliefern, und den Administrationsbereich nur Benutzern mit installiertem Client Zertifikat zu erlauben.

SSL certificate based client authentication


Die Zertifikatsdetails sind u.a. mit PHP auslesbar und können z.B. der Unterscheidung verschiedener Benutzer dienen.

Folgend sehen Sie eine Minimalkonfiguration. - Im Test wurde ein RapidSSL Wildcard Zertifikat genutzt, das Client Zertifikat wurde selbst erstellt und ist dem Wildcard Zertifikat abgeleitet.


Einstellungen Apache:

SSLEngine on
SSLCertificateFile /home/frank/ssl/.b-nm.at.crt
SSLCertificateKeyFile /home/frank/ssl/.b-nm.at.key
SSLCertificateChainFile /home/frank/ssl/RapidSSL_CA_bundle.neu.ct.pem
SSLCACertificateFile /home/frank/ssl/.b-nm.at.crt
#SSLVerifyClient require
#SSLVerifyClient optional
SSLVerifyClient optional_no_ca
SSLVerifyDepth 4
SSLOptions +StdEnvVars +ExportCertData

Erstellung des Client Zertifikats:

cp /etc/ssl/openssl.cnf ./openssl-for-signing-csrs.cnf
#countryName_default auf "AT" setzen ...
#http://stackoverflow.com/questions/16659197/how-to-sign-a-clients-csr-with-openssl#16675058
#80,82c80,82
#< countryName = match
#< stateOrProvinceName = match
#< organizationName = match
#---
#> countryName = supplied oder optional
#> stateOrProvinceName = supplied oder optional
#> organizationName = supplied oder optional
mkdir -p demoCA/newcerts
touch demoCA/index.txt
echo 1001 > demoCA/serial
openssl genrsa -out client.key 4096 -sha256
openssl req -new -key client.key -out client.csr
openssl ca -cert .b-nm.at.crt -keyfile .b-nm.at.key -out client.crt -in client.csr -config openssl-for-signing-csrs.cnf
openssl pkcs12 -export -inkey client.key -name "Frank" -in client.crt -certfile .b-nm.at.crt -out client.p12


#PHP: ssltest.php
====================
<pre><?php
        print_r($_SERVER);
?></pre>



Weitere Details: 
https://httpd.apache.org/docs/trunk/da/ssl/ssl_howto.html#accesscontrol
http://www.phpgangsta.de/client-zertifikate-als-sicherer-login-ersatz
http://cweiske.de/tagebuch/ssl-client-certificates.htm


 

War diese Antwort hilfreich?

 Artikel drucken