Glassfish 4基于证书的客户端身份验证

时间:2016-03-07 17:14:23

标签: authentication ssl-certificate client-certificates glassfish-4.1

我试图为基于证书的客户端身份验证设置我的开发环境几天,并且它不想工作。我使用Glassfish 4文档(安全指南)并根据其自行签名的客户端证书进行测试,但我不确定我缺少什么,因为没有完整的描述整个过程。当我为我的Http-Listener启用客户端身份验证并且在服务器日志中没有收到任何错误消息时,但是当我尝试从浏览器连接时,我无法与服务器建立连接。如果没有此选项,我的Web应用程序工作正常。在chrome中我看到以下消息:

  

无法访问此网站

     

127.0.0.1拒绝连接。

     

ERR_CONNECTION_REFUSED

在Firefox中:

  

页面加载时,与192.168.1.9:8181的连接中断。

所以对我而言,似乎有些事情(不幸的是我无法理解究竟是什么)正在发生,但是无法建立联系。

由于设置非常复杂,我正在寻找具有分步指导的教程或操作方法页面,但任何帮助和建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

好的,我终于知道它是如何工作的:)我在书中找到了非常好的一步一步的说明 Java EE 7 with GlassFish 4 Application Server ,第9章, cerrtificate领域(第247页) 一个人必须基本完成以下3个步骤:

  1. 创建客户端证书 1.1生成自签名证书:
  2.   

    keytool -genkey -v -alias myalias -keyalg RSA -storetype PKCS12 -keystore clientCert_1.p12 -storepass wonttellyou -keypass wonttellyou

    1.2在浏览器中导入 注意!:当没有导入证书时,浏览器不会要求它,而是返回连接错误消息,这对我来说是非常误导的。

    1. 将步骤1中的证书导出为Glassfish可以理解的格式
    2.   

      keytool -export -alias myalias -keystore clientCert_1.p12 -storetype PKCS12 -storepass wonttellyou -rfc -file clientCert_1.cer

      RESULT =>证书存储在文件clientCert_1.cer

      1. 由于我们发布了自签名证书,为了让GlassFish接受我们的证书,我们需要将其导入cacerts密钥库。
      2.   

        keytool -import -v -trustcacerts -alias myalias -file clientCert_1.cer -keystore ../cacerts.jks -keypass changeit -storepass changeit

        注意

        • 部分:-import -v -trustcacerts不在书中,但没有 keytool 可能会导致抛出异常。
        • changeit 是默认的glassfish密码

        最后,需要为基于证书的客户端身份验证设置应用程序服务器,该服务器有两部分。第一个是将登录配置添加到 web.xml

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

        第二个是在 glassfish-web.xml 中配置角色映射,以便您的应用程序具有该登录的相应角色。它看起来像这样:

         ... 
         <security-role-mapping>
            <role-name>YOUR_ROLE</role-name>
            <group-name>YOUR_GROUP</group-name>
            <principal-name>CN=Test User, OU=n/a, O=Test User, L=Cologne, ST=NRW, C=DE</principal-name>
         </security-role-mapping>
        ...
        

        有关密钥生成和设置glassfish的更多详细信息,请参阅本书。

        最后还有一件让我感到困惑的事情。通过管理界面,您可以找到现有 http-listener SSL 配置选项卡。您必须启用客户端身份验证选项!