请求帮助:Laravel Websockets 不能使用 SSL 证书

问题描述

概述

这是我第一次使用 websockets。 我所从事的项目使用的是 Laravel 框架,因此我选择尝试一下 Laravel Websockets(1.3.0 版)。

我使用这个包建立了一个简单的概念验证项目,并且在这样做的过程中能够成功启动并运行它。尽管此概念验证中的通信是不安全的 (ws://)。

现在,我正在尝试将 Laravel Websockets 包集成到使用 SSL 保护的生产应用程序中,在这种情况下,当我尝试从 /laravel-websockets 仪表板建立连接时,我立即看到我的浏览器控制台出现错误 ERR_CONNECTION_RESET

网络选项卡显示正在安全地尝试通信 (wss://)。 它还显示了正确的域名和端口。 因此,我认为是服务器端的问题,但我仍然不知道问题出在哪里。

我在本地开发环境(Win 10/IIS/PHP7.4/Self-signed SSL Cert)以及沙盒环境(Win Server 2016/IIS/PHP7.4/Let's加密 SSL 证书)

以防万一,在我的本地开发环境中,我使用 HOSTS 文件将流量从 myapp.dev.local 重定向127.0.0.1

我的.env的相关部分

broADCAST_DRIVER=pusher
PUSHER_APP_ID=XXX
PUSHER_APP_KEY=XXX
PUSHER_APP_SECRET=IHAVENEVERDONETHISBEFORE
PUSHER_APP_CLUSTER=mt1


LaraVEL_WEBSOCKETS_SSL_LOCAL_CERT="C:/certificate.cer"
#LaraVEL_WEBSOCKETS_SSL_LOCAL_PK="C:/privateKey.key"
#LaraVEL_WEBSOCKETS_SSL_PAsspHRASE=1234

在查看 laravel-websockets 库的文档时,我发现我需要配置 config/websockets.PHP 文件以指向我的证书文件,并且它们必须是 PEM 编码的。在网上快速搜索后,看起来.cer.crt.pem 文件都符合这个要求。我使用 MMC 管理单元将使用中的证书导出为 Base-64 编码的 X.509 (CER),并一直将我的环境变量指向它。

我有什么建议可以让它发挥作用吗?

websockets.PHP

    /*
     * Define the optional SSL context for your WebSocket connections.
     * You can see all available options at: http://PHP.net/manual/en/context.ssl.PHP
     */
    'ssl' => [
        /*
         * Path to local certificate file on filesystem. It must be a PEM encoded file which
         * contains your certificate and private key. It can optionally contain the
         * certificate chain of issuers. The private key also may be contained
         * in a separate file specified by local_pk.
         */
        'local_cert' => env('LaraVEL_WEBSOCKETS_SSL_LOCAL_CERT',null),/*
         * Path to local private key file on filesystem in case of separate files for
         * certificate (local_cert) and private key.
         */
        'local_pk' => env('LaraVEL_WEBSOCKETS_SSL_LOCAL_PK',/*
         * Passphrase for your local_cert file.
         */
        'passphrase' => env('LaraVEL_WEBSOCKETS_SSL_PAsspHRASE','allow_self_signed' => true,'verify_peer' => false,],

broadcasting.PHP

        'pusher' => [
            'driver' => 'pusher','key' => env('PUSHER_APP_KEY'),'secret' => env('PUSHER_APP_SECRET'),'app_id' => env('PUSHER_APP_ID'),'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),'host' => '127.0.0.1','port' => 6001,'scheme' => 'https','curl_options' => [
                    CURLOPT_SSL_VERIFYHOST => 0,CURLOPT_SSL_VERIFYPEER => 0,]
            ],

bootstrap.js

import Echo from 'laravel-echo'
console.log('Here')

window.Pusher = require('pusher-js');

window.Echo = new Echo({
    broadcaster: 'pusher',key: process.env.MIX_PUSHER_APP_KEY,cluster: process.env.MIX_PUSHER_APP_CLUSTER,forceTLS: true,wsHost: window.location.hostname,wsPort: 6001,wssport: 6001,disableStats: true,enabledTransports: ['ws','wss'],// <-- only use ws and wss as valid transports
});

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)