2011-11-29 43 views
1

我有幾個獨立的PHP應用程序在幾臺服務器上運行。沒有一個服務器具有SSL,但我可以使用PHP封裝器進行SSL。我想確保在服務器之間發送的所有數據都是安全並且有簽名的。我需要生成一個證書還是足以在每次發送內容時創建公鑰/私鑰?這個方法安全嗎?在Apache中沒有SSL的服務器之間發送加密數據

+0

其實是否必須簽名,或者是濫竽充數加密?簡單的共享密鑰加密可以阻止偶然的窺探者,而簽名則是更多的工作。 – TMN

+0

它應該被簽名,因爲服務器必須確定對方的身份。 – JanL

回答

1

我需要生成一個證書還是足以創建 公共/私人密鑰每次我發送一些東西?

每次都不要生成公鑰/私鑰。你將如何檢查誰能控制私鑰?證書的要點是能夠將身份與公鑰綁定在一起:檢查您是否信任證書,並且您願意與其引用的身份進行通信是保證通信安全的必要組件。

據我所知,服務器之間的通信本身並不涉及用戶交互。如果你控制了所有的服務器,你可以給他們證書,或者是自簽名的X.509證書(如果你可以爲所有人安裝它們:只適用於實踐中的小數字)或你自己的CA(如果你有OpenSSL,看看CA.pl,它有一個手冊頁)。

然後,您可以使用S/MIME對您交換的內容進行簽名加密(PHP中提供了此功能)。

(您可能還能夠實現使用PGP同一個目標,使用PGP密鑰/證書來代替。)

1

如果兩臺機器都有mcrypt,那麼你可能會加密你希望通過PHP發送的文本一端發送的文本,並在另一端解密它,但是當然這裏的重大問題將是密鑰分發。你必須預先配置每臺機器的正確密鑰,並且希望沒有人注意到你每次都使用同一個密鑰(這很糟糕),或者你必須想出一些分配你的方式當您發送數據而沒有監聽到密鑰時,接收機的密鑰。 (這很複雜)。

你還提到了簽名,這也是一個棘手的問題。

雖然理論上可以使用適當的擴展名(如mcrypt)在PHP中實現所有這些,但我真的懷疑這樣做是否值得做正確的工作,這將是相當可觀的,您也可以重新發明輪子。

SSL實現所有你需要的東西,並且是公認的行業標準,如果可能的話,我強烈建議你安裝它。

+0

這可能是一個選項,但手動輸入密鑰並不真正用戶友好......我想我會堅持使用SSL。 – JanL

1

在我的小項目,我使用的Blowfish加密一些數據傳輸,使用mcrypt擴展這是適用於大部分的服務器:

$encrypted = mcrypt_encrypt(MCRYPT_BLOWFISH, 'here goes a key', $data, MCRYPT_MODE_ECB, null); 

解密去以同樣的方式,只是使用mcrypt_decrypt。這是一個共享密鑰,而不是公鑰/私鑰系統。

相關問題