Ρύθμιση TLS με τον Apache2

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

inactive

inactive

active

inactive

inactive

inactive

inactive

inactive

Συμβουλή

The very same concept as descriped here can be used for many applications using openssl as crypto-backend. The concept mostly boils down to: replace (secret) key-file with PKCS#11 URL referencing a key on a security token (Nitrokey).

Προετοιμασία

  • Βεβαιωθείτε ότι η έκδοση του apache2 είναι τουλάχιστον 2.4.42 για σωστή υποστήριξη mod_ssl.

  • ενεργοποίηση του mod_ssl με τη χρήση του a2enmod ssl, αν δεν έχει ήδη γίνει

  • Επιπλέον, απαιτείται openssl και libengine-pkcs11-openssl βλέπε PKCS#11 URL

Ρύθμιση του Apache2 ώστε να χρησιμοποιεί ένα κλειδί ασφαλείας

Βασικά το μόνο που πρέπει να κάνετε είναι να αντικαταστήσετε το SSLCertificateFile με την κατάλληλη διεύθυνση URL PKCS#11 και να διαγράψετε οποιεσδήποτε άλλες αναφορές σε κλειδιά ή πιστοποιητικά. Π.χ., το SSLCertificateKeyFile δεν χρειάζεται πλέον.

Ένα παράδειγμα οδηγίας μπορεί να μοιάζει με αυτό:

SSLCertificateFile   "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0123123;token=UserPIN%20%28SmartCard-HSM%29;id%01"

Η κατάλληλη διεύθυνση URL PKCS#11 μπορεί να εξαχθεί όπως περιγράφεται στο PKCS#11 URL Generation

Φροντίστε να τοποθετήσετε την οδηγία μέσα σε μια ρύθμιση παραμέτρων VirtualHost.

Παροχή PIN κατά την εκκίνηση του Apache2

Χρησιμοποιώντας τη μέθοδο που περιγράψαμε προηγουμένως, ο Apache2 θα ζητάει σε κάθε εκκίνηση τον κωδικό χρήστη-ΠΙΝ, απορρίπτοντας έτσι ουσιαστικά τη μαζική εκκίνηση. Ο Apache2 παρέχει μια άλλη οδηγία για την παροχή του PIN κατά την εκκίνηση.

SSLPassPhraseDialog     "|/bin/echo 123456"

Ο Apache2 αναμένει ένα εκτελέσιμο αρχείο μετά το |, το οποίο θα εκτελεστεί κατά την εκκίνηση και η έξοδός του (αναμένεται η newline στο τέλος) θα χρησιμοποιηθεί ως PIN. Προφανώς, αυθαίρετες πολύπλοκες μέθοδοι ανάκτησης PIN μπορούν να υλοποιηθούν με τη χρήση αυτής της προσέγγισης. Παρόλο που εδώ έχει επιλεγεί ένα τετριμμένο παράδειγμα για την απλή echo του PIN κατά την εκκίνηση.

Περαιτέρω SSLPassPhraseDialog είναι μια παγκόσμια οδηγία, επομένως πρέπει να τοποθετηθεί στην παγκόσμια εμβέλεια ρυθμίσεων στον Apache2.

Προειδοποίηση

Αυτό το παράδειγμα δεν είναι ένας ασφαλής μηχανισμός για να περάσετε το PIN σας, καθώς θα γραφτεί σε απλό κείμενο μέσα στη διαμόρφωσή σας.

Δείτε την Apache2 mod_ssl documentation για περισσότερες λεπτομέρειες σχετικά με αυτή τη λειτουργία.

Πλήρες παράδειγμα παραμέτρων Apache2 Config

Ένα πλήρες απόσπασμα παραμέτρων του Apache2 (VirtualHost) μπορεί να μοιάζει με αυτό:

<IfModule mod_ssl.c>
  SSLPassPhraseDialog     "|/bin/echo 123456"
  <VirtualHost _default_:443>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    SSLEngine on

    SSLCertificateFile  "pkcs11:model=PKCS%2315%20emulated;manufacturer=www.CardContact.de;serial=DENK0105076;token=UserPIN%20%28SmartCard-HSM%29"

    #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
      SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
      SSLOptions +StdEnvVars
    </Directory>
  </VirtualHost>
</IfModule>