Glassfish 3.1.2配置相互认证的客户端证书

时间:2012-04-20 23:00:29

标签: glassfish client certificate

我需要帮助配置GF3.1.2我已经做了以下更改,请告诉我,如果我遗漏任何重要的内容,因为更改后它不起作用。 我的身份证是nilesh2811@gmail.com

我在论坛中找不到任何特定的帖子或答案,如果有任何链接会有帮助。 如果您有任何相关文件,请转发。

请做必要的

的web.xml

<login-config>
  <auth-method>CLIENT-CERT</auth-method>
</login-config>
<security-constraint>
  <web-resource-collection>
    <web-resource-name>Entire Application</web-resource-name>
    <url-pattern>/faces/*</url-pattern>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <description/>
    <role-name>authorized</role-name>
  </auth-constraint>
  <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>
</security-constraint>
<security-role>
  <description/>
  <role-name>authorized</role-name>
</security-role>

sun-web.xml中

<security-role-mapping>
  <role-name>authorized</role-name>
  <principal-name>admin</principal-name>
  <group-name>authorized</group-name>
</security-role-mapping>

domain.xml中

<security-service>
  <auth-realm classname="com.sun.enterprise.security.auth.realm.file.FileRealm" name="admin-realm">
    <property name="file" value="${com.sun.aas.instanceRoot}/config/admin-keyfile"></property>
    <property name="jaas-context" value="fileRealm"></property>
  </auth-realm>
  <auth-realm classname="com.sun.enterprise.security.auth.realm.file.FileRealm" name="file">
    <property name="file" value="${com.sun.aas.instanceRoot}/config/keyfile"></property>
    <property name="jaas-context" value="fileRealm"></property>
  </auth-realm>
  <auth-realm classname="com.sun.enterprise.security.auth.realm.certificate.CertificateRealm" name="certificate">
    <property name="assign-groups" value="authorized"></property>
  </auth-realm>

4 个答案:

答案 0 :(得分:1)

您的web.xml中的login-config部分不完整

<login-config>
    <auth-method>CLIENT-CERT</auth-method>
    <realm-name>certificate</realm-name>
</login-config>

域名内容必须与domain.xml中auth-realm元素的name属性匹配,在您的情况下为“certificate”

[更新]

此外,必须在服务器的信任库

中导入CA证书
${com.sun.aas.instanceRoot}/config/cacerts.jks

答案 1 :(得分:0)

当有人第一次尝试时,他们需要时间来理解,用简单的话说,客户端和服务器信任存储应该互相信任,首先最好使用自签名证书交换证书到服务器和客户,可以使用以下文章寻求简化步骤的帮助。按照文章,然后您可以使用自己想要的方法证书。

http://www.slideshare.net/krizsan/scdjws-5-study-notes-3085287

SCDJWS 5 或者现在知道 Oracle认证专家, Java EE 5 Web服务开发人员 学习笔记 通过 Ivan A Krizsan 版本:2012年2月23日

答案 2 :(得分:0)

实际上我尝试使用glassfish 3.1.2并且它在以下条件下工作:

1.我必须在同一位置使用jks类型的相同密钥(信任)存储。为了与其他证书格式交谈,您必须将它们转换为jks格式可以处理的格式。

2.在glassfish-web.xml中你应该有这样的映射

    <security-role-mapping>
      <role-name>manager</role-name>   
    <group-name>authorized</group-name>
    </security-role-mapping>

3.在domain.xml文件中,您应该具有以下内容:

<auth-realm classname="com.sun.enterprise.security.auth.realm.certificate.CertificateRealm" name="certificate">
              <property name="assign-groups" value="authorized"></property>
            </auth-realm> 

注意:在web.xml中,您必须具有与domain.xml文件匹配的域名

答案 3 :(得分:0)

我有同样的问题。

在“http-listener-2”中设置“客户端身份验证:true”。