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

Συμβουλή

Η ίδια ακριβώς έννοια που περιγράφεται εδώ μπορεί να χρησιμοποιηθεί για πολλές εφαρμογές που χρησιμοποιούν το openssl ως κρυπτο-υπολογιστή. Η ιδέα συνοψίζεται κυρίως στο εξής: αντικατάσταση του (μυστικού) αρχείου κλειδιού με PKCS#11 URL που παραπέμπει σε ένα κλειδί σε ένα σύμβολο ασφαλείας (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>