创建SSL证书以与Node.js一起使用

时间:2019-04-07 08:23:26

标签: node.js ssl https

我需要在https协议上运行本地Express服务器。我使用了this网站和类似网站上的说明。但是,当我尝试在浏览器中打开页面时,出现Your connection is not private错误。当我从Security打开Developer tools标签时,看到This site is missing a valid, trusted certificate (net::ERR_CERT_INVALID)错误。当我尝试通过Postman发送请求时,我的服务器没有响应,并且curl请求返回:

curl: (60) SSL certificate problem: unable to get local issuer certificate

这是服务器代码:

const app = require('express')();
const fs = require('fs');
const https = require('https');

const options = {
  key: fs.readFileSync('./key.pem'),
  cert: fs.readFileSync('./cert.pem')
};

app.get('/', (req, res) => {
  res.send('hello world');
});

https
  .createServer(options, app)
  .listen(3000, '127.0.0.1', () => {
    console.log('Run on: https://127.0.0.1:3000');
  });

我已经用下一条命令创建了证书:

$ openssl req -nodes -sha256 -new -x509 -keyout key.pem -out cert.pem -days 365 -config req.cnf

其中req.cnf文件具有以下内容:

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = 127.0.0.1:3000
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = IP:127.0.0.1:3000

我也尝试使用443端口,但是不幸的是,我遇到了同样的错误。另外,我尝试以隐身模式打开页面https://127.0.0.1:3000-什么也没发生-错误是相同的。

我的问题是:

  1. 我在哪里创建证书错了?
  2. 为什么我不能通过Postman / curl向我的服务器发送请求?

1 个答案:

答案 0 :(得分:0)

您创建的是self-signed certificate,默认情况下,任何网络应用程序都不会接受它们,因为它们无法验证它们,因此,他们认为情况更糟(MITM攻击)。

如果您只需要进行本地检查,则可以按照此操作 Getting Chrome to accept self-signed localhost certificate

邮递员错误可能与Chrome应用程序等效。