2014-01-30 149 views
1

我有一個服務器中的REST客戶端將調用另一臺服務器中的端點。我明白如果我沒有導入證書,由於SSL握手問題,呼叫將失敗。我也明白,證書應該從我的服務器導出,然後導入客戶端機器。到現在爲止還挺好。Rest客戶端通過https與服務器通信

  1. 問題是,我應該從服務器導出哪些證書?有任何一種具有特定名稱的公共證書嗎?我應該在服務器端創建一個自簽名證書,導出它,然後將其導入到客戶端?

  2. 這將是爲了生成證書(如果是這種情況),並導出證書所需的步驟?

  3. 對於現實世界的應用程序(在這種情況下,一臺服務器交談另一個)這個(或這些)證書(或多個)應自簽名,公開?

  4. 什麼證書和JVM(密鑰工具的東西,密鑰庫等)之間的關係?

正如你看到的,我的問題更多的是關於基本概念。

謝謝

回答

1

簡而言之,

  1. 您可以創建自己的自簽名證書。這不會保護您的應用程序免受各種攻擊,但您的通信將被加密。如果你在一些內聯網上運行它,我認爲這是一個合理的解決方案。
  2. 見下文
  3. 見#1
  4. 見#2

要生成服務器證書,你可以這樣做

/opt/jdk1.7.0_40/bin/keytool -genkey -alias tomcat -keypass mypassword -keystore keystore.key -storepass mypassword -keyalg RSA 

然後你可能需要添加一些步驟來配置您的網絡服務器。您還沒有指定任何,但如果你是使用Tomcat,你會添加一些像這樣server.xml中

<Connector 
     port="8443" 
     SSLEnabled="true" 
     maxThreads="150" 
     scheme="https" 
     secure="true" 
     clientAuth="false" 
     sslProtocol="TLS" 
     keystoreFile="/path.to.your.keystore/keystore.key" 
     keystorePass="mypassword" />  

要在客戶端導入證書,你可以打開用firefox登錄頁面,右鍵單擊頁面並打開「查看頁面信息」,然後轉到「安全」選項卡,然後單擊「查看證書」,單擊「詳細信息」,然後單擊「導出」。

默認是X.509 PEM,這是確定的。讓我們假設你已經將文件保存爲「TomcatUser.pem.x509」,您可以選擇存儲在格式的Java能夠理解一個密鑰證書,就這樣

/opt/jdk1.7.0_40/bin/keytool -import -file TomcatUser.pem.x509 -keystore ~yourUser/MyLocalKeypass -storepass xyz 

最後,您的客戶將需要像這樣

System.setProperty("javax.net.ssl.trustStore","~yourUser/MyLocalKeypass"); 
System.setProperty("javax.net.ssl.trustStorePassword","xyz"); 
+0

感謝您抽出寶貴時間來回答,獅子座。 – felixthecar

+0

我花了很多時間自己弄清楚這個路線圖,沒有理由浪費同一時間;-) – Leo