如何在Web服务的Java HttpsServer实现中获取客户端证书?

use*_*562 9 java authentication web-services certificate httpserver

我使用Sun Ws实现编写了一个Web服务服务器,并使用HttpsServer进行发布(TLS相互身份验证).

        httpServer=HttpsServer.create(...);
        ssl=SSLContext.getInstance("TLS");
        ...
        ssl.init(keyFactory.getKeyManagers(),trustFactory.getTrustManagers(),new SecureRandom());
        configurator=new HttpsConfigurator(ssl) {
           public void configure (HttpsParameters params) 
           {
               SSLContext context; 
               SSLParameters sslparams;

               context=getSSLContext();
               sslparams=context.getDefaultSSLParameters();
               sslparams.setNeedClientAuth(true);
               params.setSSLParameters(sslparams);
           }
       }; 
       ((HttpsServer)httpServer).setHttpsConfigurator(configurator);
       ...
       endPoint=getSunWsProvider().createEndPoint(...);
       httpContext=httpServer.createContext(...);
       endPoint.publish(httpContext);
       httpServer.start();
       ...
Run Code Online (Sandbox Code Playgroud)

一切正常.当客户端执行Web服务的服务器端实现时,我想知道哪个客户端正在执行代码(以管理权限).知道每个客户端都有自己的证书,如何在Web服务调用之前获取用于TLS协商的客户端证书?(我更愿意找到基于客户端证书分析的解决方案,而不是为每个Web服务调用添加标识信息).

谢谢您的帮助.

Ser*_*rge 3

在你的处理程序中,你得到的不是实例,而是具有额外方法HttpExchange的其子类的实例:HttpsExchange

抽象SSLSession getSSLSession();

SSLSession 暴露了对等身份的许多其他内容