Wie konfiguriere ich Tomcat für die Verwendung der SSL-Verschlüsselung mit dem auf einem Remote-Server gespeicherten privaten Schlüssel?

Wie konfiguriere ich Tomcat für die Verwendung der SSL-Verschlüsselung mit dem auf einem Remote-Server gespeicherten privaten Schlüssel?

Ich möchte wissen, ob es eine Möglichkeit gibt, Tomcat so zu konfigurieren, server.xmldass die SSL-Verschlüsselung mit einem privaten Schlüssel verwendet wird, der remote auf einem Server gespeichert ist. Ich kann mir vorstellen, dass die Serverkonfiguration ungefähr so ​​aussehen würde

Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
proxyPort=""
keystoreFile="{./script-return}/keystore.jks"
keystorePass="12345"
keystoreType="jks"
truststorePass="12345"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />

Aber die keystoreFileAnweisung soll auf ein Skript verweisen, das den privaten Schlüssel vom Remote-Server extrahiert.

Gibt es in der Tomcat-Konfiguration eine Möglichkeit, auf ein Shell-Skript zu verweisen, um den Schlüssel zu extrahieren?

Ich habe etwas gefunden überTrustManageraber ich sehe, dass der Pfad auf einen Dateisystempfad verweisen muss, was für mich keine Alternative ist.

Antwort1

Das "Extrahieren des Schlüssels" macht den Sinn der Verwendung eines HSM zunichte – es bedeutet, dass der private Schlüssel immer noch im Speicher von Tomcat gespeichert wäre (so dass er beispielsweise mit Heartbleed gestohlen werden könnte) und jeder, der sich den Schlüssel ansieht, ihn server.xmlimmer noch stehlen könnte, indem erFühren Sie dazu einfach den gleichen Befehl auswie Tomcat es tut.

Ihre Idee macht nur Sinn, wenn Sie Tomcat dazu bringen könnenSignaturanfragen sendenzum HSM. Dies erhöht die Latenz etwas (da jede einzelne TLS-Verbindung das HSM erreichen muss), aber es ist der einzige Ansatz, der tatsächlich etwas Sicherheit bietet.

(Es muss nicht einmal ein echtes HSM sein; es könnte sogar SoftHSM2 sein, das auf demselben System läuft, und es wäre immer noch sicherer, solange es den Schlüssel sicher auf einem Benutzerkonto und Tomcat auf dem anderen aufbewahrt.)

Verwenden eines PKCS#11-Moduls auf demselben System

Sie können diesen Abschnitt schnell vorspulen, aber die grundlegenden Schritte zur Verwendung von PKCS#11 mit Tomcat sind:

  1. Erstellen Sie eine Datei mit:/etc/java-<name>.cfg
    Name =<hsm_name>
    Bibliothek = /usr/lib/p11-kit-proxy.so
    (Passen Sie den Bibliothekspfad entsprechend Ihrer Distribution an. Die vollständige Dokumentation dieser Konfigurationsdatei finden Sie imJava PKCS#11-Handbuch.)
  2. Fügen Sie Ihrer java.securityDatei eine neue Zeile hinzu:
    Sicherheitsanbieter.Anzahl=sun.security.pkcs11.SunPKCS11 /etc/java-<Name>.cfg
  3. Führen Sie keytool aus und stellen Sie sicher, dass Ihr HSM-Inhalt angezeigt wird:
    Schlüsseltool --list --storetype PKCS11
  4. Konfigurieren Sie Tomcat abschließend für die Verwendung von PKCS#11:

    <Connector ...
               keystore="NONE"
               keystoreType="PKCS11"
               keystoreProvider="SunPKCS11-hsm_name"
               keystorePass="[HSM PIN here]" />
    

Verwenden eines PKCS#11-Moduls von einem Remote-Server

Derp11-bausatzDas Paket enthält zwei Komponenten, die dies erreichen können:

  1. Das p11-kit-proxy.soPKCS#11-Modul, das als Multiplexer fungiert und je nach Konfiguration so konfiguriert werden kann, dass es verschiedene andere Module lädt. Unter anderem kann es über eine Pipe mit einem Out-of-Process-Modul kommunizieren.

  2. Das p11-kit remoteTool, das als anderes Pipe-Ende für die Out-of-Process-Modulunterstützung von p11-kit fungiert. Es kann über SSH oder jeden anderen Tunnel verwendet werden.

Also zunächst zur HSM-Seite:

  1. Installieren Sie p11-kit und wählen oder erstellen Sie ein Benutzerkonto, das es verwenden wird.
  2. Erstellen Sie in diesem Benutzerkonto eine Datei, um p11-kit über Ihr HSM PKCS#11-Modul zu informieren. Der Inhalt der Datei besteht aus einer Zeile:~/.config/pkcs11/modules/<name>.module
    Modul: /usr/lib/<hsm_pkcs11_name>.Also
    (Alternativ können Sie dies auch im systemweiten Verzeichnis erstellen /usr/share/p11-kit/modules/.)
  3. Stellen Sie sicher p11-kit list, dass p11tool --list-tokensSie mit dem HSM arbeiten.

Hinweis: Die Schritte 2–3 sind für diesen Plan eigentlich nicht erforderlich. Sie sind nur vorhanden, damit mögliche Probleme frühzeitig erkannt werden können. Wenn sich herausstellt, dass p11-kit nicht mit dem HSM-Modul kompatibel ist, erspart Ihnen das einiges an Arbeit. (Und wenn es kompatibel ist, können Sie es verwenden, p11toolum es zu verwalten.)

Dann auf der Tomcat-Seite:

  1. Installieren Sie auch p11-kit.
  2. Erstellen Sie ein SSH-Schlüsselpaar für Tomcat und legen Sie es in den HSM-Konten authorized_keysfür die kennwortlose SSH-Nutzung ab.
  3. Erstellen Sie erneut eine Datei im Stammverzeichnis des Tomcat-Benutzerkontos, aber dieses Mal sollte der Dateiinhalt folgendermaßen aussehen:~/.config/pkcs11/modules/<name>.module
    Remote: |ssh-Benutzer@hsmserver p11-kit remote /usr/lib/<hsm_pkcs11_name>.Also
  4. Auch hier gilt: Stellen Sie sicher, dass p11-kit listalles p11tool --list-tokensfunktioniert. Sie sollten wie von Zauberhand eine SSH-Verbindung herstellen und Informationen zum Remote-HSM anzeigen.
  5. Um den Fernzugriff zu beschleunigen, aktivieren Sie die Verbindungsmultiplexierung in SSH über ~/.ssh/config:
    Gastgeberhsmserver
    ControlPath ~/.ssh/S.%r@%h:%p
    ControlMaster auto
    ControlPersist 1h

Wenn alles funktioniert, versuchen Sie es keytoolmit dem PKCS#11-Modul p11-kit-proxy:

  1. Erstellen Sie eine /etc/java-p11-kit.cfgDatei mit:
    Name = p11-kit- 
    Bibliothek = /usr/lib/p11-kit-proxy.so
    (Passen Sie den Bibliothekspfad entsprechend Ihrer Distribution an. Die vollständige Dokumentation dieser Konfigurationsdatei finden Sie imJava PKCS#11-Handbuch.)
  2. Fügen Sie Ihrer java.securityDatei eine neue Zeile hinzu:
    Sicherheitsanbieter.Anzahl=sun.security.pkcs11.SunPKCS11 /etc/java-p11-kit.cfg
  3. Führen Sie keytool aus und stellen Sie sicher, dass Ihr HSM-Inhalt angezeigt wird:
    Schlüsseltool --list --storetype PKCS11
  4. Konfigurieren Sie Tomcat abschließend für die Verwendung des PKCS#11-Moduls p11-kit-proxy:

    <Connector ...
               keystore="NONE"
               keystoreType="PKCS11"
               keystoreProvider="SunPKCS11-p11-kit"
               keystorePass="[HSM PIN here]" />
    

verwandte Informationen