簡體   English   中英

如何在 Node.js 應用程序中自動重新加載更新的 SSL 證書

[英]How to automatically reload updated SSL certificates in Node.js Application

我創建了 nodejs 應用程序,並且正在使用Lets Encrypt SSL 證書。 以下是我的代碼

var express = require(‘express’);
var https = require(‘https’);
var fs = require(‘fs’);
var option = {
    key: fs.readFileSync(‘/etc/letsencrypt/live/$DOMAIN/privkey.pem’),
    cert: fs.readFileSync(‘/etc/letsencrypt/live/$DOMAIN/fullchain.pem’)
};
const app = express();
app.use((req, res) =>
{
    res.end(‘Hello World’);
});

https.createServer(option, app).listen(8000);

我已使用 pm2 使用以下命令啟動此應用程序

sudo pm2 start app.js --watch

我正在使用以下 cronjob 更新 SSL 證書

0 8 * * * sudo certbot renew

每當 certbot 更新 SSL 證書時,我想自動重新加載 SSL 證書。 我怎樣才能做到這一點?

您可以在每次續訂后使用標志--post-hook重新啟動您的應用程序。

certbot renew --post-hook "pm2 restart app_name"
更新#1

請注意,我們正在運行的命令在 crontab 中,並且必須使用完整路徑引用任何全局程序。 您可以使用which命令查找該命令的可執行文件路徑。

您可以在不重新啟動服務器的情況下重新加載新證書。

根據問題Reload certificate files of https.createServer() without restarting node server #15115 ,特別是來自 mscdex 的評論

FWIW,您已經可以使用 SNICallback() 執行此操作:

 const https = require('https'); const tls = require('tls'); const fs = require('fs'); var ctx = tls.createSecureContext({ key: fs.readFileSync(config.sslKeyPath), cert: fs.readFileSync(config.sslCrtPath) }); https.createServer({ SNICallback: (servername, cb) => { // here you can even change up the `SecureContext` // based on `servername` if you want cb(null, ctx); } });

有了這個,你所要做的就是重新分配 ctx ,然后它將用於任何未來的請求。

使用上面的示例,您只需在SNICallback fs.readFileSync它們附加到ctx object。 但是,當你知道它們剛剛改變時,你只想這樣做。 您可以查看 javascript 中的文件以進行更改。 您可以為此使用fs.watch()npm中的某些內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM