1

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

我已经按照 jave ee 5、java ee 6 教程 http://docs.oracle.com/javaee/6/tutorial/doc/glien.html中的说明完成了所有操作

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

问题:

当我部署我的应用程序并点击与应用程序相对应的链接时,我收到来自 glassfish 服务器 HTTP 状态 400 的消息 - 此请求中没有客户端证书链”。

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

我尝试将 .cer 证书添加到 Chrome、firefox、Internet Explorer 并添加它们(不显示错误),但正如您所见,这没有帮助。

所以,问题是:

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

4

1 回答 1

1

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

-Djavax.net.debug=all

有关详细信息,请参阅此页面

您还可以使用 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 签发

于 2012-04-12T08:39:42.290 回答