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
Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Todo: https://weakdh.org/sysadmin.html cipher list intregrieren 1)
SSL / TLS für Apache
Vorraussetzungen
- apache installiert
- SSL Zertifikat und Diffie-Hellman Parameter-Datei erstellt
- Korrektes DNS evtl. inkl. CAA Record
- Korrekte Uhrzeiten auf allen Rechnern
CAA Record
CAA Records funktionieren mit bind erst ab Version 9.9.6
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
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
TODO: noch nicht getestet
cd /etc/ssl
sudo -u www-data -g ssl openssl s_server -cert certs/servercert.pem -key private/serverkey.pem -www firefox https://localhost
sudo -u www-data -g ssl openssl s_server -cert certs/servercert.pem -key private/serverkey.pem -WWW firefox https://localhost/certs/cacert.pem
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:
/etc/init.d/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
mkdir ssl.crt ssl.key ssl.csr
