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.

Schematischer Aufbau Reverse Proxy mit Client Zertifikate

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 >