2016-12-29 166 views
1

我想配置SSL以進行相互身份驗證。服務器Tomcat中的客戶端身份驗證

我用eclipse + tomcat的8

工作,我做這個段落:

我創造了這樣的私有密鑰:

openssl genrsa -des3 -out client_key.pem 2048 
openssl genrsa -des3 -out server_key.pem 2048 

我創建自簽名證書:

openssl req -new -x509 -key client_key.pem -out client.pem -days 365 -config <path to>\openssl.cnf 
openssl req -new -x509 -key server_key.pem -out server.pem -days 365 -config <path to>\openssl.cnf 

我創建了truststore並導入證書:

keytool –importcert -trustcacerts –keystore clienttruststore.jks –storetype jks –storepass <truststore_password> -file <path-to-file>\server.pem 
keytool –importcert -trustcacerts –keystore servertruststore.jks –storetype jks –storepass <server_truststore_password> -file <path-to-file>\client.pem 

我結合證書和用於服務器和客戶端分別私鑰:

openssl pkcs12 –export –inkey client_key.pem –in client.pem –out client.p12 
openssl pkcs12 –export –inkey server_key.pem –in server.pem –out server.p12 

最後我轉換PKCS12格式在密鑰庫:

keytool –importkeystore –srckeystore client.p12 –srcstoretype pkcs12 –destkeystore client.jks –deststoretype jks 
keytool –importkeystore –srckeystore server.p12 –srcstoretype pkcs12 –destkeystore server.jks –deststoretype jks 

在此之後,我配置在Tomcat上配置SSL/TLS支持。所以,我在服務器文件夾中配置server.xml,並以這種方式設置連接器:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
       maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 
       clientAuth="false" sslProtocol="TLS" 
       keystoreFile="path\to\server.jks" keystorePass="*******" keystoreType="JKS" 
       truststoreFile="path\to\servertruststore.jks" truststorePass="********" truststoreType="JKS" /> 

最後我清理並構建項目。

我在Eclipse中創建了一個名爲「myproject」的動態Web項目。它運作良好。

問題是當我的項目在URL上的服務器上運行時https://localhost:8443/myproject Google Chrome顯示紅色三角形(此頁面不安全(破損的HTTPS))。

  1. 怎麼了?
  2. 我在哪裏把client.jks和clienttruststore.jks放在我的項目中?

此圖爲問題:

Snapshot of Chrome Page Showing Broken HTTPS

+0

在Chrome上,你是否可以添加證書作爲例外?(如果它沒有意義,請你爲該問題添加一個快照,我可以給你正確的步驟)請記住它的一個自簽名證書。所以瀏覽器會標記它。 – jay

+0

我編輯帖子並添加快照。如何將證書添加爲例外? – Federico

+3

您的網站已在使用https,但瀏覽器不接受證書,因爲它的自簽名並未由認可的證書頒發機構(CA)簽署。您需要由CA簽名的證書以及其根證書。試試這個鏈接https://www.mulesoft.com/tcat/tomcat-ssl。祝你好運。 – jay

回答

1
  1. 你的證書是自簽名的,這意味着它們不是由CA簽名,這意味着除非你手動批准他們的Chrome不能信任他們。

  2. 生成證書時是否提供CN?它必須與您使用的主機名相匹配(在您的情況下,它是本地主機),如果CN不匹配,Chrome將不會允許SSL,除非您手動批准。

  3. 你說你想要相互認證,但你配置clientAuth="false"它應該是真的。至於密鑰庫,你應該使用相同的密鑰庫作爲證書,因此當客戶端連接到它的證書時,tomcat會驗證相應的證書是否位於密鑰庫中。

希望它有幫助。

相關問題