0

TLS を使用する単純な JAX-WS スタンドアロン サーバーがあります。

SSLContext ssl = SSLContext.getInstance("TLS");

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());
store.load(new FileInputStream(keystoreFile), keyPass.toCharArray()); 

kmf.init(store, keyPass.toCharArray());
KeyManager[] keyManagers = new KeyManager[1];
keyManagers = kmf.getKeyManagers();

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(store);
TrustManager[] trustManagers = tmf.getTrustManagers();
ssl.init(keyManagers, trustManagers, new SecureRandom());

HttpsConfigurator configurator = new HttpsConfigurator(ssl);
HttpsServer httpsServer = HttpsServer.create(new InetSocketAddress("localhost", 8443), 8443);
httpsServer.setHttpsConfigurator(configurator);   

HttpContext context = httpsServer.createContext("/test");
httpsServer.start();

endpoint.publish(context);

Web サービスを使用する前に、クライアント証明書を使用して相互認証を作成したいと考えています。また、クライアントがDNやその他の証明書属性を読み取るために使用した証明書を確認したいと思います。

どうすればいいですか?

4

1 に答える 1

0

最後に、私はそれを機能させました。

相互認証は、次のようsetNeedClientAuthに構成できます。SSLParameters

HttpsConfigurator configurator=new HttpsConfigurator(ssl) {
    public void configure (HttpsParameters params) 
            {
                SSLContext context; 
                SSLParameters sslparams;

                context=getSSLContext();
                sslparams=context.getDefaultSSLParameters();
                sslparams.setNeedClientAuth(true);
                params.setSSLParameters(sslparams);
            }
        };

クライアント証明書は、必要に応じて からチェックおよび解析できますSSLSession。このクラスは、Web サービス クラスのリソースとしてロードできます。

@Resource
private WebServiceContext context;

HttpsExchange exchange = (HttpsExchange) context.getMessageContext().get(JAXWSProperties.HTTP_EXCHANGE);
SSLSession sslsession = exchange.getSSLSession();

sslsession.getPeerCertificates();
于 2016-07-17T12:04:52.263 に答える