是否可以从SOAP Web服务保存客户端证书?

时间:2015-08-06 18:50:14

标签: java web-services ssl soap glassfish

我一直在尝试使用GlassFish作为Web服务器和SOAP UI来实现基于数字证书的身份验证和授权,以测试我的应用程序的功能但作为身份验证过程的一部分,我需要从所有消息信息中保存日志,包括在客户端的glassfish的cacerts文件中找到的别名,它使用Web服务和消息内容。

实际上是否可以从应用程序层执行此操作?我已尝试在服务器端使用Message和Logical处理程序但我无法看到与数字证书相关的任何内容,我唯一的线索就是SOAP UI从客户端获取服务器证书。

1 个答案:

答案 0 :(得分:0)

经过一些研究,有些人对此失败了,我最终将证书详细信息添加到Web描述符上的项目并从中捕获用户名,之后找到该用户名的别名,最后在TrustStore中搜索别名以获取公钥。

首先在web.xml文件中,我们需要添加身份验证的详细信息:

<!-- Security constraint for resource only accessible to role -->
<security-constraint>
  <display-name>WebServiceSecurity</display-name>

  <web-resource-collection>
    <web-resource-name>Authorized users only</web-resource-name>
    <url-pattern>/ExampleWSService</url-pattern>
    <http-method>POST</http-method>
  </web-resource-collection>

  <auth-constraint>
    <role-name>user</role-name>
  </auth-constraint>

</security-constraint>  

<!-- BASIC authorization -->
<login-config>
  <auth-method>CLIENT-CERT</auth-method>
</login-config>

<!-- Definition of role -->
<security-role>
  <role-name>user</role-name>
</security-role>

在sun-web.xml上,我们添加角色映射和客户端的详细信息,可以使用公钥检索。

<sun-web-app>
  <security-role-mapping>
    <role-name>user</role-name>
      <!-- <group-name>wsusers</group-name> -->
     <principal-name>CN=Name, OU=Department, O=Organization, L=City, ST=State, C=nl</principal-name>
  </security-role-mapping>
  <security-role-mapping>
    <role-name>user</role-name>
    <group-name>wsusers</group-name>
  </security-role-mapping>
</sun-web-app>

基于本教程:http://javaeenotes.blogspot.com/2010/10/securing-jax-ws-web-services.html