【问题标题】:SSL in socket.io with express: Missing PFX or certificate + private key.带有 express 的 socket.io 中的 SSL:缺少 PFX 或证书 + 私钥。
【发布时间】: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.'); 中的错误有关。有谁知道可能会发生什么?这个答案的其他解决方案都没有解决我的问题。

【问题讨论】:

    标签: node.js sockets ssl socket.io


    【解决方案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 &lt;PATH TO KEY&gt; -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 &lt;PATH TO CERT&gt; -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 以获取工作示例。尝试用您的密钥替换此示例中的密钥文件。也许错误在您的代码中的其他地方。
    • 用我的例子测试有什么进展吗?
    猜你喜欢
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2012-10-20
    • 2017-08-30
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多