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?
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:
Sie können das mit System.setProperties()
oder in der Befehlszeile machen.
Wenn Sie sich den Code ansehen, können Sie sehen, warum er notwendigerweise kompliziert ist. Dieser Code entkoppelt die Implementierung des SSL-Protokolls von:
KeyStore
) KeyManager
) TrustManager
) - hier nicht verwendet SecureRandom
) SSLServerSocketFactory
) - könnte SSLEngine
für NIO Überlegen Sie, wie Ihre eigene Implementierung aussehen würde, wenn Sie versuchen würden, die gleichen Ziele zu erreichen!