Dieses Howto führt euch Schritt für Schritt durch die Erzeugung eines SSL Zertifikates und zeigt dann auf wie man diverse Dienste (Apache, Courier, Postfix, ProFTPD) mit SSL schützen kann.
[Dank für den SSL-CA-Teil geht an http://fra.nksteidl.de/Erinnerungen/OpenSSL.php]
====== 1. Erzeugung des SSL Zertifikats ======
===== 1.1 Installation des openssl-Pakets =====
Zuerst müssen wir das openssl Paket installieren:
apt-get install openssl
===== 1.2 Anpassen der Konfigurationsdateien =====
Danach öffnen wir die openssl Konfigurationsdatei unter /etc/ssl/openssl.cnf und passen es wie folgt an (Das Beispiel geht von der CA (Zertifizierungsausteller) mit dem Namen "RootCA" aus. Man kann dies jedoch beliebig umbenennen):
Line 32: default_ca = RootCA
Line 35: [ RootCA ]
Line 37: dir = /root/RootCA
Line 41: unique_subject = no # only if you need this
Line 70: default_md = md5
Wenn wir wollen können wir die Werte in dem [req_destinquished_name] Bereich an unsere Sprache anpassen.:
[ req_distinguished_name ]
countryName = Land (2stelliger Code)
countryName_default = DE
countryName_min = 2
countryName_max = 2
stateOrProvinceName = Bundesland (voller Name)
stateOrProvinceName_default = MeinBundesland
localityName = Ort, Stadt
localityName_default = MeineStadt
0.organizationName = Firmenname
0.organizationName_default = MeineFirma
# Dies wird normalerweise nicht gebraucht, aber wir können es trotzdem nutzen :-)
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = Abteilung
#organizationalUnitName_default =
commonName = Common Name (z.B. IHR Name, die Serverdomain)
commonName_max = 64
emailAddress = E-Mail-Addresse
emailAddress_max = 64
===== 1.3 Anlegen der benötigten Verzeichnisse und Dateien =====
Nun müssen wir die in der openssl.cnf angegebenen Verzeichnisse und Dateien anlegen:
mkdir /root/RootCA # oder der welcher Name/ welches Verzeichniss oben ausgewählt wurde
cd /root/RootCA
mkdir newcerts certs crl private
touch index.txt
# Serialnr starts with 01
echo "01" > serial
===== 1.4 Zufällige Daten für das CA Zertifikat generieren =====
Damit wir das Programm uuencode nutzen können, muss das sharutils Paket installiert sein.
cat /dev/urandom | uuencode -m bla | head -19 | sed "s/begin.*//g"\
| tail -18 | xargs | sed "s/ //g" > /root/RootCA/private/.rand
chmod 770 /root/RootCA/private/.rand
ls -alh /root/RootCA/private/.rand
===== 1.5 Das CA Zertifikat erzeugen =====
Nun können wir das Zertifikat erzeugen...
Erzeugung des Schlüssel. Damit der Schlüssel auch noch in den nächsten Jahren eine Sicherheit darstellt sollten wir eine starke passphrase verwenden!
openssl genrsa -aes256 -out private/RootCA.key.pem -rand private/.rand 2048
Das Zertifikat erzeugen:
openssl req -new -x509 -days 1827 -key private/RootCA.key.pem -out RootCA.cert.pem
(-days 1827 erzeugt ein Zertifikat, das 5 Jahre gültig ist)
Wir überprüfne die Zertifikats-Daten:
openssl x509 -in RootCA.cert.pem -text | less
Wir kopieren das Zertifikaten und den Privaten Schlüssel zu den in der openssl.cnf vorgegebene Orten:
cp /root/RootCA/RootCA.cert.pem /root/RootCA/cacert.pem
cp /root/RootCA/private/RootCA.key.pem /root/RootCA/private/cakey.pem
Stelle das Zertifikat unter die Kontrolle der CA. Dazu muss es mit seiner Seriennummer als Dateiname in das "certs" Verzeichnis kopiert und mit seinem hash-Wert gelinkt werden:
cd /root/RootCA
cp RootCA.cert.pem /root/RootCA/certs/00.pem
cd /root/RootCA/certs/
ln -s 00.pem `openssl x509 -hash -noout -in 00.pem`.0
===== 1.6 Das CA Zertifikat veröffentlichen =====
Nun ist die CA eingerichtet und du kannst beginnen die Zertifikate zu erstellen. Dazu benennst du .cert.pem-datei in .crt-datei um, kopierst es in ein verzeichnis, das via Internet zugreifbar ist, und passt die Zugriffsrechte für die Datei entsprechend an:
cp /root/RootCA/RootCA.cert.pem /var/www/virtual/yourdomain.com/htdocs/RootCA.crt
chmod 444 /var/www/virtual/yourdomain.com/htdocs/RootCA.crt
Um das Zertifikat im Browser zu importieren rufst du die abgelegte Datei mit deinem Browser auf:
http://yourdomain.com/RootCA.crt
====== 2. Server-Zertifikate erstellen ======
===== 2.1 Beispiel zur Erstellung eines Server-Zertifikats =====
Alle Server-Zertifikate werden auf die gleiche Weise erstellte. Gebe für die Server-Zertifikate keine passphrase an - denn sonst müsstest du bei jedem Start des Servers diese passphrase eingeben!
Dazu brauchst du bei der Abfrage der Passphrase nur mit "Enter" bestätigen (also keine Eingabe machen).
cd /root/RootCA
openssl genrsa -out server.key.pem -rand private/.rand 2048 # Generate the key
openssl req -new -key server.key.pem -out server.req.pem # Generate the certificate request
openssl ca -name RootCA -in server.req.pem -out server.cert.pem # Sign the request with your CA (you have to enter the CA-passphrase)
Verschiebe das Zertifikat in das certs-Verzeichnis und verlinke es mit seinem hash-Wert:
mv newcerts/01.pem certs/ # the certificate is named with its serialnumber - so its name is 01.pem only the first time, of course)
cd certs
ln -s 01.pem `openssl x509 -hash -noout -in 01.pem`.0
Die orginalen Zertifikatsdateien kann man zur besseren Übersichts noch in ein separates Verzeichnis kopieren:
mkdir /root/RootCA/server
mv server.*.pem server/
===== 2.2 Ein Zertifikat für den Apache-Server erstellen =====
Erstelle ein Serverzertifikat wie unter 2.1 beschrieben (nutze apache.key.pem, apache.req.pem und apache.cert.pem als Dateinamen).
Wenn du apache.req.pem erstellst, gebe folgendes ein:
Organizational Unit Name []:Apache Webserver
Common Name (eg, YOUR name) []:yourdomain.com
Es ist wichtig hier den Domainnamen einzugeben, unter dem du dass ISPcp nutzen möchtest, da du sonst ein "domain mismatch"-Fehler erhältst, wenn du dich via ssl (https) verbindest.
Nachdem du das Zertifikat erstellt hast, ändere die folgenden Einstellungen in /etc/apache2/mods-available/ssl.conf (tausche 512 gegen 2048):
SSLRandomSeed startup /dev/urandom 2048
SSLRandomSeed connect /dev/urandom 2048
Dann erstelle das Verzeichnis und kopiere die Zertifikat-Dateien (mit entsprechend !!! SICHEREN !!! Dateiberechtigungen):
mkdir /etc/apache2/ssl
cp apache.cert.pem apache.key.pem /etc/apache2/ssl
chmod 400 /etc/apache2/ssl/apache.cert.pem /etc/apache2/ssl/apache.key.pem
Aktiviere die Nutzung des SSL-Ports (443) im Apache (/etc/apache2/ports.conf):
Listen 443
und aktiviere das Modul mod_ssl (eingabe des Befehls in die Konsole) :
a2enmod ssl
Als letzter Schritt muss ein neuer virtueller Host hinzugefügt werden, der an Port 443 lauscht und die SSL-Engine bei Anfragen aktiviert:
cp /etc/apache2/sites-available/00_master.conf /etc/apache2/sites-available/01_ssl_master.conf
Ändere die 01_ssl_master.conf wie folgt:
#
# SSL Master Begin
#
#
# SSL Start
#
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.cert.pem
SSLCertificateKeyFile /etc/apache2/ssl/apache.key.pem
#
# SSL End
#
ServerAdmin admin@yourdomain.com
DocumentRoot /var/www/ispcp/gui
ServerName yourdomain.com
ErrorLog /var/log/apache2/users/ssl.yourdomain.com-error.log
TransferLog /var/log/apache2/users/ssl.yourdomain.com-access.log
CustomLog /var/log/apache2/ssl.yourdomain.com-traf.log traff
CustomLog /var/log/apache2/ssl.yourdomain.com-combined.log combined
#
# ... below here, nothing has to be changed
#
#
# SSL Master End
#
Aktiviere die ssl-Seite über folgenden Aufruf in der Konsole:
a2ensite 01_ssl_master.conf
Restarte den Apache-Server nun um die Änderungen zu übernehmeen:
/etc/init.d/apache2 reload
Fertig!
Öffne deinen Broser und gebe deine Domain mit vorangestellten https:// ein (https://yourdomain.com). Nun solltest du das ispCP-Login-Screen sehen.
( Übrigens, auch phpmyadmin und der Webmailer sind nun via https:// erreichbar.)
===== 2.3 Create the certificate for the courier server =====
At first, you have to install the ssl-packages for courier:
apt-get install courier-imap-ssl courier-pop-ssl
Now you can generate the server certificate as described under 2.1 (choose courier.key.pem, courier.req.pem and courier.cert.pem as filenames).
When generating the courier.req.pem, enter this:
Organizational Unit Name []:Courier Mailserver
Common Name (eg, YOUR name) []:mail.yourdomain.com
The courier server needs the cert and the key-file together in one file:
cd /root/RootCA/server
cat courier.cert.pem courier.key.pem > courier.pem
Put the Certificates under /etc/courier:
cd /etc/courier
cp /root/RootCA/server/courier.pem .
chmod 400 courier.pem
ln -s courier.pem imapd.pem
ln -s courier.pem pop3d.pem
Now you can restart the courier-ssl servers:
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop-ssl restart
and SSL is working for your IMAP and POP3-Server!
===== 2.4 Create the certificate for the ProFTPD server =====
Generate the server certificate as described under 2.1 (choose proftpd.key.pem, proftpd.req.pem and proftpd.cert.pem as filenames).
When generating the proftpd.req.pem, enter this:
Organizational Unit Name []:ProFTPD FTP-Server
Common Name (eg, YOUR name) []:ftp.yourdomain.com
Copy the files in /etc/proftpd:
cd /etc/proftpd
cp /root/RootCA/server/proftpd.cert.pem /root/RootCA/server/proftpd.key.pem .
chmod 400 proftpd.cert.pem proftpd.key.pem
Activate TLS in /etc/proftpd.conf (uncomment these lines):
#
# SSL via TLS
#
TLSEngine on # on for use of TLS
TLSLog /var/log/proftpd/ftp_ssl.log # where to log to
TLSProtocol SSLv23 # SSLv23 or TLSv1
TLSOptions NoCertRequest # either to request the certificate or not
TLSRSACertificateFile /etc/proftpd/proftpd.cert.pem # SSL certfile
TLSRSACertificateKeyFile /etc/proftpd/proftpd.key.pem # SSL keyfile
TLSVerifyClient off # client verification
Restart ProFTPD:
/etc/init.d/proftpd restart
That's all! Now you can connect to ftp.yourdomain.com via FTP with explicit TLS/SSL.
===== 2.5 Create the certificate for the postfix server =====
Generate the server certificate as described under 2.1 (choose postfix.key.pem, postfix.req.pem and postfix.cert.pem as filenames).
When generating the postfix.req.pem, enter this:
Organizational Unit Name []:Postfix Mailserver
Common Name (eg, YOUR name) []:mail.yourdomain.com
Copy the files in /etc/postfix:
cd /etc/postfix
cp /root/RootCA/server/postfix.cert.pem /root/RootCA/server/postfix.key.pem .
chmod 400 postfix.cert.pem postfix.key.pem
Activate TLS/SSL in /etc/postfix/main.cf (uncomment these lines):
smtpd_tls_loglevel = 2
smtpd_tls_cert_file = /etc/postfix/postfix.cert.pem
smtpd_tls_key_file = /etc/postfix/postfix.key.pem
smtpd_use_tls = yes
smtpd_tls_auth_only = no
smtpd_tls_received_header = yes
Restart postfix:
/etc/init.d/postfix restart
And another one... You can now send your emails over an SSL-encrypted connection.
====== 3. Finished ======
Now you have configured your webserver (for ispCP), your mailservers and your ftp-server to use a ssl-encrypted connection.
Don't forget to distribute the CA-Certificate (it's accessible via http://yourdomain.com/RootCA.crt, isn't it?) to the people who access your server, so that they don't have to accept each single server certificate.