Java 8を実行していて、com.sun.net.httpserver.HttpsServer
を使用してHTTPSサーバーを作成しています。私は、Java KeyStoreで信頼できるCA署名EC証明書を使用して実装しています。Java HttpsServer - 強制TLSv1.1
私は、サーバーがサポートしている暗号とプロトコル(構成で "SSLProtocol"と "SSLCipherSuite"を使用しているApacheに似ています)をどのように制限できるかを見てきました - 主に使用を無効にすることにより、 SHA-1の
誰もが本当に1.2上TLSv1.1を強制すべきではないが、私はちょうど、以下の構成が機能することのポイントを証明するためにこれをやっている:
KeyStore ks = KeyStore.getInstance("JKS");
// Load KeyStore into "ks"
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, jksPassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(ks);
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
HttpsServer hsS = HttpsServer.create(sBind, 0);
hsS.setHttpsConfigurator(new HttpsConfigurator(sc) {
@Override
public void configure(HttpsParameters p) {
try {
SSLContext c = getSSLContext();
SSLEngine e = c.createSSLEngine();
p.setNeedClientAuth(false);
p.setProtocols(new String[] { "TLSv1.1" });
p.setCipherSuites(e.getEnabledCipherSuites());
p.setSSLParameters(c.getDefaultSSLParameters());
}
catch (Exception e) {
e.printStackTrace();
}
}
});
私だけ「のTLSv1を受け入れるためにsetProtocols()
を使用していますが。 1 "の場合、これは" TLSv1.2 "接続を停止するようには見えず、ChromeからIEまでのすべてがまだ" TLSv1.2 "を使用しています。 IEで "TLSv1.2"と "TLSv1.1"の使用を無効にして "TLSv1.0"を有効にしておくと、それでも "TLSv1.0"が機能し、ネゴシエートされます。 setProtocols()
メソッドは何もしないようです!
私がこれを働かせたら、私はsetCipherSuites()
を使って暗号のリストを修正しようとしていました。
これはいいですが、これをプログラムで行うには 'setProtocols()'と 'setCipherSuites()'のポイントがありませんか?私は必ずしもサーバー全体でグローバルに変更したいと思うかもしれません(またはアクセス権を持っているかもしれません)。 – chrixm