私は、SOAP認証Webサービス(主にthis SO answerの影響を受ける)用にJava認証用HTTPSサーバ(com.sun.net.httpserver.HttpsServer
を使用)を開発しました。これは、私は、サーバーの構成コードを使用されていますJava HTTPSサーバ:相互SSL認証
final InetSocketAddress address = new InetSocketAddress(localhost, 8888);
this.httpsServer = HttpsServer.create(address, 0);
// ... KeyStore configuration ...
// configure the HTTPS server
this.httpsServer.setHttpsConfigurator(new HttpsConfigurator(sslContext)
{
@Override
public void configure(final HttpsParameters params)
{
try
{
// initialize the SSL context
final SSLContext c = SSLContext.getDefault();
final SSLEngine engine = c.createSSLEngine();
params.setNeedClientAuth(true);
params.setCipherSuites(engine.getEnabledCipherSuites());
params.setProtocols(engine.getEnabledProtocols());
// get the default parameters
final SSLParameters defaultSSLParameters = c.getDefaultSSLParameters();
params.setSSLParameters(defaultSSLParameters);
}
catch (final Exception e)
{
LOG.error(ExceptionUtils.getStackTrace(e));
}
}
});
しかし、クライアントからの接続時に、私は、クライアント認証が適用されていないことに注意してください!私は現在localhost上で自己署名証明書を使ってテストしていますが、クライアントがに接続できるようです。私はSoapUI(私のknowlegdeに証明書を送るように設定していない)と、証明書の有無にかかわらずクライアントモードでopensslを使ってテストしました。
openssl s_client -cert client.pem -connect localhost:8888 -debug
openssl s_client -connect localhost:8888 -debug
は、私はすでにJavaオプション-Djavax.net.debug=all
でサーバーを開始しているが、クライアント認証またはクライアントがその証明書を提示しなければならない要求を示す任意の適切な部分を見ていません。 私はクライアントが実際にサーバーの証明書を検証するのを見ます!
有効な証明書を提示していないクライアントを拒否したいとします。これどうやってするの?
。以下のコード例を参照してください。http://stackoverflow.com/questions/36819113/how-to-require-client-certificate-with-com-sun-net-httpserver-httpsserver – Mike
はい、このコードは関連性がないため省略されていますこの問題のために。 –