Java サーバー アプリケーションでセキュアなリッスン ソケットを開きたいと考えています。これを行うための推奨される方法は、これを行うことです。
SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
ServerSocket ss = ssf.createServerSocket(443);
ただし、これには、Java の起動時にサーバーの証明書を JVM に渡す必要があります。これにより展開が複雑になるため、実行時に証明書をロードすることをお勧めします。
キーファイルとパスワードがあり、サーバーソケットが必要です。どうやってそこまで行くの?さて、私はドキュメントを読みましたが、私が見つけることができる唯一の方法はこれです:
// these are my parameters for SSL encryption
char[] keyPassword = "P@ssw0rd!".toCharArray();
FileInputStream keyFile = new FileInputStream("ssl.key");
// init keystore
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(keyFile, keyPassword);
// init KeyManagerFactory
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, keyPassword);
// init KeyManager
KeyManager keyManagers[] = keyManagerFactory.getKeyManagers();
// init the SSL context
SSLContext sslContext = SSLContext.getDefault();
sslContext.init(keyManagers, null, new SecureRandom());
// get the socket factory
SSLServerSocketFactory socketFactory = sslContext.getServerSocketFactory();
// and finally, get the socket
ServerSocket serverSocket = socketFactory.createServerSocket(443);
そして、それにはエラー処理さえありません。本当にそんなに複雑ですか?もっと簡単にできる方法はありませんか?