我最近在PHP中編寫了一個套接字服務器,它將處理Android手機應用程序和我的PHP網絡服務器之間的通信。由於Android本身不支持推式通知,因此我們將使用我們的網絡服務器作爲中間件層來處理我們的「推送」。PHP Socket服務器(用於Android推送通知) - 安全/身份驗證問題
套接字服務器是穩定的,運行良好,似乎很好地縮放。雖然我最終希望用C重寫這個,但我現在沒有必要的技能來做這件事,所以我將至少在PHP中停留至少一段時間。截至目前,我們的Android模擬器能夠通過服務器進行通信,獲得推送等,以便覆蓋部分內容。
我擔心的是,現在任何人都可以打開一個套接字到我的服務器,並且會得到一個客戶端連接。雖然我們不會傳遞敏感數據,但我不想讓任何人連接並接收廣播信息,吞併我的資源,並阻塞我的服務器。
問題是,如何保護這樣的服務器?假設我在端口25,000上運行 - 是否可以在該端口上設置某種SSL層,並希望像Android這樣的設備能夠通過該端口進行通信,而無需使用任何特殊協議或跳過循環?
我曾考慮要求連接客戶端在給予客戶端連接之前,根據我們的用戶數據庫對其用戶進行身份驗證,但這需要通過網絡以純文本形式傳遞憑證,而我不打算這麼做。
對此的任何建議都會非常有幫助 - 我對PHP的直接TCP通信頗爲陌生,覺得我可能會錯過簡單的允許在此級別進行身份驗證的內容。
附加信息:如果我能夠安全地獲取有效的用戶名和密碼,我將使用MySQL來驗證用戶,然後根據查詢結果接受/拒絕他們的連接。
在此先感謝..
哦,是的,我目前正在處理多個客戶,沒有任何問題,所以這部分被覆蓋。我會看看stunnel,看看看起來像什麼。我不確定我如何僅使用本地接口進行連接,除非stunnel以某種方式處理到服務器的入站連接 - 更多的研究將回答它看起來像。 – Shane 2010-08-31 16:21:39
@angry是的,這就是stunnel所做的。它在解密入口流量並加密出站流量後中繼入站流量。 – Artefacto 2010-08-31 16:25:50