【发布时间】:2012-08-27 00:58:40
【问题描述】:
我使用 Sun Ws 实现编写了一个 Web Service 服务器,并使用 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 调用中添加标识信息)。
感谢您的帮助。
【问题讨论】:
-
您的 Web 服务是否在“Sun Ws 实现”中实现为 Servlet?如果是这样,
getUserPrincipal()给出了什么? (在HttpServletRequest。) -
在web服务实现中... @Resource WebServcieContext wsctx;
-
@martijno 在 Web 服务实现中... WebServcieContext wsctx; MessageContext mctx=wsctx.getMessageContext(); mctx.get(MessageContext.SERVLET_CONTEXT) ... 为空 mctx.get(MessageContext.SERVLET_REQUEST) ... 为空且 wsctx.getUserPrincipal() 为空。
标签: java web-services authentication certificate httpserver