作者red0whale (red whale)
看板PHP
标题[请益] https和wss是否有“关联性”?
时间Sat Dec 2 11:39:06 2017
我最近想写一个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://webptt.com/cn.aspx?n=bbs/PHP/M.1512185949.A.877.html
※ 编辑: red0whale (114.44.7.20), 12/02/2017 11:40:13
1F:→ dododavid006: 用同一个凭证就好了 但不是把 https 改成 wss 是你12/02 11:50
2F:→ 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
3F:→ dododavid006: pem 跟 key 档就是你 server 的 ssl 凭证 你现在的12/02 13:00
4F:→ dododavid006: 问题是 client 端还是 server 端 如果 server 端已12/02 13:00
5F:→ 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
6F:推 newversion: 施主你把private key贴出来了!12/02 15:05
7F:推 newton2009: XDD RSA private key ...12/02 15:17
8F:推 Neisseria: 直接换 key 吧,保重 =_=...12/02 15:58
9F:→ newversion: 有看过 chmod 777 prikey 然後PHP有:12/02 16:24
10F:→ 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
11F:→ dododavid006: 那个中间要解开应该不太可能啦 然後你那两段是在同12/02 22:46
12F:→ dododavid006: 一个档案吗 一般 ssl 设定时应该会拆成两个档案才对12/02 22:47
13F:→ dododavid006: 应该是把第一段的 BEGIN 到 END 存成 .pem 然後第二12/02 22:47
14F:→ dododavid006: 段存成 .key 再拿去给你的程式试试看 如果错了再交12/02 22:48
15F:→ dododavid006: 换过来吧 因为老实说 我常常分不清楚这两个档案XD12/02 22:49
16F:→ 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长轮询了…
17F:→ dododavid006: 你 8080 port 有在使用吗?12/02 22:55
没有
※ 编辑: red0whale (114.44.7.20), 12/02/2017 23:08:02
18F:→ dododavid006: 因为它讯息是 server 开不起来 我猜有没有可能是12/02 22:56
19F:→ dododavid006: port 占用住了 你有开其它的网页伺服器吗12/02 22:56
问题是即使某个Port没被占用它那个wss Websocket还是没有创建成功呀
我的问题点是怎麽用PHP创立「wss://...」开头的Websocket...
※ 编辑: red0whale (114.44.7.20), 12/02/2017 23:11:06
20F:→ dododavid006: 对了 你试试看建 websocket server 时中间的网址改12/02 23:12
21F:→ dododavid006: 成用 0.0.0.012/02 23:12
没用,error_log跟我说connection refused
※ 编辑: red0whale (114.44.7.20), 12/02/2017 23:17:03
22F:→ jfcherng: 以前我的作法是PHP开内网ws, NGINX/Apache 做SSL与proxy 12/02 23:48