====== Apache mit offiziellen SSL-Zertifikat betreiben ======
=====Offiziellen Key erzeugen/kaufen =====
==== Name und Dateien (wer spielt mit?): ====
* Keyfile
* domain.key
* private Datei mit Schlüssel
* Certification Signing Request
* verisign.csr
* für upload zum Zertifizieren
* Zertifikat
* domain.crt
* bekommt man vom Zertifizierer zurückgeschickt
* Intermediate
* "bundle"
==== Erstellen: ====
Siehe auch: http://support.psw.net/questions/26/Wie-wird-eine-Zertifizierungsanforderung-%28CSR%29-erstellt-%28Apache%29%3F
* cd /etc/apache2/ssl
* openssl req -new -nodes -keyout dateiname.key -out dateiname.csr -newkey rsa:2048
Generating RSA private key, 2048 bit long modulus
....++++++
...............................++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
*
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) [GB]:DE
State or Province Name (full name) [Berkshire]:Bayern
Locality Name (eg, city) [Newbury]:Fuerth
Organization Name (eg, company) [My Company Ltd]:Domain GmbH
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:domain.de
Email Address []:webmaster@domain.de
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
* :!: keine Passphrase vergeben
* der "Common Name" ist der Domain.name, z.B. ''domain.de'' (das ist ungleich ''www.domain.de'' :!:)
* Die E-Mail-Adresse muss es geben
==== Passwort aus Key-Datei löschen ====
* openssl rsa -in server.key.pass -out server.key
==== selbst signiertes Zertifikat erstellen ====
* openssl req -new -x509 -nodes -out server.crt -keyout server.key
Siehe: http://httpd.apache.org/docs/2.2/ssl/ssl_faq.html#selfcert
===== Apache-Konfig =====
NameVirtualHost domain.de:443
DocumentRoot /home/domain/www
ServerName domain.de:443
ServerAlias www.domain.de
######################################################################
ServerAdmin webmaster@domain.de
ErrorLog /var/log/httpd/domain-error_log
CustomLog /var/log/httpd/domain-access_log common
# beachte .htaccess :
AllowOverride All
# zusaetzlich fuer SSL:
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateKeyFile /etc/pki/tls/domain/domain.key
SSLCertificateFile /etc/pki/tls/domain/domain.crt
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
Debian:
* cd /etc/apache2/mods-enabled
* ln -s ../mods-available/ssl.conf
* ln -s ../mods-available/ssl.load
===== CSR-Datei prüfen =====
* openssl req -in server.csr -noout -text -verify
===== Wie prüfen, ob Key- und Zertifikatsdatei zusammenpassen? =====
* openssl rsa -noout -text -in domain.key
* openssl x509 -noout -text -in domain.crt
* "modulus" und "Exponent" müssen exakt übereinstimmen
===== Prüfe ein Zertifikat / einen Server mit/ohne CAFile =====
* openssl s_client -quiet -connect servername:443
* liefert Fehler weil nur mit Zertifikat (CAFile) gültig
* Lösung: openssl s_client -quiet -CAfile cafile.pem -connect servername:443
* lokal vorhandes Zertifikat prüfen:
* openssl verify -verbose -CAfile cafile.pem cert.pem
===== Welche Ciphers kann ein Server? =====
Von https://github.com/wki/MyHomeBinaries/blob/master/bin/check_ssl.sh:
#!/bin/bash
# This script is taken from:
# http://superuser.com/questions/109213/is-there-a-tool-that-can-test-what-ssl-tls-cipher-suites-a-particular-website-of
#
if [[ "x$1" == "x" ]]; then
echo "must give ip or host name as parameter"
exit 1
fi
server=$1
echo "Testing Server $server..."
# OpenSSL requires the port number.
DELAY=1
openssl ciphers -v 'ALL:eNULL' | while read cipher ssl kx au enc mac export
do
echo -n -e "Testing $cipher, $ssl, $enc... \t"
result=`echo -n | openssl s_client -cipher "$cipher" -connect $server:443 2>&1`
if [[ "$result" =~ "Cipher is " ]] ; then
echo YES
else
if [[ "$result" =~ ":error:" ]] ; then
error=`echo -n $result | cut -d':' -f6`
echo NO \($error\)
else
echo UNKNOWN RESPONSE
echo $result
fi
fi
sleep $DELAY
done
===== SSL certificate chain resolver =====
* lädt intermediate certs automatisch
* https://github.com/zakjan/cert-chain-resolver
===== Links =====
* http://kb.psw.net/
* http://www.enterprisessl.com/ssl-certificate-support/server_faq/ssl-server-certificate-apache.html
* https://search.thawte.com/support/ssl-digital-certificates/index?page=content&id=SO7302&actp=search&viewlocale=en_US&searchid=1254230700908
* http://www.verisign.de/support/ssl-certificates-support/page_de_de_dev019431.html
* https://www.ssllabs.com/ssltest/analyze.html
* Prüfe Server/Config/Zertifikat