Nginx#

Μπορείτε να ρυθμίσετε το nginx να χρησιμοποιεί το NetHSM μέσω της μηχανής OpenSSL, η οποία στη συνέχεια χρησιμοποιεί την ενότητα PKCS#11 του NetHSM.

Το αρχείο πιστοποιητικού πρέπει να βρίσκεται στο δίσκο, αλλά το ιδιωτικό κλειδί μπορεί να χρησιμοποιηθεί από το NetHSM.

Ένα πλήρες παράδειγμα είναι διαθέσιμο παρακάτω.

Διαμόρφωση OpenSSL#

Ρυθμίστε τη μηχανή OpenSSL ακολουθώντας τον οδηγό εγκατάστασης της μηχανής OpenSSL Engine.

Οι πάροχοι δεν υποστηρίζονται ακόμα από το Nginx.

Σημείωση

Η χρήση της μηχανής libp11 OpenSSL έκδοση 0.4.12 ή παλαιότερη και ενός NetHSM με πολλά κλειδιά θα κάνει την αρχική φόρτωση του Nginx αργή (περισσότερο από ένα λεπτό για 1.000 κλειδιά). Συνιστάται η χρήση της έκδοσης 0.4.13 ή νεότερης ή η κατασκευή της μηχανής από το source.

Διαμόρφωση Nginx#

ssl_engine pkcs11;

server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /certs/certificate.pem;

    ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  10s;
    ssl_session_tickets off;

    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers  off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Το ssl_certificate πρέπει να παραπέμπει σε ένα αρχείο πιστοποιητικού στο δίσκο.

Το ssl_certificate_key μπορεί να είναι μια διαμόρφωση OpenSSL. Εδώ χρησιμοποιούμε τη μηχανή OpenSSL με τη μονάδα PKCS#11 και επιλέγουμε το ιδιωτικό κλειδί με την ετικέτα/ID webserver και τον τύπο κλειδιού private.

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private";

Σημείωση

Πρέπει να δημιουργήσετε το πιστοποιητικό ξεχωριστά και στη συνέχεια να το μεταφορτώσετε στο NetHSM. Εάν το πιστοποιητικό στο δίσκο και το κλειδί στο NetHSM δεν ταιριάζουν, το nginx δεν θα ξεκινήσει.

libnethsm_pkcs11 Διαμόρφωση#

slots:
  - label: LocalHSM
    description: Local HSM (docker)
    url: "https://192.168.3.161:8443/api/v1"
    operator:
      username: "operator"
      password: "opPassphrase"

Για να ασφαλίσετε τον κωδικό πρόσβασης μπορείτε να τον δώσετε μέσω μιας μεταβλητής περιβάλλοντος (βλ. Setup) ή να τον δώσετε στις ρυθμίσεις του nginx:

ssl_certificate_key "engine:pkcs11:pkcs11:object=webserver;type=private;pin=opPassphrase";

Παράδειγμα#

Αν θέλετε να πειραματιστείτε με το παράδειγμα που δίνεται χρησιμοποιήστε το git για να κλωνοποιήσετε το αποθετήριο nethsm-pkcs11 και εκτελέστε τις ακόλουθες εντολές:

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

Η εκτέλεση του σεναρίου generate διαγράφει το κλειδί webserver και το αντικαθιστά.

  1. Διαμορφώστε ένα NetHSM, είτε ένα πραγματικό είτε ένα δοχείο. Ανατρέξτε στον οδηγό getting-started guide για περισσότερες πληροφορίες. Εκτός από έναν διαχειριστή, θα χρειαστείτε και έναν λογαριασμό χειριστή.

  2. Κατεβάστε και εγκαταστήστε την τελευταία έκδοση του προγράμματος οδήγησης nethsm-pkcs11 που είναι διαθέσιμο από εδώ.

  3. Εγκαταστήστε τη μηχανή OpenSSL PKCS11 όπως περιγράφεται στο εγχειρίδιο OpenSSL Manual. Δεν χρειάζεται να δημιουργήσετε ένα αρχείο ρυθμίσεων.

  4. Προσαρμόστε τις μεταβλητές HOST, ADMIN_ACCOUNT και ADMIN_ACCOUNT_PWD στο container/nginx/generate.sh έτσι ώστε HOST να περιέχει τη διεύθυνση URL και τη θύρα του NetHSM σας, ADMIN_ACCOUNT να περιέχει το όνομα χρήστη ενός λογαριασμού διαχειριστή και ADMIN_ACCOUNT_PWD τον αντίστοιχο κωδικό πρόσβασης. Ρυθμίστε περαιτέρω την απόλυτη διαδρομή της μηχανής OpenSSL PKCS11 στο OPENSSL_PKCS11_ENGINE_PATH και την απόλυτη διαδρομή της βιβλιοθήκης NetHSM PKCS11 στο NETHSM_PKCS11_LIBRARY_PATH.

  5. Δημιουργήστε ένα αρχείο ρυθμίσεων NetHSM PKCS11 σε μία από τις γνωστές τοποθεσίες ` <pkcs11-setup.html#configuration>` __, π.χ. /etc/nitrokey/p11nethsm.conf. Πρέπει να έχει διαμορφωθεί ένας λογαριασμός χειριστή και να χρησιμοποιεί την ίδια περίπτωση NetHSM που καθορίστηκε προηγουμένως στο σενάριο δημιουργίας.

  6. Ενημερώστε τη ρύθμιση παραμέτρων PKCS11 στο container/nginx/p11nethsm.conf με τη διεύθυνση URL του NetHSMs και τα έγκυρα διαπιστευτήρια του χειριστή σας.

  7. Δημιουργήστε το πιστοποιητικό και το κλειδί.

./container/nginx/generate.sh
  1. Κατασκευάστε το δοχείο.

docker build -f container/nginx/Dockerfile . -t pkcs-nginx
  1. Εκτελέστε το εμπορευματοκιβώτιο.

docker run -p 9443:443 -p 9080:80 pkcs-nginx

Η δοκιμαστική σελίδα NGINX θα είναι διαθέσιμη στη διεύθυνση https://localhost:9443/. Σημειώστε ότι το πρόγραμμα περιήγησής σας, ελπίζουμε ότι θα σας προειδοποιήσει ότι το πιστοποιητικό του ιστότοπου είναι αυτο-υπογεγραμμένο.