我在 上有一个网站example.com
,在 上有一个 WebSocket 服务器example-websocket-server.com
。
每个都有一个 SSL 证书,以便我可以从https://
我正在使用 websocket 服务器作为所有其他网站的 websocket 服务器,包括example.com
(还有更多网站)。但是wss://
连接失败(ws://
可以工作)。
websocket 服务器使用 Laravel-Websocket 作为服务器,它要求提供 PEM 证书的路径:https://beyondco.de/docs/laravel-websockets/basic-usage/ssl#configuration:
/* * 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. */
https://
因此,对于该 PEM 证书,我使用了与在 IIS 上使用的证书相同的证书
但是我遇到了一些问题 - 我在 IIS 上使用的证书是一个.pfx
文件,带有给定的密码字符串。
为了创建用于 websocket 服务器wss
连接的 PEM 文件,我首先将 导出.pfx
为 PKCS7 文件 ( .p7b
),然后使用 OpenSSL 将其转换为.cer
文件。当我将扩展名从 更改.cer
为.pem
文件内容时,如下所示:
-----BEGIN PKCS7-----
[..long string..]
-----END PKCS7-----
(我尝试使用该文件作为.cer
以防.pem
万一)
但是现在wss://
失败了,并且没有调试信息,所以我不知道原因是什么。 在我的例子中,原因可能有多种:
- 我使用了错误的证书
.pfx
我从到.cer
/ 的转换.pem
是错误的- 我的应用程序端(Laravel)存在跨域限制,这就是问题所在,因为 websockets 服务器和网站位于不同的 URL 上(但可能性较小,因为它适用于
ws
) - IIS 中 WSS 的一些配置(尽管正常
ws://
连接有效) - PKCS7 不兼容,我需要 PKCS12?
或者其他我还没想到的事情