有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安全性如何验证配置相互身份验证(客户端证书、服务器证书)Java EE的正确性?

我正在尝试编写一个简单的应用程序,以了解基于客户端和服务器证书配置身份验证的基础知识

我已经完成了jave ee 5、java ee 6教程中解释的所有工作 http://docs.oracle.com/javaee/6/tutorial/doc/glien.html

  1. 打开javaee教程中的示例hello basicauthorization(只是简单的servlet,只有在身份验证后才能访问),然后将其重新配置为客户端证书,而不是基本授权
  2. 已配置网络。xml
  3. 配置了玻璃鱼网。xml
  4. 生成的客户端证书
  5. 已导入客户端证书,以便服务器信任它

问题是:

当我部署应用程序并遵循与该应用程序对应的链接时,我从glassfish服务器HTTP Status 400收到一条消息——此请求中没有客户端证书链”

因此,客户端(浏览器)似乎没有随请求一起发送证书

我试着添加。将cer证书添加到Chrome、firefox和internet explorer中(不会显示任何错误),但正如您所见,这并没有帮助

所以,问题是:

如何通过具有客户端的web浏览器访问我的应用程序。cer证书


共 (1) 个答案

  1. # 1 楼答案

    通过添加(Glassfish中的某个地方)系统属性,可以在服务器端调试ssl:

    -Djavax.net.debug=all
    

    详见this page

    您还可以使用openssl工具从客户端角度进行调试:

    openssl s_client -connect host:port -debug -msg
    

    你应该看到这样的东西:

    ...
    Acceptable client certificate CA names
    /C=PL/O=company/OU=xx/CN=host/emailAddress=email@example.com
    /C=PL/O=company/OU=xx/CN=ca/emailAddress=email@example.com
     -
    SSL handshake has read 2536 bytes and written 116 bytes
    ...
    

    您的问题可能与服务器端错误的信任库配置有关-服务器发送一些可接受的客户端证书CA名称(或者根本没有),但浏览器没有提供任何内容-它没有可接受的CA颁发的任何私钥+证书