Inhaltsverzeichnis

Todo: https://ssl-config.mozilla.org/ benutzen

Todo: https://weakdh.org/sysadmin.html cipher list intregrieren 1)

TODO: Let's encrypt von Apache selber machen lassen: https://httpd.apache.org/docs/2.4/mod/mod_md.html

SSL / TLS für Apache

Vorraussetzungen

CAA Record

Falls auf der Domain CAA Einträge hinterlegt sind, entweder die aktuelle CA ergänzen oder die Einträge entfernen:

dig CAA linuxhotel.de @141.1.1.1

für Wildcard Zertifikate:

example.com. 0 IN CAA 0 issue "cacert.org"
example.com. 0 IN CAA 0 issuewild "cacert.org"
example.com. 0 IN CAA 0 issue "letsencrypt.org"
example.com. 0 IN CAA 0 issuewild "letsencrypt.org"

Zertifikate, Anträge und Schlüssel an die passenden Stellen kopieren

Debian (ab 8.0)

cd /etc/ssl
cp /root/server-ssl/servercert.pem certs/
cp /root/server-ssl/serverkey.pem  private/
cp /home/ca/ca*/cacert.pem  certs/
cp /home/ca/ca*/cacert.pem /var/www/html/cacert.crt

SuSE (12.3)

cd /etc/apache2

2)

cp /root/server-ssl/servercert.pem  ssl.crt/server.crt
cp /root/server-ssl/serverkey.pem   ssl.key/server.key
cp /home/ca/ca*/cacert.pem ssl.crt/ca.crt
cp /home/ca/ca*/cacert.pem /srv/www/htdocs/cacert.crt

Centos 5

cd /etc/pki/tls
cp /root/server-ssl/servercert.pem certs/server.crt
cp /root/server-ssl/serverkey.pem  private/server.key

mit OpenSSL s_server testen

cd /etc/ssl
sudo -u www-data -g ssl openssl s_server -cert certs/servercert.pem -key private/serverkey.pem -www
firefox https://localhost:4433
sudo -u www-data -g ssl openssl s_server -cert certs/servercert.pem -key private/serverkey.pem -WWW
firefox https://localhost:4433/certs/cacert.pem

TODO: noch nicht getestet:

sslscan notebook05.linuxhotel.de
testssl.sh  notebook05.linuxhotel.de

Sicherheit überwachen lassen: https://siwecos.de/

Apache konfigurieren

SuSE

cd /etc/apache2/vhosts.d/
cp vhost-ssl.template notebook07.linuxhotel.de-ssl.conf

/etc/apache2/vhosts.d/notebook07.linuxhotel.de-ssl.conf : ( openSuSE 13.2 )

<VirtualHost _default_:443>
        DocumentRoot "/srv/www/htdocs"
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl.crt/server.crt
        SSLCertificateKeyFile /etc/apache2/ssl.key/server.key
        SSLCaCertificateFile  /etc/apache2/ssl.crt/ca.crt
        SSLOpenSSLConfCmd DHParameters /etc/ssl/dhparams.pem
</VirtualHost>

SSL Modul aktivieren: ( openSuSE 10.2 )

a2enmod ssl

Für SSLSessionCache (openSuSE 13.1)

a2enmod mod_socache_shmcb

SSL Flag aktivieren: ( SuSE open10.2 )

a2enflag SSL

Konfiguration prüfen:

apache2ctl configtest
httpd2 -S

Dienst neu starten:

/etc/init.d/apache2 restart

Debian (ab 4.0)

cd /etc/apache2/

/etc/apache2/ports.conf : ( Debian 4.0 - 7 )

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    NameVirtualHost *:443
    Listen 443
</IfModule>

/etc/apache2/ports.conf : ( Debian 8.0 )

Listen 80

<IfModule ssl_module>
	Listen 443
</IfModule>

/etc/apache2/sites-available/default-ssl.conf : ( Debian 8.0 )

<VirtualHost _default_:443>
…
        SSLEngine on
…
        SSLCertificateFile    /etc/ssl/certs/servercert.pem
…
        SSLCertificateKeyFile /etc/ssl/private/serverkey.pem
…
        SSLCaCertificateFile  /etc/ssl/ssl.crt/ca.crt
…        
        #Die folgende Zeile geht erst ab apache 2.4.8 und openssl 1.0.2:
        #SSLOpenSSLConfCmd DHParameters /etc/ssl/dhparams.pem

</VirtualHost>

SSL Modul aktivieren:

a2enmod ssl

SSL Konfiguration aktivieren:

a2ensite default-ssl

Konfiguration prüfen:

apache2ctl configtest
apache2ctl -S

Dienst neu starten:

service apache2 restart

CentOS 5

yum install mod_ssl

/etc/httpd/conf.d/ssl.conf :

SSLCertificateFile    /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
SSLCaCertificateFile  /etc/ssl/ssl.crt/ca.crt
SSLOpenSSLConfCmd DHParameters /etc/ssl/dhparams.pem
/etc/init.d/httpd restart

Konfiguration prüfen

apachectl configtest
apachectl -S

SSLCaCertificateFile

Für „offizielle“ Zertifikate braucht man zusätzlich noch einen Eintrag für die CA: SSLCaCertificateFile. Und zusätzlich bis Apache Version 2.4.8 SSLCertificateChainFile. Was gebraucht wird und was die beiden Dateien enthalten sollte in der Dokumentation des Herausgebers (der CA) des Zertifikats stehen. 3)

Testen

lsof -i :443
openssl s_client -connect localhost:443 -showcerts

SSL/TLS und name based virtual hosts

Vorraussetzung: wie in SSL Zertifikat beschrieben eine CA erstellt

Zertifikat

Dieser Schritt ist bei GnuTLS nicht nötig, da GnuTLS schon bei der Erstellung von Zertifikaten nach mehreren Domain-Namen fragt

Server-Zertifikat beantragen

Als root:

cd
mkdir server-ssl
cp -a /etc/ssl/openssl.cnf server-ssl/config

Antrag und Schluessel fuer Server erzeugen: server-ssl/config :

[req]

req_extensions          = v3_req

[ v3_req ]
subjectAltName=DNS:notebook07.linuxhotel.de,DNS:iw.linuxhotel.de
openssl req -new -newkey rsa:2048 -nodes -config server-ssl/config -keyout server-ssl/serverkey.pem -out server-ssl/serverreq.pem
Common Name (eg, YOUR name) []:notebook32.linuxhotel.de
Email Address []:root@notebook32.linuxhotel.de

Pruefen ob Antrag und Schluessel ok sind:

openssl req -in server-ssl/serverreq.pem -noout -verify -key server-ssl/serverkey.pem

Antrag ansehen:

openssl req -in server-ssl/serverreq.pem -noout -text | grep -A1 X509v3

Antrag zum Nutzer ca kopieren:

cp server-ssl/serverreq.pem /home/ca

Als Nutzer ca Server-Zertifikat unterschreiben

su - ca
cp -a /etc/ssl/openssl.cnf ca.linuxhotel.de

ca.linuxhotel.de/openssl.cnf :

[ CA_default ]
copy_extensions = copy
x509_extensions = usr_cert

[ usr_cert ]
basicConstraints=CA:FALSE
openssl ca -in serverreq.pem -config ca.linuxhotel.de/openssl.cnf -out servercert.pem

Zertifikat ansehen:

openssl x509 -in servercert.pem -text | grep -A1 X509v3

Apache Konfiguration

Anfragen auf https:// umleiten

a2enmod rewrite
cd /etc/apache2

sites-available/default :

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>

Alle virtual hosts umstellen

sites-available/default :

NameVirtualHost *:443
<VirtualHost _default_:443>

sites-available/* :

<VirtualHost *:443>

Dokumentation

1)
SSLProtocol             all -SSLv2 -SSLv3

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLHonorCipherOrder     on
2)
Bei älteren openSuSE Versionen:
mkdir ssl.crt ssl.key ssl.csr