2012-02-10 61 views
-1

嗨,我有點失落,希望你能讓我離開這裏。我會盡可能地澄清,因爲我不太瞭解/知道如何使用證書。JBoss/Java和SSL

我有一個應用程序應該使用webservices和SSL與另一個進行通信。我們都要求我們的主要「證書頒發機構」獲得證書。 他們給我們4個文件,爲.P12文件的密碼: .csr文件,.CER,.KEY,.P12

這裏是我做過什麼: *配置JBoss上8443使用SSL和使用的P12文件作爲密鑰庫 爲了測試這一點,我做了一個小的Java類調用該服務器上的web服務,使用:

props.setProperty("javax.net.ssl.trustStore", "/.../.../certif.p12"); 
props.setProperty("javax.net.ssl.trustStorePassword", "XXXXXXXXX"); 
props.setProperty("javax.net.ssl.trustStoreType", "PKCS12"); 

的連接工作,但我覺得我失去了一些東西,因爲我沒有使用其他文件。 如果我將我的.P12文件和密碼發送給應該調用我的Web服務的應用程序,它會好嗎?

編輯: 我忘了提及,我應該調用另一個應用程序上的Web服務,所以它應該是另一種方式,我只需要一個.P12並通過?

我讀過很多關於公鑰,私鑰,keytool的東西,但現在我的腦海裏有點亂。 感謝您的任何信息!

+0

您可能想要詳細瞭解keystore和truststore之間的差異,例如[here](http://stackoverflow.com/a/6341566/372643)。 – Bruno 2012-02-10 17:52:05

回答

2

他們給我們4個文件,爲.P12文件的密碼:.csr文件,.CER, .KEY,.P12

理想情況下,你應該已經生成的私鑰(在.key )和CSR(在.csr中),並且CA應根據您將彙編在一起構建PKCS#12文件(.p12)的CSR(通常在.cer)回來。

在此階段,您可以放棄CSR。 PKCS#12文件現在應包含私鑰,其相關證書以及可能附帶的證書鏈。您可以稍後再從該.p12文件中提取.key.cer文件。我想你會得到所有這些文件,因爲它們的生成方式(使用中間文件),或者爲了方便,不必自己轉換它們。

Java術語並不理想,但密鑰庫和信任庫是兩個類型爲keystore的實體,但具有不同的用途。所述的KeyManager和的TrustManager(並因此javax.net.ssl.keyStore和javax.net.ssl.trustStore中之間)之間的差異如下(從JSSE ref guide引述):

的TrustManager:確定是否所述遠程認證證書(以及連接)應該是可信的。

KeyManager:確定要發送到遠程主機的認證憑證。

javax.net.ssl.trustStore*屬性是配置TrustManager的一種方法。 javax.net.ssl.keyStore*屬性是配置KeyManager的一種方法。

通常,在信任存儲中不需要私鑰材料(除非您也使用相同的密鑰存儲)。使用單獨的信任庫通常會更好,您可以在機器上自由複製,而不必擔心泄漏私鑰材料。 什麼是有意義的將建立一個新的密鑰庫(JKS),您將使用作爲一個信任庫,使用CA證書(不知道是否已與他們一起提供)。

您沒有通過僅設置信任庫進行相互身份驗證(密鑰庫沒有默認值,因此他們需要明確指定這些參數)。如果要使用客戶端證書連接到遠程方,則需要將其設置在密鑰存儲庫中(例如,使用javax.net.ssl.keyStore*屬性,方法與您爲信任存儲庫完成的方式相同)。

您可以將密鑰庫和信任庫指向同一個.p12文件。副作用是由您的服務向其他地方(例如https://www.google.com)所做的其他連接將不可信,因爲它不包含這些CA的連接。這就是爲什麼爲CA證書創建單獨的「信任庫密鑰庫」(JKS可能更容易)可能更好。您可以複製默認的cacerts(在JRE目錄中),將CA的證書導入並使用它。

+0

非常感謝這個評論,它有很大的幫助。如果我使用「密鑰庫和信任庫作爲.P12文件」,那麼我必須使用.P12密碼將其提供給客戶端? .P12文件包含私鑰是不是有點危險? – 2012-02-13 15:02:41

+0

事實上,你必須給他們密碼(也就是私鑰):當然你應該避免的。我建議建立一個單獨的JKS商店,只有CA證書(而不是你的證書或私鑰)。我懷疑這些證書是否在你的'.cer'文件中(它可能只是你的證書,沒有鏈),但完整的鏈可能在'.p12'文件中。你也應該能夠很容易地從CA獲得CA證書。然後,使用'keytool -import'將它導入到一個新的密鑰庫中。 – Bruno 2012-02-13 15:17:02

+0

非常感謝,閱讀您的回覆後我做了很多事情,但它給了我很好的方式。 – 2012-02-14 15:52:34

2

我有一個應用程序應該與另一個使用webservices和SSL的 進行通信。

好的,在這裏停下來。溝通如何?我的意思是它只是服務器身份驗證,即您的客戶端應用程序將驗證Web服務或相互身份驗證和Web服務也將請求您的應用程序證書?

這很重要,因爲名稱中顯示的文件似乎暗示了後者,即當您顯示的代碼僅設置用於服務器認證的SSL庫時,期望相互認證。

既然你在這裏不提供上下文我要說的是:

  • .KEY有你的私鑰
  • 的.p12有你的私鑰與簽名證書或可能是CA的根證書(一起去嗎?)
  • CER可以有你的簽名證書或受信任域中和 可能已經簽署你想 證書通信的Web服務,它被認爲可能是根的CA 簽名證書(也即是一種可能性/猜測在這裏,因爲你不 多說了)
  • CSR是你的證書籤名請求

我做了一個小的Java類調用該服務器上的web服務,使用

你在代碼中做的是將p12設置爲truststore。

如果你說這有效,那麼沒有雙向身份驗證的唯一服務器端身份驗證,並且您正在使用驗證Web服務,無論位於p12中。

在這種情況下並不需要communication.It剩下的就是使你能保持尤其是key文件,因爲這可能您的私鑰,如果您丟失/有人偷走了這則專用證書是無用/妥協。

我不確定你對安全性的要求在這裏,但在我看來,你應該更多地考慮它。

即使對於這個問題,我只是試圖做基於文件名的猜測.....

我希望這讓你在某些賽道閱讀。

+0

感謝您的評論,更多閱讀後變得清晰,我應該使用相互認證。我發現這個有趣的鏈接https://community.jboss.org/wiki/SSLSetup(第2章),但他們開始創建公鑰/私鑰對。我的私鑰已經有了.key文件,我不知道如何創建關聯的公鑰,如果這是做事的方式。 – 2012-02-13 15:06:53

+0

你的公鑰在你的證書 – Cratylus 2012-02-13 15:41:10