假設我有一個網絡服務器中運行一些PHP代碼,例如,運行一個簡單的CakePHP的應用程序。從這個應用程序,我想偶爾做一個TLS連接到某些服務器交換一些數據。這通常如何完成? (我有PHP缺乏經驗。)如何使Web服務器從PHP TLS連接,並安全地
什麼PHP插件或圖書館或什麼的,建議完成TLS連接?哪裏有一些好的地方可以開始尋找? (我最初的谷歌搜索給我噪聲的巨大比例的信號。)
什麼是涉及具有X509私鑰坐在Web服務器上的安全問題?爲了建立一個TLS連接,我將需要X509證書和相應的私鑰,或許是PEM文件,DER文件或Java密鑰庫或其他。那個私鑰會被放在web根目錄下的某處嗎?這通常如何處理?什麼是安全問題,特別是保護將用於建立TLS連接的私鑰?什麼是最佳實踐?
編輯:我忘了提的是,PHP應用程序連接到服務器,需要將提交客戶端證書。客戶端確實需要私鑰才能連接到。此外,我連接的服務器是而不是 HTTP服務器 - 我只需要讀取/寫入服務器的普通套接字連接(通過SSL/TLS連接)。
我的客戶*不*需要一個私鑰,因爲它需要提供客戶端證書到服務器。在這種情況下,將它完全移出Web根目錄是不是最好,然後,PHP腳本可以訪問它,但它不會被Web服務器(PHP腳本運行)損害? 另外,CURL不讓我發送任意數據流,是嗎?它看起來像CURL僅在連接到HTTP服務器或FTP服務器時纔有用,而我並不知道它。是否有一個通用於簡單數據流的類似庫? – 2010-07-01 18:49:27
@Jim Flood PHP必須有權訪問證書,如果您的PHP應用程序擁有,那麼您的證書也是如此,這是沒有辦法解決的。 CURL應該用於HTTP,如果你只是想要第4層連接,那麼你可以使用fsockopen(),檢查我的更新。 – rook 2010-07-01 19:02:50
Rook我知道你對私鑰的風險意味着什麼,因爲PHP必須有權訪問它。至於fsockopen,我的LAMP安裝有PHP5和fsockopen不再有「第六個參數」,但我確實發現stream_socket_client在'ssl'選項(而不是'tls')中與local_cert,cafile和verify_peer協同工作。你能在你的答案中注意到嗎?謝謝。 – 2010-07-01 22:47:17