websocket failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR

云上屹立君

创建的wss服务,报这个错误,中间有个代理服务器。不知道是哪里出了问题吗,求大神指教一下,感激不尽。

17313 10 0
10个回答

blogdaren

描述比较粗糙,具体也不好说,只能根据你的题示,分享一些这里可能要注意的细节:
1、确保SSL证书已经准备OK
2、SSL证书首先是和域名挂钩的,不要用IP:PORT;
3、前后端协议以及端口要一致;
4、代理服务器代理了SSL? 是的话,workerman那边不要设置SSL
5、另外搜社区类似问题很多以及看手册: http://doc.workerman.net/faq/secure-websocket-server.html

  • 云上屹立君 2018-12-12

    ssl配置好了的,已经可以https正常访问网站。没有使用ip访问,直接使用的域名加端口。倒数第二句什么意思?不是很明白。

  • 云上屹立君 2018-12-12

    而且我现在的这个测试站没有使用代理服务器,是直接使用的阿里云的服务器。老哥,求帮助

  • blogdaren 2018-12-12

    以为你使用了代理了呢,没有代理的话,workerman的 $worker->transport = 'ssl' 开启了吗?
    你截图刚好看不到 proto 字段,这个字段就能反映出来。

  • 云上屹立君 2018-12-12

    可是我现在给你看的这个是阿里云的,没有使用代理服务器的测试站点。正式环境之前测试过了。不行,后面会考虑到你现在说的这个问题的。现在我这个测试站点,也是报这个错误,是为什么呢?而我现在主要是找不到错误的原因,就像是无头苍蝇一样。唉、求大神你带带我啊

  • 云上屹立君 2018-12-12

    @614:什么proto啊。这个是$worker->transport = 'ssl' 开启了的。使用ws去访问会提示这个错误要求使用wss去访问。

  • blogdaren 2018-12-12
    1. proto 启动以后的界面会有这个字段展示的啊,你现在的场景是需要开启 $worker->transport = 'ssl' 的,如果开启了的话,proto 那对应的值就是 ssl, 既然你已经开启了,就确认下即可
    2. 服务端用的是wss协议,那么客户端必须也得使用 wss协议来访问,不能用 ws 协议。
  • 云上屹立君 2018-12-12

    @614:我启动后没看到有什么proto 字段啊。就我图中的内容,其他的都没啦。

  • blogdaren 2018-12-12

    你确认设置OK了就好,按老大的来,升级下 workerman试试。

  • 云上屹立君 2018-12-12

    @614:怎么升级啊?。。。

  • 云上屹立君 2018-12-12

    @614:最好是能不升级解决这个问题,不然这个聊天客服功能又得改动了。

  • 云上屹立君 2018-12-17

    @614:中间有代理服务器强制跳转到https,在代理服务器上配置了ssl,在代码中就不要$worker->transport = 'ssl';了是不是?除此之外还有没有其他需要注意或者是弄其他的什么呢?

  • blogdaren 2018-12-17

    @5146:
    1、是的。
    2、关于注意事项本帖上基本上都提到了,另外就是官方手册上写的那一堆

  • 云上屹立君 2018-12-19

    @614:那如果我使用nginx代理wss,中间有个代理服务器,应该怎么配置?

云上屹立君

[attach]1500[/attach]

[attach]1501[/attach]

 

  • 暂无评论
云上屹立君

[attach]1504[/attach]
 

  • blogdaren 2018-12-12

    status界面看不到, 直接用 debug 模式启动能看到 。

  • 云上屹立君 2018-12-12

    @614:我就是使用的调试模式启动的啊。真的没有唉。下面就是ctrl+c to stop 了。没有其他字段内容显示了啊,

walkor

升级下workerman

  • 云上屹立君 2018-12-12

    怎么了?版本太低了吗还是什么?

  • 云上屹立君 2018-12-12

    还有就是怎么升级哟,。。。。手册里没看到有相关的啊。

  • blogdaren 2018-12-12

    兄弟,这个升级就不要手册了,composer update workerman/workerman 或者重新到官网下载部署最新代码

  • 云上屹立君 2018-12-12

    @614:升级了之后很多东西是不是就得重新写了。她们之前把聊天室都写好了的。

  • blogdaren 2018-12-12

    @5146:目前3.5.12版本也是比较新的版本,理论上升级不会影响, 无论如何,先上测试环境呗,部署起来排查原因。

  • walkor 2018-12-12

    目前workerman版本都是互相兼容的,升级不影响业务。

  • walkor 2018-12-12

    另外提供下配置的详细信息。把配置全部截图出来,包括workerman配置,代理配置,域名

  • 云上屹立君 2018-12-13

    @1:这个测试环境么有使用代理服务器,使用的阿里云服务器,但是还是报相同的错误。

  • 云上屹立君 2018-12-13

    @1:还有就是为什么我以守护进程方式启动,提示我 -d 不是可选属性呢。会报错

云上屹立君

[attach]1507[/attach]
[attach]1506[/attach]
[attach]1505[/attach]
这个测试环境没有使用代理。但是也报相同的错误。

  • walkor 2018-12-13

    截图workerman部分的配置

  • 云上屹立君 2018-12-13

    下面的run:all那些就不用截图了吧。

  • walkor 2018-12-13

    没设置 $ws_worker->transport = 'ssl';

  • 云上屹立君 2018-12-13

    这个设置了啊,我那边配置的https,然后这边有一个判断。stripos($this->root_path, 'https') === 0这样子判断是https协议,然后$this->is_ssl = true;后面判断如果成立$this->workermanEvent->is_ssl,然后设置$ws_worker->transport = 'ssl';这样子的逻辑。

  • 云上屹立君 2018-12-13

    测试环境下我没有加前面的false;之前你们说使用了代理服务器的话就不要设置ssl的嘛,我就把它加上了false;

云上屹立君

[attach]1513[/attach]
测试环境是这样子的

  • blogdaren 2018-12-13

    我看也先别if else了,就显式的的把if里的代码拿出来直接跑,看啥情况。

  • 云上屹立君 2018-12-13

    @614:我先测试一个小dome试试。

  • blogdaren 2018-12-13

    @5146: 嗯,若找到最终的原因,给大家分享分享

云上屹立君

[attach]1515[/attach]

[attach]1517[/attach]

[attach]1516[/attach]

 

  • 暂无评论
walkor

总体来说就是哪里配置错误了或者没配置好。你可以弄个简单demo按照来做,有问题再把demo的配置 代码都贴出来。如果有用到nginx代理,nginx代理贴出来。贴问题的时候把用的手册哪个方法都贴出来。
 
你这个项目封装了一层,没办法确定你封装的有没有问题,是否导致漏了配置。

云上屹立君

[attach]1521[/attach]

[attach]1522[/attach]

[attach]1520[/attach]
 

  • walkor 2018-12-14

    没有设置$worker->transport = 'ssl';

  • walkor 2018-12-14

    另外启动界面里报错来看,openssl扩展也没装上。

  • 云上屹立君 2018-12-14

    报错的不是openssl、
    那个ssl不加是因为中间加了一个代理服务器,加上我也试过的。

  • 云上屹立君 2018-12-14

    @1:奥,这个开始没发现,这个错误我看是警告,就没去管了

  • walkor 2018-12-14

    启动界面里第一行报错,openssl扩展没装成功

  • walkor 2018-12-14

    看到ws = new WebSocket('wss://www.firebox.vip:2347/');已经可以连接成功了

  • 云上屹立君 2018-12-14

    @1:这个测试环境我搭建好了,现在跑正式环境,中间有个代理服务器,所以有点麻烦

  • 云上屹立君 2018-12-14

    @1:所以要启动的话必须要安装这个动态库文件?我测试环境也没有这个openssl.so文件啊

  • blogdaren 2018-12-14

    @5146: 必须安装呢,pecl install openssl 或者 手动源码编译安装下openssl扩展

  • 云上屹立君 2018-12-14

    @614:这个openssl扩展安装了的,php -m都能看到,只是没有生成这个openssl.so文件,这个文件必须的吗?

  • blogdaren 2018-12-14

    怎么感觉你机器上有多个版本的PHP呢,不管是几个,你自己确认下,也不管是几个,每一个扩展都对应相应版本的PHP,总体思路是这样的:
    假如使用的是 /path/to/php ,那么

    1. /path/to/php --ini 定位出php.ini文件
    2. 手动安装本版本PHP的openssl扩展,得到 openssl.so 【pecl 安装也行,不解释了】
    3. 在对应的 php.ini 里添加 extension = openssl.so
    4. /path/to/php -m | grep openssl 查看扩展是否安装OK
    5. 最后如果像你截图那样报错:说明扩展安装的有问题
  • 云上屹立君 2018-12-17

    @614:这段命令执行之后打印了一个openssl。其他就没了,这样算是安装扩展成功了吗?

  • 云上屹立君 2018-12-17

    @614:但是我没有找到这个openssl.so.文件,php.ini里也没有开启这个扩展,我的测试环境也是这样的,但是测试环境可以用,没问题,就正式环境搞不定了,中间有个代理服务器我就很麻木了。

  • blogdaren 2018-12-17

    @5146: /path/to/php -m | grep openssl 如果输出了一个openssl, 并且同时也没有报告任何的warning, 则代表openssl扩展成功安装。

  • 云上屹立君 2018-12-17

    @614:对啊,然后我又测试了,因为有个代理服务器,所以我测试了加ssl,和不加ssl,还是报这个错误。还是没有解决啊。

云上屹立君

[attach]1537[/attach]
还有就是为什么我守护进程启动的话就提示选项不存在呢。

  • blogdaren 2018-12-14

    看上去是使用了集成wokerman后的 symfony 的命令行启动方式,这个不是 workerman的问题,得看 symfony手册呢。

  • 云上屹立君 2018-12-14

    @614:好

  • 云上屹立君 2018-12-14

    @614:还有个问题就是,我改了代码或者配置之后,需要重启workman服务吗?

  • blogdaren 2018-12-14

    @5146: 你这么一问:
    1、我建议你得好好看手册,效率会大大提高呢。
    2、改代码必须重启workerman, 当然有时候只需 reload , 具体为啥看手册。

  • 云上屹立君 2018-12-14

    @614:我用的调试模式也要重启的吗?我还以为只是守护进程启动的需要重启。

  • blogdaren 2018-12-14

    @5146: 无论是哪种模式,都要重启。

年代过于久远,无法发表回答
🔝