Apache 如何访问JBOSS 6 EAP icm AJP和SSL卸载中的X509 subject.serialnumber

Apache 如何访问JBOSS 6 EAP icm AJP和SSL卸载中的X509 subject.serialnumber,apache,ssl,jboss,x509,ajp,Apache,Ssl,Jboss,X509,Ajp,我们有以下配置: Apache 2.2反向代理,终止HTTPS以进行SSL卸载 公开SOAP服务的Jboss 6.1 EAP应用服务器 Apache的配置如本文所述 SOAP服务在无状态会话bean中实现。像这样: @WebContext( urlPattern = "/ba/test", authMethod = "BASIC", transportGuarantee = "NONE", secureWSDLAccess = false ) @Stateless @WebService @S

我们有以下配置:

  • Apache 2.2反向代理,终止HTTPS以进行SSL卸载
  • 公开SOAP服务的Jboss 6.1 EAP应用服务器
  • Apache的配置如本文所述

    SOAP服务在无状态会话bean中实现。像这样:

    @WebContext( urlPattern = "/ba/test", authMethod = "BASIC", transportGuarantee = "NONE", secureWSDLAccess = false  )
    @Stateless
    @WebService
    @SecurityDomain( "TestDomain" )
    @RolesAllowed("TestRole")
    public class TestSsb  {
    
        @WebMethod
        public String testMe(String in) {
            return "succeeded";
        }
    
    }
    
    已配置“TestDomain”

    在当前设置中,序列号通过专用HTTP头传输,我们在JBOSS配置xml文件中使用自定义登录模块。这很有效

    但是,我们希望尽可能应用标准机制。鉴于此设置并不奇怪,必须有一种方法可以访问登录模块配置中的X509证书信息(例如,使用)

    这里有两个问题:

  • 假设采用标准设置,其中SSL终止(似乎是一种身份验证)也由JBOSS执行
  • 这似乎是一种假设 该证书“所有者”用于授权,而我需要subject.serialnumber并为其分配“TestRole”

  • 我不知道如何继续下去。任何帮助都将不胜感激。

    解决方案是开箱即用的(经过一些尝试)。authMethod=“BASIC”必须设置为authMethod=“CLIENT-CERT”。因此:

    @WebContext(contextRoot=“aa/url”,urlPattern=“*”,authMethod= “客户端证书”,TransportGuarrance=“无”,secureWSDLAccess=false)

    接下来,您需要将角色/安全域指定为注释:

    @SecurityDomain(“MyCertWebserviceDomain”)
    @申报表(价值)= {“我的角色”})

    通过指定DatabaseCertLoginModule。

    <security-domain name="MyCertWebserviceDomain">
       <authentication>
           <login-module code="org.jboss.security.auth.spi.DatabaseCertLoginModule" flag="required">
                <module-option name="dsJndiName" value="java:jboss/datasources/DS"/>
                <module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/>
                <module-option name="rolesQuery" value="select role_name, 'Roles' from identity_role where identity IN(select regexp_replace(?, '.*SERIALNUMBER=([0-9]*), .*','\1') from dual)"/>
           </login-module>
        </authentication>
    </security-domain>
    
    
    
    角色(例如MY_角色)从数据库中获取,并根据证书中的序列号编制索引

    在JBOSS中,需要将协议设置为AJP

    现在可以从安全主体获取标识:
    sessionContext.getCallePrincipal().getName()