2012-01-14 96 views
2

我有一個PHP腳本連接到Node.js服務器並與之通信。 Node.js只能響應來自PHP腳本的請求,所以我需要確保Node服務器具有某種身份驗證方法。廉價的客戶端識別與正確的SSL客戶端身份驗證

現在爲了確定它實際上是PHP腳本連接,我正在考慮使用一些便宜的身份驗證,例如發送一個預共享密鑰以及PHP腳本正在創建的請求。 Node服務器簡單地將它與它自己的祕密進行比較,如果它們匹配,則可以認爲它是連接的腳本而不是其他人(假設SSL具有防止重放攻擊的內置方法)。

整個過程將通過HTTPS完成,HTTPS具有腳本能夠確認節點服務器身份的額外好處。

這是否足夠安全,或者我應該做一些正確的基於SSL的客戶端身份驗證?畢竟,它是通過HTTPS的,所以預共享的祕密不應該很容易被嗅出來嗎?

回答

3

HTTPS不可重放(因爲the ServerHello message包含一個用於產生連接共享密鑰的隨機數),並且由於您正在通過安全通道通話,所以您的預共享密鑰也無法被嗅探。作爲一種快速且不太髒的解決方案,您的方案對我來說聽起來很好。

+0

我可能會使用請求籤名方法,而不是發送實際的祕密,但這不應該有很大的區別。否則,同意。 – deceze 2012-01-14 02:02:00

1

HTTPS連接(如果配置了合適的密碼套件,並且客戶端正確驗證服務器證書)將保護通信,並阻止HTTP請求的重放(因爲實際的HTTP請求不會是可見的,因爲另一個客戶端將不能重放完全相同的內容,因爲它具有不同的SSL會話ID)。

在你的服務器和你的PHP腳本之間有一個預共享的祕密聽起來很好。

您可以使用客戶端證書身份驗證,但會使其更加複雜,在這種情況下沒有必要的優勢。你將不得不生成你自己的證書,並讓服務器信任它。更重要的是,您可能必須配置您的Node.js服務器以進行重新協商(不確定是否可能),否則,連接到該HTTPS服務器的所有客戶端都會被提示輸入客戶端證書,這可能很不方便對於大多數不需要它的用戶來說。