In diesem Beispiel will ich aufzeigen, wie man mit wenigen Mitteln einen sicheren Webzugriff von extern mittels Mobile Device Management (MDM) etablieren kann.
Schematischer Aufbau
In diesem Testaufbau wird der externe Zugriff auf einen im sicheren Netzwerk über einen Reverse Proxy rein geroutet. Die Besonderheit hierbei ist, dass der Reverse Proxy den Zugriff nur für Geräte mit einem ausgestellten Client Zertifikat gewährt wird.
Aufbau einer CRL
Falls Zertifikate aus der Kontrolle und somit verloren gehen sollten, sollten diese in in der Certificate Revocation List (CRL) abegelgt werden.
[ ca ]
default_ca = CA_default # the default ca section
[ CA_default ]
dir = /etc/ssl # where everything is kept
database = $dir/index.txt # database index file .
certificate = $dir/certs/ca.pem # the CA certificate
crl = $dir/ca.crl # the current CRL
private_key = $dir/private/ca.key # the private key
default_crl_days = 183 # how long before next CRL
default_md = md5
Ertellung eines CA Zertifikates
In diesem Beispiel werden ein Self Signed Zertifikat und somit eine eigene Certificate Authority (CA) Zertifizierungsstelle generiert.
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.pem
touch/etc/ssl/index.txt
cp ca.pem /etc/ssl/certs/
cp ca.key /etc/ssl/private/
openssl ca -gencrl -config/etc/ssl/crl.config -out ca.crl
cat ca.pem ca. crl > /etc/ssl/certs/ca.pem
You are about to be asked to enter information that will be incorporated
into your certificate request .
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value ,
If you enter ’.’, the field will be left blank .
-----
Country Name (2 letter code ) [AU ]: DE
State or Province Name ( full name ) [Some - State ]: Bayern
Locality Name (eg , city ) []: XXX
Organization Name (eg , company ) [ Internet Widgits Pty Ltd ]: My Own Area
Organizational Unit Name (eg , section ) []: NERD IT
Common Name (eg , YOUR name ) []: raspberry
Email Address []: MAIL@CARLOSMELZER.COM
Erstellen eines Server Zertifikates für den Reverse Proxy
Nach der Generierung einer CA muss für den Reverse Proxy selbst noch ein Serverzertifikat beantragt und die eigene CA signiert werden.
openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request .
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value ,
If you enter ’.’, the field will be left blank .
-----
Country Name (2 letter code ) [AU ]: DE
State or Province Name ( full name ) [Some - State ]: Bayern
Locality Name (eg , city ) []: XXXX
Organization Name (eg , company ) [ Internet Widgits Pty Ltd ]: My Own Area
Organizational Unit Name (eg , section ) []: NERD IT
Common Name (eg , YOUR name ) []: raspberry.outback
Email Address []: MAIL@CARLOSMELZER.COM
Please enter the following ’extra ’ attributes
to be sent with your certificate request
A challenge password []: ****
An optional company name []:
Nun muss das neue Server Zertifikat gegenüber der CA signiert werden.
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey /etc/ssl/private/ca.key -out server.pem -
CAcreateserial -CAserial ca. seq
cp server.pem /etc/ssl/crt/server.crt
cp server.key /etc/ssl/private/server.key
Signature ok
subject =/C=DE/ST=Bayern/L=XXXX/O=My Own Area/OU=NERD IT/CN=raspberry.outback/emailAddress=MAIL@CARLOSMELZER.COM
Getting CA Private Key
Erstellen eines Client Zertifikates
Fur jedes einzelne Device wird ein seperates Client Zertifikat erstellt. Somit wird gewährleistet, dass nach Public-Key-Infrastruktur (PKI) zukunftig der sicherer Zugang gewährleistet werden kann.
openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr
You are about to be asked to enter information that will be incorporated
into your certificate request .
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value ,
If you enter ’.’, the field will be left blank .
-----
Country Name (2 letter code ) [AU ]: DE
State or Province Name ( full name ) [Some - State ]: Bayern
Locality Name (eg , city ) []: XXXX
Organization Name (eg , company ) [ Internet Widgits Pty Ltd ]: My Own Area
Organizational Unit Name (eg , section ) []: NERD IT
Common Name (eg , YOUR name ) []: Carlos Melzer iPad
Email Address []: MAIL@CARLOSMELZER.COM
Please enter the following ’extra ’ attributes
to be sent with your certificate request
A challenge password []: *****
An optional company name []:
Nun muss das generierte Client Zertifikat gegenüber der CA signiert werden:
openssl x509 -req -days 365 -in client.csr -CA /etc/ssl/certs/ca.pem -CAkey /etc/ssl/private/ca.key -out client.pem - CAcreateserial -CAserial ca.seq
Signature ok
subject =/C=DE/ST= Bayern/L=XXXX/O=My Own Area/OU=NERD IT/CN=Carlos Melzer iPad/emailAddress=MAIL@CARLOSMELZER.COM
Getting CA Private Key
openssl pkcs12 -export -inkey client.key -in client.pem -out client.pfx
Enter Export Password: ******
Verifying - Enter Export Password: ******
Anpassung Apache Konfigurationsdatei
Apache benötigt folgende aktivierten Module:
a2enmod ssl
a2enmod rewrite
a2enmod proxy
a2enmod proxy_http
Damit die Reverse Proxy Konfiguration eine Client Zertifikatüberprüfung durchführen kann, sollte bei dem verwendeten virtuellen Host folgende Konfiguration stehen:
< VirtualHost *:443 >
SSLEngine on
SSLCertificateFile /etc/ssl/crt/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
ServerAdmin MAIL@CARLOSMELZER.COM
ServerName Reverse Proxy
DocumentRoot /var/www
SSLVerifyClient require
SSLVerifyDepth 8
SSLCACertificateFile /etc/ssl/certs/ca.pem
RewriteEngine On
ProxyRequests off
<Proxy *>
Order deny , allow
Allow from all
</Proxy >
ProxyPass /pypMyAdmin/ http://192.168.50.1/phpMyAdmin/
ProxyPassReverse /phpMyAdmin/ http://192.168.50.1//phpMyAdmin/
<Directory />
SSLRequireSSL
</ Directory >
</ VirtualHost >