9

我使用 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();
       ...

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

谢谢您的帮助。

4

2 回答 2

3

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

抽象SSLSession getSSLSession();

在许多其他事情中,SSLSession 公开了对等身份

于 2012-09-22T02:20:17.000 回答
-3

getUserPrincipal()给你证书httpservletrequest

于 2015-02-23T08:47:46.740 回答