2012-07-01 51 views
3

我想在客戶端使用wss:// -protocol將我的PHP WebSocket庫升級到SSL。然而,我發現自己在試圖弄清楚a)如何設置服務器套接字以及b)如何解碼傳入消息時感到茫然。這是我在以前的當前嘗試:PHP WebSocket SSL

$context = stream_context_create(); 

// local_cert must be in PEM format 
stream_context_set_option($context, 'ssl', 'local_cert', $pemFilePath); 
// Pass Phrase (password) of private key 
stream_context_set_option($context, 'ssl', 'passphrase', $pemPassPhrase); 
stream_context_set_option($context, 'ssl', 'allow_self_signed', true); 
stream_context_set_option($context, 'ssl', 'verify_peer', false); 

$serverSocket = stream_socket_server('ssl://'.$host.':'.$port, $errNo, $errStr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); 

但是,使用SSL作爲服務器協議時,客戶端似乎不發送任何消息,並使用TCP的時候,我得到奇怪的,加密的數據,雖然這是我的猜測,因爲我將選項提供給流上下文,所以它會被神奇地解密。

我在做什麼錯?

回答

3

我遇到了與我們的實施相同的問題,並找到了一個很好的解決方法。將websocket服務器放在任何防火牆端口上,並從安全端口端口連接隧道。您可以使用stunnel像這樣的配置:

[websockets] 
accept = 8443 
connect = 8080 

這樣,安全通道完成了所有的安全性,您的WebSocket服務器完成所有的WebSockets。贏得!