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

Posted

技术标签:

【中文标题】如何在 Web 服务的 Java HttpsServer 实现中获取客户端证书?【英文标题】:How to get client certificate in a Java HttpsServer implementation for a webservice? 【发布时间】: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() 为空。 【参考方案1】:

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

抽象SSLSessiongetSSLSession();

除其他外,SSLSession 公开对等身份

【讨论】:

【参考方案2】:

getUserPrincipal() 为您提供httpservletrequest 中的证书。

【讨论】:

不,它没有。它给你一个校长。

以上是关于如何在 Web 服务的 Java HttpsServer 实现中获取客户端证书?的主要内容,如果未能解决你的问题,请参考以下文章

我如何将在本地工作的 Web 服务(REST api,在 java 中)上传到主机服务器

Java如何与Web服务器连接?

如何使用 java 对 Web 服务进行负载测试?

如何从 Java 类调用 SOAP Web 服务?

如何在专用网络中部署 Java Web 服务

Java中如何让web服务器启动的时候自动运行web程序中某个类的某个