看板 PHP 關於我們 聯絡資訊
我最近想寫一個Websocket程式 而我的主機已有買SSL憑證 亦即網站是可以用https瀏覽的 而且是GeoTrust Inc.發行的憑證,並非自己寫的憑證 但是我在Google chrome要試用Websocket時他跟我說https的網站只能使用「wss://」開 頭的協定 那麼我想請問一下我是否要再買另外一個憑證才能使用「wss://」協定? 假設我的https網址是「https://example.com」 那「wss://example.com」照理來講是不是應該也能用? 也就是買了https協定wss協定也就可以用? 因為我用同一個網域名稱但把https改成wss之後就跟我說無法連線了 所以想問https和wss是否是互通、有關聯性的? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.7.20 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1512185949.A.877.html ※ 編輯: red0whale (114.44.7.20), 12/02/2017 11:40:13
dododavid006: 用同一個憑證就好了 但不是把 https 改成 wss 是你12/02 11:50
dododavid006: 要連線 websocket 的地方把網址的 ws 改成 wss 12/02 11:51
請問我要怎麼用wss連線Websocket? 一般的socket_create和socket_bind等函數應該沒辦法連wss吧… 我上網找了一下有個stream_context_set_option需要設定 但是他好像需要.pem檔和.key檔,這個.pem檔和.key檔是什麼?還有我要去哪裡產生.pem 檔和.key檔呢? 看來要連線wss是一件蠻困難的事… ※ 編輯: red0whale (114.44.7.20), 12/02/2017 12:45:05
dododavid006: pem 跟 key 檔就是你 server 的 ssl 憑證 你現在的12/02 13:00
dododavid006: 問題是 client 端還是 server 端 如果 server 端已12/02 13:00
dododavid006: 經架好的話 其實改一下 client 端用的網址就行了12/02 13:01
您好 我不太清楚您所謂server端還是client端是指什麼 不過我只知道我用Chrome是可以瀏覽https的,也就是應該有裝好憑證 ==== https://github.com/vakata/websocket 以上是我在Github上看到的可以用wss連線到Websocket的程式 只是我不曉得該怎麼去使用它 因為它還需要PEM encoded public 、 private keys和PEM certificate的密碼才能連線w ss 然而我是承租外面的虛擬主機,並且請主機商幫忙安裝憑證的 所以我不知道那些什麼憑證的到底需要填什麼 請讓我知道這個「$cert」和「$pass」的參數必須填什麼才可以連線wss 謝謝 另外,附上我的程式和錯誤訊息給您: 《index.php》 <?php require "src/Base.php"; require "src/Client.php"; require "src/Server.php"; require "src/WebSocketException.php"; // this handler will forward each message to all clients (except the sender) $server = new \vakata\websocket\Server('wss://我已安裝憑證的網域:8080','./serv er.pem'); $server->onMessage(function ($sender, $message, $server) { foreach ($server->getClients() as $client) { if ((int)$sender['socket'] !== (int)$client['socket']) { $server->send($client['socket'], $message); } } }); $server->run(); ?> 《錯誤訊息》 [02-Dec-2017 14:11:06 Asia/Taipei] PHP Fatal error: Uncaught exception 'vakata \websocket\WebSocketException' with message 'Could not create server' in /publ ic_html/websocket-master/src/Server.php:51 Stack trace: #0 /public_html/websocket-master/index.php(7): vakata\websocket\Server->__cons truct('wss://...', './server.pem') #1 {main} thrown in /public_html/websocket-master/src/Server.php on line 51 《server.pem》(中間恕刪) -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY----- ※ 編輯: red0whale (114.44.7.20), 12/02/2017 14:19:10
newversion: 施主你把private key貼出來了!12/02 15:05
newton2009: XDD RSA private key ...12/02 15:17
Neisseria: 直接換 key 吧,保重 =_=...12/02 15:58
newversion: 有看過 chmod 777 prikey 然後PHP有:12/02 16:24
newversion: <?php readfile $_GET("f") XDD12/02 16:25
好吧… 我不懂那是什麼 我以為那只是一堆文字而已 話說中間都刪掉了也是有人能全部破解嗎? ※ 編輯: red0whale (114.44.7.20), 12/02/2017 19:02:20 請問有人能告訴我怎麼讓wss://開頭的Websocket可以連線? 我只是想做一個比較不會消耗伺服器資源的聊天室而已 但是由於我的網站是用https,而瀏覽器規定https的網站一定要使用wss://開頭的Websoc ket 所以我不得不用wss 如果https可以使用ws://開頭的Websocket,我也不必這麼大費周章找遍所有網頁了(因為 連線ws://開頭的Websocket我知道怎麼做) 現在只差如何成功連線wss://開頭的Websocket 請各位一定要協助我 也希望各位提供推薦的可使用wss連線的Websocket聊天室程式 謝謝 ※ 編輯: red0whale (114.44.7.20), 12/02/2017 22:25:37
dododavid006: 那個中間要解開應該不太可能啦 然後你那兩段是在同12/02 22:46
dododavid006: 一個檔案嗎 一般 ssl 設定時應該會拆成兩個檔案才對12/02 22:47
dododavid006: 應該是把第一段的 BEGIN 到 END 存成 .pem 然後第二12/02 22:47
dododavid006: 段存成 .key 再拿去給你的程式試試看 如果錯了再交12/02 22:48
dododavid006: 換過來吧 因為老實說 我常常分不清楚這兩個檔案XD12/02 22:49
dododavid006: 剛剛翻了一下文件 應該不用拆兩個檔案才對 sorry12/02 22:51
謝謝,不過我試了.pem之後還是無法成功 我是用下面這個來作為我的測試版聊天室: https://github.com/Flynsarmy/PHPWebSocket-Chat 用8000和8080埠的ws://協定在http://瀏覽的情況下都能連線成功且可以聊天(前提是要 先執行server.php,而且server.php的「wsStartServer」的IP和Port都要改成自己的網 站) 但問題是我必須讓我的網站以https方式呈現 而瀏覽器要求https的網站只能以wss://開頭的Websocket連線 問題就是要怎麼讓「wss://...」也能連線成功 也就是要怎麼用PHP create「wss://...」的Websocket... 我試過千百遍都沒用,瀏覽器一直顯示: Websocket connection to 'wss://...:8080/' failed: Error in connection establis hment: net::ERR_CONNECTION_TIMED_OUT 好頭疼… 我好想開始放棄Websocket改用以往傳統的Comet長輪詢了…
dododavid006: 你 8080 port 有在使用嗎?12/02 22:55
沒有 ※ 編輯: red0whale (114.44.7.20), 12/02/2017 23:08:02
dododavid006: 因為它訊息是 server 開不起來 我猜有沒有可能是12/02 22:56
dododavid006: port 占用住了 你有開其它的網頁伺服器嗎12/02 22:56
問題是即使某個Port沒被佔用它那個wss Websocket還是沒有創建成功呀 我的問題點是怎麼用PHP創立「wss://...」開頭的Websocket... ※ 編輯: red0whale (114.44.7.20), 12/02/2017 23:11:06
dododavid006: 對了 你試試看建 websocket server 時中間的網址改12/02 23:12
dododavid006: 成用 0.0.0.012/02 23:12
沒用,error_log跟我說connection refused ※ 編輯: red0whale (114.44.7.20), 12/02/2017 23:17:03
jfcherng: 以前我的作法是PHP開內網ws, NGINX/Apache 做SSL與proxy 12/02 23:48