Jboss 用于Java应用服务器的自定义SSL TrustManager

Jboss 用于Java应用服务器的自定义SSL TrustManager,jboss,x509,connector,truststore,Jboss,X509,Connector,Truststore,我正在尝试为B2B web服务设置SSL连接,并且需要在服务器上执行客户端身份验证。由于服务器承载的URL也可以通过浏览器从普通用户访问,因此并非所有到主机的连接都需要进行客户端身份验证。只有特定的URL需要客户端身份验证才能验证呼叫者X509证书。我们使用的是JBoss 5.x,它基于Tomcat 5.x,因此我有如下连接器配置: <Connector protocol="HTTP/1.1" SSLEnabled="true" port="8443" addr

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

      <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中配置,如下所示:

<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>

客户端资源
/克利恩塔斯/*
得到
邮递
authOnly
保密的
客户端证书
我的王国
authOnly
通过一个自定义JAAS登录模块,如果在上面的连接器配置中我还指定了一个具有客户端证书的信任库,那么我实际上可以让它工作。这就是我的问题所在。考虑到应用程序的设置和扩展方式,每个jboss应用程序服务器设置都支持用户的特定分段,我不希望在文件系统中到处配置信任库。我们需要在数据库的代码中动态加载可信证书。自定义JAAS登录模块在web级别执行此操作,它还分配角色,但是如果没有连接器信任库,登录模块将永远不会被调用,连接将在涉及HTTP之前在SSL级别终止


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

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

请参见此处的示例: