2012-04-11 57 views
1

我有一個雙向認證的問題。我使用tomcat6作爲服務器,並作爲客戶端嘗試IE,Firefox和我自己的Java應用程序。PFX文件的雙向授權

使用由其他人給我的PFX證書會出現問題。我必須將它們用作客戶端證書,因此我只是將它添加到服務器上的可信證書並在用戶證書中的瀏覽器中使用它。問題是我得到bad_certificate警報。

我已經成功地通過生成自己的證書進行服務器和客戶端並添加公共密鑰在密鑰庫都信任等做雙向SSL ...

當我看到Wireshark日誌,我看到,該服務器發送良好的證書請求,但當我使用我自己生成的證書時,客戶端發送空證書(11字節長度的數據包)而不是500 +字節。

可能是什麼問題?爲什麼客戶沒有發送好的證書? :(

+0

你已經爲你的服務器設置了客戶端認證,你說你的連接器有什麼樣的keystore? – Cratylus 2012-04-12 13:43:30

+0

jks,我不認爲有問題,因爲它與我自己生成的密鑰一起工作,並使用pss密鑰使用openssl s_client。只是沒有與使用Firefox的pfx工作,即(與Windows存儲中的密鑰)或指向p12密鑰庫的java-app – Deo 2012-04-12 14:46:13

+0

您描述它的方式pfx是空的或損壞的。您是否嘗試查看其內容? – Cratylus 2012-04-12 14:53:38

回答

2

那麼,首先要檢查Tomcat是否配置正確,以從客戶端請求有關該路徑的證書。對於Tomcat 6,這意味着您應該在conf/server中配置一個Connector .XML是這樣的:

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" 
      maxThreads="150" scheme="https" secure="true" 
      keystoreFile="${user.home}/.keystore" keystorePass="password" 
      truststoreFile="conf/truststore" truststorePass="password" 
      clientAuth="true" sslProtocol="TLS" /> 

的truststoreFile & truststorePass是很重要的 - 如果你只需要添加「clientAuth =真正的」不包括這兩個參數,你會看到奇怪的行爲,各種(和沒有警告你做了任何錯誤)。truststoreFile必須指向一個合法的JKS文件,該文件列出了您信任的簽名客戶端證書的CA.如果Tomcat配置正確,瀏覽器應該按照以下方式向用戶彈出對話框:「網站需要客戶端證書」以及已導入瀏覽器的所有證書列表。如果你沒有看到這個,你的Tomcat設置有問題。

聽起來你已經設置正確,但值得仔細檢查。另外,如果您設置正確,如果您在wireshark中按專有名稱列出受信任的CA,則會看到「證書請求」握手消息。再一次,如果你沒有看到這一點,請檢查你的Tomcat設置,最重要的是信任庫。

接下來就是檢查PKCS12文件本身。您可以這樣做:

openssl pkcs12 -in [path-to-pkcs12-file] -nokeys | openssl x509 -noout -subject -issuer 

確保發行人的專有名稱與信任庫中的trustedCaCert條目之一匹配。這有點麻煩做Java keytool的,但你可以通過仔細檢查:

keytool -exportcert -keystore conf/truststore -alias [alias of trusted cert] | openssl x509 -noout -subject -inform der 

如果所有這些檢查出來,但它仍然沒有工作,它使用OpenSSL的的s_client.First解決是值得的,因爲你通常會從中獲得更多的故障排除信息。要做到這一點,你必須重點從PKCS12文件中的證書分開:

openssl pkcs12 -in [PKCS12 file] -out [whatever].key 
openssl s_client -tls1 -connect localhost:443 -cert [whatever].key -key [whatever].key 

(您可以使用相同的文件爲「-cert」和「 - 鍵」的說法,因爲OpenSSL是聰明足夠查找源文件中的「BEGIN CERTIFICATE」和「BEGIN RSA PRIVATE KEY」分隔符)。我有一個令人沮喪的問題,我無法弄清客戶端證書,直到我使用s_client並得到一個提醒,說明我的客戶端證書已過期(未記錄或輸出到其他地方)。

而且,你可能要認真考慮轉移您的配置使用Apache Tomcat的過度 - Apache是​​一個很多更加靈活,併爲您提供一個很多更多的反饋,當涉及到SSL confifguration比Tomcat是。

+0

謝謝,我已經設置好了,但無論如何感謝您再次顯示正確的連接器配置:) 明天早上我會檢查s_client的事情,準備好提供反饋意見。 – Deo 2012-04-11 21:58:38

+0

我已成功建立與openssl s_client的安全連接。爲什麼我不能通過Firefox來做到這一點? (當我向firefox添加證書時,我指向pfx文件,他似乎只接受pkcs12文件) s_client顯示的唯一錯誤是18(自簽名證書),這絕對沒問題,導致服務器證書確實是自簽名的。無論如何,他沒有在GET /的問題,當看着wireshark日誌一切都很好... 爲什麼是Firefox和Internet Explorer與給定相同的PPF文件有問題?我甚至不嘗試打開我的Java應用程序,因爲它更不可靠。 – Deo 2012-04-12 07:16:50

+0

僅在open_ssl上工作的證書很長(超過1800字節) 工作到處的證書很短(大約750字節) 以及再次:唯一的通信是bad_certificate(由於空的證書TLS數據包) – Deo 2012-04-12 14:42:29

2

仔細查看您的客戶證書,特別是X509v3擴展「密鑰使用」和「擴展密鑰使用」。它們可能被標記爲不可信的客戶端身份驗證。

使用openssl command-line tool

$ openssl pkcs12 -in server-only.pfx -nokeys | openssl x509 -noout -purpose 
Enter Import Password: 
MAC verified OK 
Certificate purposes: 
SSL client : No 
SSL client CA : No 
SSL server : Yes 
SSL server CA : No 

此證書用於服務器身份驗證(正常HTTPS)只簽名。有關詳情,請使用OpenSSL的X​​509的-text選項:

$ openssl pkcs12 -in server-only.pfx -nokeys | openssl x509 -noout -text 
    [..snip..] 
     X509v3 Key Usage: 
      Digital Signature, Key Encipherment 
     X509v3 Extended Key Usage: 
      TLS Web Server Authentication 
    [..snip..] 

如果是這樣的話,你將有權要求得到一個標記爲客戶端驗證中使用的新的簽名證書。