Todo: https://ssl-config.mozilla.org/ benutzen Todo: https://weakdh.org/sysadmin.html cipher list intregrieren (( 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 )) 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 ===== * [[apache]] installiert * [[ssl| SSL Zertifikat]] und Diffie-Hellman Parameter-Datei erstellt * Korrektes [[bind|DNS]] evtl. inkl. CAA Record * Korrekte [[zeitserver|Uhrzeiten]] auf allen Rechnern ==== 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 (( Bei älteren openSuSE Versionen: mkdir ssl.crt ssl.key ssl.csr )) 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 ) 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 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 # SSL name based virtual hosts are not yet supported, therefore no # NameVirtualHost statement here NameVirtualHost *:443 Listen 443 ''/etc/apache2/ports.conf'' : ( Debian 8.0 ) Listen 80 Listen 443 ''/etc/apache2/sites-available/default-ssl.conf'' : ( Debian 8.0 ) … 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 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. (( Mehr dazu: * http://stackoverflow.com/questions/1899983/difference-between-sslcacertificatefile-and-sslcertificatechainfile )) * http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcacertificatefile * http://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatechainfile )) ===== Testen ===== lsof -i :443 openssl s_client -connect localhost:443 -showcerts ====== SSL/TLS und name based virtual hosts ====== Vorraussetzung: wie in [[ssl| 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'' : RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L] ==== Alle virtual hosts umstellen ==== ''sites-available/default'' : NameVirtualHost *:443 ''sites-available/*'' : ====== Dokumentation ====== * [[ http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-httpd-secure-server.html | CentOS 5 ]] * [[ http://httpd.apache.org/docs/2.2/ssl | apache httpd und SSL/TLS]] * [[ http://www.switch.ch/pki/meetings/2007-01/namebased_ssl_virtualhosts.pdf | SSL und name based virtual hosts ]] * [[ http://en.wikipedia.org/wiki/Server_Name_Indication | Server Name Indication - Lösung für name based virtual hosts ]]