带有 express 的 socket.io 中的 SSL:缺少 PFX 或证书 + 私钥。
Posted
技术标签:
【中文标题】带有 express 的 socket.io 中的 SSL:缺少 PFX 或证书 + 私钥。【英文标题】:SSL in socket.io with express: Missing PFX or certificate + private key. 【发布时间】:2016-01-24 20:59:35 【问题描述】:我想通过 SSL 与 socket.io 连接。 我已阅读其他答案,但没有任何效果
这是我的代码:
var ssl_options =
key : fs.readFileSync(my_key_path),
cert : fs.readFileSync(my_cert_path)
;
var protocol = "https";
preparedApp = require(protocol).createServer(ssl_options,app);
var io = require('socket.io')(preparedApp);
preparedApp.listen(8080, function());
io.on('connection', function(socket));
这是我的 ssl_options 的日志...
key: <Buffer 41 ...>,
cert: <Buffer 4a ...>
此错误与标题 throw new Error('Missing PFX or certificate + private key.');
中的错误有关。有谁知道可能会发生什么?这个答案的其他解决方案都没有解决我的问题。
【问题讨论】:
【参考方案1】:为您的私钥使用 PEM (RSA) 格式。检查私钥是否为 base64 编码,包含在“-----BEGIN RSA PRIVATE KEY-----”和“-----END RSA PRIVATE KEY-----”之间
来自文档:
key:一个字符串或Buffer,包含PEM格式的服务器私钥 cert : 保存 PEM 编码证书的字符串 passphrase:私钥或 pfx 的密码字符串 [可选默认值:null]或
pfx : 保存 PFX 或 PKCS12 编码的私钥、证书和 CA 证书的字符串或缓冲区要将私钥转换为 RSA PEM:openssl rsa -in <PATH TO KEY> -out key.pem -outform PEM
要创建 PKCS #12 捆绑包,请使用 openssl pkcs12 -export -in cert.pem -inkey key.pem -certfile ca.pem -out host.pfx
-- 添加--
为了确保证书是 PEM 编码运行 openssl x509 -in <PATH TO CERT> -out cert.pem -outform PEM
【讨论】:
基本上,我使用您告诉我的命令将我的 .key 变成了 .pem。之后我将代码更改为var ssl_options = key : fs.readFileSync(my_pem_path), (is in .pem) cert : fs.readFileSync(my_cert_path) (is in .crt) ;
,但仍然失败并出现相同的错误。有什么想法吗?
尝试将 crt 编码为 pem。请参阅我的答案。
将 cert.pem 文件以 -----BEGIN CERTIFICATE-----? 开头?
请参阅gist.github.com/mawi12345/836ef502529b8d6e6366 以获取工作示例。尝试用您的密钥替换此示例中的密钥文件。也许错误在您的代码中的其他地方。
用我的例子测试有什么进展吗?以上是关于带有 express 的 socket.io 中的 SSL:缺少 PFX 或证书 + 私钥。的主要内容,如果未能解决你的问题,请参考以下文章
带有 socket.io 和 express 的 Websocket
无法从带有 Socket.IO 的 cookie 中获取 Express 会话 ID