首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java的自定义SSL TrustManager

Java的自定义SSL TrustManager
EN

Stack Overflow用户
提问于 2011-10-19 02:18:32
回答 1查看 1.9K关注 0票数 3

我正在尝试为B2B的web服务设置SSL连接,并且需要在服务器上进行客户端身份验证。由于服务器承载的URL也可以通过浏览器从常规用户访问,所以并不是所有到主机的连接都需要进行客户端-auth。只有特定的URL才需要客户端-auth来验证调用方X509证书。我们使用的是JBoss 5.x,它基于Tomcat5.x,因此我有如下所示的连接器配置:

代码语言:javascript
复制
      <Connector protocol="HTTP/1.1" SSLEnabled="true" 
       port="8443" address="${jboss.bind.address}" sslProtocol = "TLS" 
       scheme="https" secure="true"  enableLookups="true" clientAuth="false"
       keystoreFile="${jboss.server.home.dir}/conf/.myKeyStore"
       keystorePass="password1" />

如您所见,我配置了一个密钥存储库,这样我们就可以提供我们的签名证书,并且我有clientAuth=false作为需要客户端的特定URL,在web.xml中配置如下所示:

代码语言:javascript
复制
<security-constraint>
    <web-resource-collection>
        <web-resource-name>clientAuthResources</web-resource-name>
        <url-pattern>/clientauth/*</url-pattern>
         <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>authOnly</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<login-config>
    <auth-method>CLIENT-CERT</auth-method>
     <realm-name>myRealm</realm-name>
</login-config>
  <security-role>
    <role-name>authOnly</role-name>
</security-role>

通过一个定制的JAAS模块,如果在上面的连接器配置中,我还指定了一个具有客户端证书的信任库,我实际上可以让它工作。这就是我的问题所在。考虑到应用程序的设置和扩展方式,每个jboss应用服务器安装程序都支持特定的用户分段,我不希望信任库在文件系统上的所有位置进行配置。我们需要从数据库中动态地在代码中加载受信任的证书。自定义JAAS登录模块在web级别执行此操作,并且它还指定角色,但是如果没有连接器信任存储,登录模块将永远不会被调用,在HTTP getes涉及之前,连接将在SSL级别终止。

在对web进行了大量研究之后,我确定我需要在SSLContext/SSLSocketFactory中配置一个自定义X509TrustManager来解决这个问题。此自定义信任管理器还将验证存储在数据库中的客户端证书。我已经创建了这个自定义信任管理器,但是我似乎无法将它连接起来。有人知道如何在jboss或tomcat5.x中配置吗?我注意到在Tomcat 7中,连接器trustManagerClassName上有以下配置,但是这对我来说不是一个选项。我认为这是可能的,任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2011-12-05 22:28:51

您可以编写自己的org.apache.tomcat.util.net.jsse.JSSEImplementation,并在连接器的SSLImplementation属性中传递它的完整类名。

见这里的例子:

  • http://code.google.com/p/jsslutils/wiki/ApacheTomcatUsage
  • http://code.google.com/p/jsslutils/source/browse/trunk/extra/apachetomcat5/src/main/java/org/jsslutils/extra/apachetomcat5/JSSLutilsImplementation.java
  • http://code.google.com/p/jsslutils/source/browse/trunk/extra/apachetomcat5/src/main/java/org/jsslutils/extra/apachetomcat5/JSSLutilsJSSESocketFactory.java
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7815859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档