我有幾個獨立的PHP應用程序在幾臺服務器上運行。沒有一個服務器具有SSL,但我可以使用PHP封裝器進行SSL。我想確保在服務器之間發送的所有數據都是安全並且有簽名的。我需要生成一個證書還是足以在每次發送內容時創建公鑰/私鑰?這個方法安全嗎?在Apache中沒有SSL的服務器之間發送加密數據
回答
我需要生成一個證書還是足以創建 公共/私人密鑰每次我發送一些東西?
每次都不要生成公鑰/私鑰。你將如何檢查誰能控制私鑰?證書的要點是能夠將身份與公鑰綁定在一起:檢查您是否信任證書,並且您願意與其引用的身份進行通信是保證通信安全的必要組件。
據我所知,服務器之間的通信本身並不涉及用戶交互。如果你控制了所有的服務器,你可以給他們證書,或者是自簽名的X.509證書(如果你可以爲所有人安裝它們:只適用於實踐中的小數字)或你自己的CA(如果你有OpenSSL,看看CA.pl
,它有一個手冊頁)。
然後,您可以使用S/MIME對您交換的內容進行簽名加密(PHP中提供了此功能)。
(您可能還能夠實現使用PGP同一個目標,使用PGP密鑰/證書來代替。)
如果兩臺機器都有mcrypt,那麼你可能會加密你希望通過PHP發送的文本一端發送的文本,並在另一端解密它,但是當然這裏的重大問題將是密鑰分發。你必須預先配置每臺機器的正確密鑰,並且希望沒有人注意到你每次都使用同一個密鑰(這很糟糕),或者你必須想出一些分配你的方式當您發送數據而沒有監聽到密鑰時,接收機的密鑰。 (這很複雜)。
你還提到了簽名,這也是一個棘手的問題。
雖然理論上可以使用適當的擴展名(如mcrypt)在PHP中實現所有這些,但我真的懷疑這樣做是否值得做正確的工作,這將是相當可觀的,您也可以重新發明輪子。
SSL實現所有你需要的東西,並且是公認的行業標準,如果可能的話,我強烈建議你安裝它。
這可能是一個選項,但手動輸入密鑰並不真正用戶友好......我想我會堅持使用SSL。 – JanL
在我的小項目,我使用的Blowfish加密一些數據傳輸,使用mcrypt擴展這是適用於大部分的服務器:
$encrypted = mcrypt_encrypt(MCRYPT_BLOWFISH, 'here goes a key', $data, MCRYPT_MODE_ECB, null);
解密去以同樣的方式,只是使用mcrypt_decrypt。這是一個共享密鑰,而不是公鑰/私鑰系統。
- 1. 組織在客戶端服務器之間發送的數據
- 2. 向https服務器發送SSL加密郵件
- 3. SSL沒有在服務器
- 4. 如何在Apache 2.4.18服務器中實現沒有ssl的http2
- 5. 在服務器和手機之間發送數據
- 6. Android - 在服務器和客戶端之間發送數據
- 7. 發送cookie數據到服務器沒有頁面加載
- 8. 服務器在服務器之後立即發送加密握手
- 9. 在沒有服務器的情況下發送數據
- 10. 文件請求之間2臺服務器之間的數據加密
- 11. 在服務器之間發送cookie與發送標題
- 12. SSL如何加密從服務器到客戶端的數據?
- 13. 2個Tomcat服務器之間的SSL
- 14. SSL Apache HTTP服務器上
- 15. 儘量減少客戶端/服務器之間在javascript中發送的數據
- 16. 如何加密水晶和數據庫服務器之間的數據
- 17. 通過服務器到服務器socket.io連接的SSL加密
- 18. Apache HTTP服務器發生間歇性SSL握手錯誤
- 19. 從Android發送數據沒有電子郵件或服務器?
- 20. 發送數據到服務器沒有ajax
- 21. 數據發送HTTP到web服務器沒有結果
- 22. 哪些加密算法用於從android apk發送加密數據到遠程服務器反之亦然
- 23. 以扭曲的形式在服務器和客戶端之間發送數據
- 24. 如何加密發送到服務器的密碼
- 25. 做odbc連接發送加密的密碼到服務器
- 26. 在傳遞期間未加密的HTTP服務器數據
- 27. 加密客戶端和服務器之間的密鑰交換
- 28. 發送數據到WEB服務器:數據正在發送,但只有一次
- 29. GPS中間件服務器 - 保存位置併發送數據到服務器
- 30. 加密Apache和MySQL服務器
其實是否必須簽名,或者是濫竽充數加密?簡單的共享密鑰加密可以阻止偶然的窺探者,而簽名則是更多的工作。 – TMN
它應該被簽名,因爲服務器必須確定對方的身份。 – JanL