【问题标题】:Node.js HTTPS not workingNode.js HTTPS 不工作
【发布时间】:2021-11-09 14:57:25
【问题描述】:

我正在尝试使用 Node.js 创建 HTTPS 服务器。我已经按照网络上的一些说明进行操作,最终得到以下代码:

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('D:\\NodeJs\\HTTPS\\keys\\pvtkey.pem', 'utf8'),
  cert: fs.readFileSync('D:\\NodeJs\\HTTPS\\keys\\cert.pem', 'utf8'),
  requestCert: false,
  rejectUnauthorized: false
};

https.createServer(options, function (req, res) {

  if (req.client.authorized) {
        res.writeHead(200, {"Content-Type": "application/json"});
        res.end('{"status":"approved"}');
    } else {
        res.writeHead(401, {"Content-Type": "application/json"});
        res.end('{"status":"denied"}');
    }

}).listen(443);

console.log('start listing');

尝试从 Chrome 访问时,我收到以下错误:

SSL 连接错误 无法与服务器建立安全连接。 这可能是服务器的问题,或者可能需要客户端 您没有的身份验证证书。错误代码: ERR_SSL_PROTOCOL_ERROR

有什么建议吗?

【问题讨论】:

  • 必须在您的服务器上安装有效的 SSL 证书才能使用 HTTPS 连接。
  • 我已更改 https 选项以使用 pfx,但“身份未验证”
  • @AhmedMetwally:“身份未验证”是您的证书有问题。最好再问一个关于这个问题的问题,不要忘记包含您的证书的详细信息(颁发者、主题、SAN ......)

标签: node.js https


【解决方案1】:

问题是您的 SSL 证书是自签名的,或者没有可用的 SSL 证书。

要绕过 SSL 证书的测试,您可以添加以下行:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

【讨论】:

    【解决方案2】:

    如果您使用 Windows 服务器

    我建议以下步骤

    第 1 步:

    为了从可信来源购买 ssl,我使用了 ssls.com

    第 2 步:

    在 iis 上安装 ssl

    第 3 步:

    导出ssl证书到pfx文件,使用digiCertUtil.exe download here

    enter image description here

    enter image description here

    第 4 步:

    使用 openssl 生成 privkey.pem 和 fullchain.pem 文件

    openssl pkcs12 -in example.pfx -nocerts -nodes -out privkey.pem -passin pass:pfx-password -passout pass:new-password
    
    openssl pkcs12 -in example.pfx -nokeys -out fullchain.pem -passin pass:pfx-password -passout pass:new-password
    

    第 5 步:

    在 node.js 应用中使用

    var express = require('express');
    var https = require('https');
    var http = require('http');
    var fs = require('fs');
    
    var options = {
      key: fs.readFileSync('privkey.pem'),
      cert: fs.readFileSync('fullchain.pem')
    };
    
    
    var app = express();
    
    app.get('/', (req, res) => {
      res.send('Hollo world')
    })
    
    https.createServer(options, app).listen(8883);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 2012-03-20
      • 2012-06-02
      • 2017-05-31
      • 2018-12-23
      • 1970-01-01
      • 2015-12-27
      相关资源
      最近更新 更多