2012-04-12 95 views
1

我正在尝试编写一个简单的应用程序,以了解基于客户端和服务器证书配置身份验证的基础知识。如何验证配置相互认证(客户端证书,服务器证书)Java EE的正确性?

我所做的一切,因为它是在java的EE 5,Java EE的解释6个教程 http://docs.oracle.com/javaee/6/tutorial/doc/glien.html

    从JavaEE的教程
  1. 打开示例Hello basicauthorization(只是简单的servlet只能认证后,可以访问),然后重新配置它的客户端证书,而不是基本的授权
  2. 配置的web.xml
  3. 配置与GlassFish的web.xml
  4. 生成的客户端证书
  5. 导入的客户端证书,以便服务器信任它。

问题:

当我部署我的应用程序,并按照链接,对应的应用程序,我从GlassFish服务器的HTTP状态400消息 - 未在此请求”客户端证书链

所以,现在看来,客户端(浏览器)不要求

我尝试添加的.cer证书到Chrome浏览器,火狐,IE发送证书和它们加入(未显示错误),但正如你所看到的那样,

因此,问题是:

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

回答

1

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

-Djavax.net.debug=all 

看到this page了解详情。

openssl s_client -connect host:port -debug -msg 

你应该看到这样的事情:

您还可以从客户端的角度使用的OpenSSL工具调试

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

您的问题可能与不良信任配置的服务器 - 服务器发送一些可接受的客户端证书CA名称(或根本没有),但浏览器没有任何东西可以提供 - 它没有任何私钥+证书iss由可接受的ca

+0

因此,问题是“浏览器没有任何东西可以提供 - 它没有任何私钥+由可接受的ca发布的证书”。如何让浏览器使用我生成的证书? – Ievgen 2012-04-12 08:47:39

+0

在IE中,您可以选择* container *作为证书 - 您必须选择“个人证书”(类似这样的)。你确定服务器在询问你的证书吗? – 2012-04-12 08:50:04

+0

不确定。为了让服务器信任我的证书,我使用了这个命令:java-home \ bin \ keytool -import -v -trustcacerts -alias client -alias -file client.cer -keystore domain-dir/config/cacerts.jks -keypass changeit -storepass changeit,因为它是在这里提出的:http://docs.oracle.com/javaee/6/tutorial/doc/glien.html – Ievgen 2012-04-12 08:52:39

相关问题