如何解决请求帮助: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 举报,一经查实,本站将立刻删除。