2013-10-31 21 views
1

我有一個任務是用PKI編寫一個通信器。我考慮X.509證書的實現(Java) - 我的意思是允許數據/消息機密性的SSL/TLS,以及用於消息完整性的消息驗證代碼。關於這些我已經閱讀過一些文獻,而且都是理論性的。我不確定我是否正確思考。任何人都能很好地理解PKI的想法嗎?能給我任何建議嗎(例如網站在哪裏可以很好的解釋PKI的實現)?Java - 公共密鑰基礎設施在通訊器中的實現

+0

在密碼即使是專家和IT安全並不總是得到這個東東吧 - 我認爲這是不合理的初來乍到能夠生產安全應用。 – ntoskrnl

+0

這不是商業項目,而是學術。它不一定非常安全。我只想了解如何在Java中實現PKI。 – mydew

+0

您是否想用Java創建PKI(私鑰/證書),或者您是否希望在Java內部使用Java中的現有PKI等? – gtrig

回答

1

由於ntoskrnl的評論,這是很難做到完全正確的,甚至是專家。

這是一個基本的高層次看PKI則需要SSL連接:

  • 一個CA根密鑰和相應的自簽名的證書。
  • 中間CA密鑰和由CA根密鑰簽名的證書(這 是可選的)。
  • 服務器標識密鑰和由 中間CA或CA根簽署的證書。
  • 由服務器信任的某個CA簽署的客戶端身份密鑰和證書。對於您的 學術工作,您可能希望此CA與您創建的CA相同。客戶端身份只在需要雙向(相互)SSL時才需要,服務器在客戶端進行身份驗證。

運行於像Tomcat這樣可以配置爲SSL的Web服務。在服務器端,身份將指向服務器密鑰證書。對於雙向SSL,服務器上還會有可信CA證書的列表或密鑰庫。除非客戶的證書由其中一個可信CA簽署,否則服務器將不允許客戶端進行連接。

在客戶端,您還需要可信CA證書列表或密鑰庫,服務器證書必須由這些CA的一個簽名。建立SSL連接時,Java將使用客戶端ID密鑰和證書以及信任密鑰庫。如果您搜索堆棧溢出,您應該找到大量的Java SSL連接示例。

要創建PKI,OpenSSL是一個很好用的工具。這是一個實用的網站:

https://pki-tutorial.readthedocs.org/en/latest/simple/index.html

一鍵及其相應的證書,你首先創建一個私有密鑰,然後創建一個證書籤名請求(CSR)。然後通過CA密鑰簽署CSR,併成爲證書。證書包含與用於創建CSR的私鑰對應的公鑰。

的Mac,這裏有HMAC的Java示例:HMAC-SHA1: How to do it properly in Java?

+0

但我仍然沒有抓住幾件事。首先,正如它在「PKI教程」中所述,我使用openSSL來創建TLS CA,我可以創建客戶端和服務器證書,但是我想遠程執行客戶端證書(在另一臺計算機上,用戶客戶端必須能夠創建自己的證書)。現在我可以使用openSSL命令在本地執行所有這些操作。讓我解釋什麼,我想我的項目: 1)服務器與CA 鏈接2)服務器的所有用戶 3)的數據庫服務器它是由CA 4)用戶(客戶端)簽署自己的證書註冊到服務器並從服務器獲取(證書由CA生成) 5)用戶可以連接ea – mydew

+0

客戶端將使用OpenSSL創建私鑰並生成CSR。客戶將把CSR發送給CA. CA在驗證客戶身份後將創建並簽署證書,並將證書發回給客戶。然後,客戶端可以使用證書和私鑰一起建立到服務器的SSL連接。 – gtrig

+0

好的。我現在明白了 - 對自己和你的評論進行一點研究,我想我會實施我的項目。謝謝。 – mydew