使用证书中的 public 密钥将引发错误

using public key from certificate will throw error

我计划根据一些非常具体的要求使用 auth0。为此,我需要一个基于证书和 public 密钥的 https 服务器。我已经从 auth0 下载证书并使用以下命令提取 public 密钥:

openssl x509 -pubkey -noout -in yourfilename.cer > pubkey.pem

然后我从中删除了 ---Begin--- 和 ---End---。然而,当使用 https 服务器的证书和密钥时,它不起作用并且我不断收到此错误:

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line

我的代码:

const privateKey = fs.readFileSync('./certs/pubkey.pem', 'utf-8');
const certificate = fs.readFileSync('./certs/certificate.cer', 'utf-8');
const credentials = {key: privateKey, cert: certificate};

这里的问题是您试图从 public 密钥 .pem 文件创建私钥。我相信这就是您从服务器创建代码中收到错误的原因。

此代码适用于例如:

const fs = require('fs');
const https = require('https');
const privateKey  = fs.readFileSync('./privateKey.key', 'utf8');
const certificate = fs.readFileSync('./certificate.crt', 'utf8');

const credentials = { key: privateKey, cert: certificate };
const express = require('express');
const app = express();

// Add test route here. 
app.get("/test", (req, res) => {
    res.status(200).send("All good");
})

const server = https.createServer(credentials, app);
server.listen(8443);

而如果我们尝试:

const fs = require('fs');
const https = require('https');
const privateKey  = fs.readFileSync('./pubkey.pem', 'utf8');
const certificate = fs.readFileSync('./certificate.crt', 'utf8');

const credentials = {key: privateKey, cert: certificate};
const express = require('express');
const app = express();

// Add test route here. 
app.get("/test", (req, res) => {
    res.status(200).send("All good");
})

const server = https.createServer(credentials, app);
server.listen(8443);

我们会得到错误:

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line

您需要一个私钥来创建您的 https 服务器,而证书中没有私钥。