Festlegen des von einer Java SSL ServerSocket verwendeten Zertifikats

8

Ich möchte einen sicheren abhörenden Socket in einer Java-Server-Anwendung öffnen. Ich weiß, dass der empfohlene Weg dies zu tun ist:

%Vor%

Dies erfordert jedoch, dass beim Start von Java das Zertifikat des Servers an die JVM übergeben wird. Da dies einige Dinge in der Bereitstellung für mich komplizierter machen würde, würde ich es vorziehen, das Zertifikat zur Laufzeit zu laden.

Also habe ich eine Schlüsseldatei und ein Passwort und ich möchte einen Server-Socket. Wie komme ich dort hin? Nun, ich lese die Dokumentation und der einzige Weg, den ich finden könnte ist:

%Vor%

Und das hat nicht einmal eine Fehlerbehandlung. Ist das wirklich kompliziert? Gibt es keinen einfacheren Weg?

    
Philipp 11.09.2012, 13:02
quelle

2 Antworten

9
  

Dies erfordert jedoch, dass das Zertifikat des Servers an die JVM übergeben wird, wenn Java gestartet wird.

Nein, tut es nicht. Legen Sie diese Systemeigenschaften einfach fest, bevor Sie SSLServerSocket:

erstellen %Vor%

Sie können das mit System.setProperties() oder in der Befehlszeile machen.

    
EJP 11.09.2012, 23:31
quelle
2

Wenn Sie sich den Code ansehen, können Sie sehen, warum er notwendigerweise kompliziert ist. Dieser Code entkoppelt die Implementierung des SSL-Protokolls von:

  • die Quelle Ihres Schlüsselmaterials ( KeyStore )
  • Auswahl des Zertifikatalgorithmus und Schlüsselverwaltung ( KeyManager )
  • Verwaltung von Peer-Trust-Regeln ( TrustManager ) - hier nicht verwendet
  • sicherer zufälliger Algorithmus ( SecureRandom )
  • NIO- oder Socket-Implementierung ( SSLServerSocketFactory ) - könnte SSLEngine für NIO
  • verwenden

Überlegen Sie, wie Ihre eigene Implementierung aussehen würde, wenn Sie versuchen würden, die gleichen Ziele zu erreichen!

    
David Grant 11.09.2012 14:15
quelle

Tags und Links