Glassfish 3.1.2 配置客户端证书以进行双向认证

3

我需要帮助配置GF3.1.2,我已经做了以下更改,请告诉我如果我遗漏了重要的内容,因为更改后它无法正常工作。 我的id是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>

请更具体地说明“不起作用”的情况。您正在构建什么类型的应用程序?您确定客户端是否正常工作? - TPete
具体来说,我的浏览器没有要求客户端证书,我想使用客户端证书对用户进行身份验证,我已经在Glassfish服务器上进行了特定的更改。 - user1347618
我有基于浏览器的Web应用程序,同时我拥有Comodo签名的客户端证书,我应该将其添加到keystore.jks或cacerts.jks中,另外它的根证书和中间证书应该放在cacerts.jks中吗?请告诉我,我认为这里可能有一些错误。同样,关于服务器证书,我应该在浏览器中安装它,对吗? - user1347618
Web服务客户端运行良好,是否需要针对基于浏览器的Web应用程序进行特定的证书交换?或者浏览器没有向服务器发送证书,我正在使用IE 8和Firefox,服务器证书是预安装的GlassFish,客户端证书是Comodo安全电子邮件。 - user1347618
它也可以与Web浏览器一起使用,我曾经使用过Comodo / Home PKI证书,但现在已经删除了,改用自签名/Verisign客户端证书,现在它正常工作。这是我第一次进行客户端身份验证! - user1347618
显示剩余4条评论
4个回答

1

实际上,我尝试在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文件匹配的领域名称。

<login-config> <auth-method>CLIENT-CERT</auth-method> <realm-name>certificate</realm-name> </login-config> - Khurshed Salimov
感谢Khurshed抽出时间来回答这个问题。 - user1347618

1

你的 web.xml 文件中的 login-config 部分不完整

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

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

[更新]

此外,CA证书必须导入服务器的信任存储库中

${com.sun.aas.instanceRoot}/config/cacerts.jks

服务器的密钥库包含服务器证书,而不是客户端证书。 - TPete
我在浏览器存储中有两个个人证书,但连接时没有询问或提示选择客户端认证的证书? - user1347618
我有Comodo签名的客户端证书,我应该将其添加到keystore.jks还是cacerts.jks中?此外,它的根证书和中间证书应该放在cacerts.jks中吗?请告诉我,我认为这里可能有一些错误。同样关于服务器证书,我应该在浏览器中安装它,对吗? - user1347618
现在我正在尝试设置Glassfish,没有任何应用程序,只是为客户端身份验证设置的简单Glassfish,https://localhost:8181/。 - user1347618
当使用 Web 服务客户端时,握手顺利进行,但仅在通过 Web 浏览器连接时证书交换未发生。当客户端尝试呈现客户端证书时,会出现无证书错误。有什么建议可以在 Web 浏览器和服务器之间交换证书吗? - user1347618
显示剩余6条评论

0

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

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

SCDJWS 5,现在也被称为Oracle认证专业人士,Java EE 5 Web服务开发者学习笔记,作者是Ivan A Krizsan,版本日期:2012年2月23日。


0

设置

Client Authentication: true

http-listener-2 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接