2012-04-12 89 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