Wie lässt sich eine Aapache2 Web Server mit einem Zertifikat ausstatten. Dieses sollte ohne große Kosten passieren, also ist der einfachste Weg ein Self-Sign Zertifikat in den Apache einzubinden.
Hier die Anleitung wie auf dem Linux System per OpenSSL ein Self-Sign Zertifikat generiert wird und dieses dann in die Konfiguration des Apache eingebunden wird. Da in jeder Distribution das OpenSSL Paket zur Verfügung steht, braucht man dieses wenn nicht schon geschehen installieren.
Man bedenke das es sich wie gesagt um ein Self-Sign Zertifikat handelt und dieses von Browsern als nicht vertrauenswürdig erkannt wird.
Will man dieses vermeiden, bleibt nur der Weg ein vertrauenswürdiges Zertifikat sich zu besorgen und dieses dann auf dem Apache einzubinden.

Schritte für das erzeugen eines Self-Sign Zertifikats und das einbinden im Apache Version 2.x

  • 1. Verzeichnis für die SSL Zertifikate und RSA Keys erzeugen, in dem später die einzelnen Datei abgelegt werden.
    # mkdir /etc/apache2/ssl
  • 2. Danach in das Verzeichnis wechseln. Spart in den weiteren Schritten die Eingabe der Verzeichnisse.
    # cd /etc/apache2/ssl
  • 3. Erzeugen des Request für das Zertifikat. Dabei wird auch der RSA Key generiert. Die Default Schlüssel Länge beträgt 1024bit, diese könnte über weitere Parameter auch länger erzeugt werden. Kürzere Schlüssel länge als 1024bit ist nichts empfehlenwerts. Der RSA Key wird über eine Passphrase geschützt, die jedesmal eingegeben werden muss für die Benutzung der RSA Keys.

    # openssl req -new > server.cert.csr

    Generating a 1024 bit RSA private key
    ……………………..++++++
    ……….++++++
    writing new private key to ‘privkey.pem’
    Enter PEM pass phrase:
    Verifying - Enter PEM 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]:Hamburg
    Locality Name (eg, city) [Newbury]:Hamburg
    Organization Name (eg, company) [My Company Ltd]:xyz
    Organizational Unit Name (eg, section) []:Training
    Common Name (eg, your name or your server’s hostname) []:www.xyz.de
    Email Address []:info@xyz.de

    Please enter the following ‘extra’ attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:

    Danach sollten in dem Verzeichnis die folgenden Dateien existieren:

    # cat privkey.pem
    In dieser Datei ist das erzeugte RSA Key Pair enthalten. Hier ist erkennbar mit welchem symmetrische Algorithmus die Daten verschlüsselt wurden.

    ——-BEGIN RSA PRIVATE KEY——-
    Proc-Type: 4,ENCRYPTED
    DEK-Info: DES-EDE3-CBC,9D86118DCD0A52FE

    PgWsnHFe0Ku1k24EbWwIRSry9yhh8HghufEHhWSLCeaN1fUV2we+/zB/4HLQQyp1
    CYNw+5bK6f+pr6LVO6QQWyRhqbjQPDa8dh6yCCx3ZMPXIP5DTcEGT7Y6mIw+kxFG
    WMUHrQyGsnPlP8QhnLe48bd7Km4nDizCEOd9yay/pTR8FF3uj816aXerlL9Wij5E
    0oMC6lW1egz8rgYBFF84Y9oShDNL+yZGRUd2YBxGEgyOpouzRxjqjSDhTgyI/kYe
    sCKmbnLgCLcphRVHyUhL2/77O+rxE26j+ABh/eDNIyAUscQCbRMkVB3aWQpcLKrx
    0696fJXswKK/1LP91+iBfhJqvs9mlXqVaQJGHWQ14D9F9oFkkrAIeZkJXdj1SqXw
    r6H9tot+AF0zcuQW6MM6Bs+QJQzAMSyZ9Ud7EMqO/KTvJqRxmPUmpxGrwtHs6B5a
    i8Hmlqbh7ORb13YZMYv6dWH5CzTDe131IKTbHvkVoPMiCG2L2qf6a8kYVLorp6Lx
    ZxUHpEXDGrf2wHoJ1SO3s7vgmVqkLWYxCKjmi6UoDIbT9Oxw8sikgp/20JECeVgR
    4A0txzvJByaQ0qG20o8kOhYVlZGD5xFHbKjQRMJDVXPgSANmhqcKJs+CQwW3O0mi
    sJShb7SjCgP+9eA56ZSL+2vs2iH+aWyi7GgcblRpbopvzlmPEgdl5BLw3feiuj1C
    EdO4h62PtINVzVw4HhCAItw6juG8qFIRIMkOvwNp931o5kpg/NLwuqN/YI9vvdVe
    LEsPfrouEZxWx+NPQLl3+hYhWAG3vJm2v5HK40QHtOSwpZwL+TPGKw==
    ——-END RSA PRIVATE KEY——-

    # cat server.cert.csr
    Diese Datei enthält den Zertifikats Request, der später für die Erzeugung des SSL Zertifikats benötigt wird. Der Inhalt dieser Datei beginnt immer mit der Zeile “——-BEGIN CERTIFICATE REQUEST——-” und endet mit der Zeile “——-END CERTIFICATE REQUEST——-“. Dazwischen liegen die Request Daten für das SSL Zertifikat. Diesen Inhalt könnte man nun auch an eine registrierte CA senden, um ein vertrauenswürdiges Zertifikat zu erhalten.

    ——-BEGIN CERTIFICATE REQUEST——-
    MIICHDCCAYUCAQAwgcAxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJnMRAw
    DgYDVQQHEwdIYW1idXJnMTgwNgYDVQQKEy9GYXN0IExhbmUgSW5zdGl0dXRlIGZv
    ciBLbm93bGVkZ2UgVHJhbnNmZXIgR21iSDERMA8GA1UECxMIVHJhaW5pbmcxHzAd
    BgNVBAMTFnB1YmxpYy1zZXJ2ZXIucG9kMS5vcmcxHzAdBgkqhkiG9w0BCQEWEHN0
    dWRlbnRAcG9kMS5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALn5vj2a
    Z9qsH94kA2Pkinxaau6JR96GIjwKA/qdzlbnRZq1kb83UKisk61phcmeFhN9dHcE
    L5B009Fq1c2tzNVqB+XCYkt0hNCsgTKPjWV9p/4Nw9Ax3Wr/1b/Xixw0JeAGjAoc
    jAIIQPlKHKtJpX4+0bnUs47ZzyjlshWjziwfAgMBAAGgGzAZBgkqhkiG9w0BCQcx
    DBMKY2hlY2twb2ludDANBgkqhkiG9w0BAQUFAAOBgQAlEeD5rBSPL0dLVvf0PSCE
    6KAytEKS6GRSTbnygWhpLEQM2x0Axs/iVpkeRaZ2TMg6apPpCiSN5aYX2WyCwvzp
    NbMTQFewc8+DjWD3ZMfpeU2wFyOfsB++ENweqfX8/pMS4cFj3Psy3rYp6iTwrY5C
    gmKhNDL3Y9XF+Zcq8hPOtw==
    ——-END CERTIFICATE REQUEST——-

  • 4. Durch den folgenden Befehl wird die Passphrase vom dem RSA Key entfernt, sodas nicht bei jedem Start des Apache die Passpharse eingegeben werden muss. Gerade bei einem System Neustart kann dieses sehr hinderlich sein, da das System während des startens auf die Eingabe der Passphrase warten würde.
    # openssl rsa -in privkey.pem -out server.cert.key

    Enter pass phrase for privkey.pem:
    writing RSA key

    Der Inhalt der Datei sieht in diesem Beispiel wie folgt aus:
    # cat server.cert.key

    ——BEGIN RSA PRIVATE KEY——-
    MIICXQIBAAKBgQCqg7Tij9syGCQMa8dJR7Qt1SJ2A1ayQ2tku01P7gTdULHvW7Yk
    okAvqjOb8S7XqFhLDusbe946u5gJ8i08yODzm6FHEaSvjYcaXh+4lYrcoW8vARh6
    C6VSMy+74y+fRhGlggXMANNQM1C8nrDPzWAJsf7BHg58ZGvYwX1fOULKXQIDAQAB
    AoGAWh25X3O/2L3Bb38Wl7f5la9qwwwIqbXP8DC9L10P3Rdksqe5n6rQWWCOXgAd
    TYR/BUwhHSldzZSPSdJf7hwMJlZW/SfrQYKkTrBA2lMcJVuD4R3VdfaY8SQzhWvn
    xfZtIVmSRtl0tkQpOEHk5G5k5821pNZoAcxHUkGcjdQC6FECQQDV7YXmUT8AYqco
    IXn5/7cV4uaG72J6v9zxXrjgkWB6JwhxaAre7mBB8/J9EFA02tXllz5Kn1AF9+2A
    0UnOGH53AkEAzAx7UO3YVrNTdFGZBDatVn/6xMrITYbS2afJZJ2zB0JkfOJ1oFhr
    MPWx1fZs8h7sDizG4h8j8ODJZO1d0XQOywJBAKdUuM2kc0Eb6V/sf3pa2JyX9HVL
    PZ6CAJIT40xUqkAh0+rQ1N/3WPd9lwjX/8S3/2MsYB8CahehC/ccvTwl0JUCQQC1
    JI+E9OENdv0rUhUJTJDtLYgtk+fmCz67wtxi2izI0QPsag4KXvQp7rQFQlLNTu44
    Vz/oFcUOXj/rvV2ASAupAkAOJ8foBnOGQyrxrTLDZJuYjKdpwbdQxnZa1w7+r+rs
    NjN3AC9AeVk6ADkFHfQKUcrsENXBhpl7m8n3aHfHEC0q
    ——-END RSA PRIVATE KEY——-

  • 5. Als letztes muss nun der Zertifikat Reuqest in ein signiertes Zertifikat umgewandelt werden. Um dieses zu erreichen muss der folgende Befehl eingegeben werden.
    # openssl x509 -in server.cert.csr -out server.cert.crt -req -signkey server.cert.key -days 3650

    Signature ok
    subject=/C=DE/ST=Hamburg/L=Hamburg/O=xyz
    Getting Private key

    Nun befindet sich die folgende Datei im Verzeichnis server.cert.crt. In dieser Datei ist das signierte Zertifikat enthalten. Der Inhalt sieht in unserem Fall wie folgt aus:

    # cat server.cert.crt

    ——-BEGIN CERTIFICATE——-
    MIICDzCCAXgCCQDr1M4IJWDpPDANBgkqhkiG9w0BAQUFADBMMQswCQYDVQQGEwJH
    QjESMBAGA1UECBMJQmVya3NoaXJlMRAwDgYDVQQHEwdOZXdidXJ5MRcwFQYDVQQK
    Ew5NeSBDb21wYW55IEx0ZDAeFw0wOTEyMTUyMTQxMjZaFw0xOTEyMTMyMTQxMjZa
    MEwxCzAJBgNVBAYTAkdCMRIwEAYDVQQIEwlCZXJrc2hpcmUxEDAOBgNVBAcTB05l
    d2J1cnkxFzAVBgNVBAoTDk15IENvbXBhbnkgTHRkMIGfMA0GCSqGSIb3DQEBAQUA
    A4GNADCBiQKBgQCqg7Tij9syGCQMa8dJR7Qt1SJ2A1ayQ2tku01P7gTdULHvW7Yk
    okAvqjOb8S7XqFhLDusbe946u5gJ8i08yODzm6FHEaSvjYcaXh+4lYrcoW8vARh6
    C6VSMy+74y+fRhGlggXMANNQM1C8nrDPzWAJsf7BHg58ZGvYwX1fOULKXQIDAQAB
    MA0GCSqGSIb3DQEBBQUAA4GBAJIX7dqh2vf79ZwZWkhKOX2GjyXtFg7LUuJzfSJw
    3d/IuGmur3ZZF61FIYStD5KdkKjFCOmYpJzPeT/uulLBg6nUFuc8uhADdd8s7bW0
    +Ou9l3pPF8R4dOfR5rB0ADQm554B5Os7ZRoHP9Cd/fvTRstqLuUCNsXnQM0+a4mK
    1QPE
    ——-END CERTIFICATE——-

  • 6. Nun die beiden Dateien server.cert.crt und server.cert.key wie folgt umbenennen, das die Endung .pem lautet:
    # mv server.cert.crt ServerCert.pem
    # mv server.cert.key ServerKey.pem
  • 7. Als nächstes in der folgende Datei das Zertifikat und den Key für das SSL einbinden. Dadurch aktivieren sie die HTTPS Funktion für den Apache Web Server.
    # vi /etc/apache2/httpd.conf

    <virtualhost xyz:443>
    ServerName xyz
    SSLEngine on
    SSLCertificateKeyFile /etc/apache2/ssl/ServerKey.pem
    SSLCertificateFile /etc/apache2/ssl/ServerCert.pem
    </virtualhost>

  • 8. Nun dem Apache noch mitteilen das er auf den Port 443 hören soll. Dadurch muss die Datei ports.conf modifiziert werden.
    # vi /etc/apache2/ports.conf

    Listen 443

  • 9. Nun noch das SSL Modul aktivieren durch den folgenden Befehl
    # a2enmod ssl
  • 10. Als letztes alle Änderungen am Apache aktivieren und diesen einmal neu starten und somit die Konfigurations Änderungen einlesen.
    # /etc/init.d/apache2 force-reload