更新了我的SSL证书,但在AWS EC2服务器上的nodejs中获得UNABLE_TO_VERIFY_LEAF_SIGNATURE

8fq7wneg  于 2023-05-28  发布在  Node.js
关注(0)|答案(2)|浏览(150)

我在AWS EC2服务器上有一个nodejs/express API,它带有一个ssl证书,该证书是用Let's encrypt每3个月生成的。自动续订未打开,我们在尝试续订之前让它显示,但在续订后,我们收到一个错误:
无法验证第一个证书

无法验证叶签名
这取决于我们测试的是什么。
我们使用Certbot通过以下命令进行更新(而不是$ certbot renew):

$ sudo certbot certonly --dns-route53 -d *.example.com -d example.com --server https://acme-v02.api.letsencrypt.org/directory

证书按预期生成,到期日期为3个月后。
知道发生了什么吗我已经尝试了我在SO和其他地方能找到的大多数东西,但都不起作用。
P.S.服务器和我沿着得不太好:/(我做移动的应用程序开发)所以假设我在回复时什么都不知道:D

cnh2zyt3

cnh2zyt31#

解决方案非常简单,只需要使用fullchain.pem文件(如果适用,请重新启动服务器)。

旁注:

如果你的团队中有人告诉你,他们已经测试了一个解决方案,但它不起作用,不要盲目地相信他们,而是在所有其他可能的解决方案都不起作用的情况下自己测试它......(因为有人认为他们用fullchain.pem进行了测试(或者做错了)而损失了1天以上的时间)

62lalag4

62lalag42#

我在构建前端应用程序(Vitesse)和在Insomnia中测试API时遇到了同样的错误。**我通过将intermedium.ctr证书添加到后端(Node.js)服务器来修复它。**服务器位于数字海洋水滴中
(If你没有证书,你可以看这个视频:NodeJS + Express SSL Install and Configuration
这是我在后端(Node.js)中的工作代码:

// Internal modules:
const https = require("https");
const fs = require("fs");

// First install the module: npm install --save express
const express = require("express"); 
const app = express();

//The API listens the port 4000 (Maybe you also need to set up the Firewall to allow this port)
const port = 4000;
 
//In this folder I store the certificates. I bought them in ssltrust 
var absoluteCertsPath = "/ssl_certificates";

https
  .createServer(
    {
      key: fs.readFileSync(`${absoluteCertsPath}/private-key.txt`),
      cert: fs.readFileSync(`${absoluteCertsPath}/certificate.crt`),

      // ⬇️ I fixed the error by adding the intermedium.crt certificate ⬇️
      ca: fs.readFileSync(`${absoluteCertsPath}/intermedium.crt`), 
    },
    app
  )
  .listen(port, () => {
    console.log(`✅ Server running on HTTPS at port ${port}$:`);
  });

app.get('/', (req,res)=>{
    res.send("Successfully working through HTTPS :)")
})

相关问题