4

I have a website that is served by Apache. I am using LetsEncrypt certificates that have been created by certbot using apache plugin. OS is Ubuntu. The site works fine.

Now I am running a NodeJS based API server that uses HTTPS. In order to test I have successfully used the certificates files as TLS option as following:

var tls = {
    key: FS.readFileSync("...."),
    cert: FS.readFileSync("...") };

My understanding is that since these certificates have lifetime of 90 days, at some point the API server will have stale certificate (unless reloaded/restarted).

Then I found out about excellent GreenLock library. I think this is what I want but I need a bit of clarification.

  1. If I use the GreenLock library and point it to the existing certbot managed directory, will it just pick up the existing cert? Note that, there is a apache server running on port 80 to authenticate for those certificates.

  2. Will there be contention between the certboot and the Greenlock to renew the cert?

  3. Do I need to restart my API server for the reason of it recognising the renewed certs or the GreenLock makes the renewal transparent to NodeJS server?

Basically what I want is that the GreenLock just uses the certs from the store and let the certbot + apache manage the creation and renewal. Also when managed like that my NodeJS server continues to run and recognises the renewal.

4

2 回答 2

1

兼容性

Mozilla IOT 最近为 le-store-certbot 插件提供了一些补丁,修复了一些与 certbot 兼容的错误。

十指相扣,最新版本将兼容certbot您之前的文件夹结构,按需设置configDir即可。

争用

当您使用 Greenlock™ 时,不需要certbot而且我不确定在同一系统上同时运行两者的效果如何。理论上它应该工作......但我不会这样做。

但是,由于您使用 node.js 作为 https 服务器,而不是 Apache,我认为您仍然没有任何理由需要 certbot。

自动 HTTPS

Greenlock根据证书中的过期信息自动更新证书,而不是 cron 作业。如果configDir设置为/etc/acme并且证书存在于 中/etc/acme/live/example.com/fullchain.pem,则该证书将被使用。

节点服务不需要重启。只要内存中没有证书,它就会检查磁盘,然后通过 ACME 请求一个。每当内存中有证书时,它就会有过期信息,当它去更新证书时,它会在实际发出请求之前首先在磁盘上检查新证书(因此它应该与 certbot 一起使用)。

于 2018-05-15T08:32:08.370 回答
0

@酷AJ,

根据您的回答,我想我找到了适合我的方案。我想由你运行它以征求意见。

鉴于我现阶段对 Greenlock 的了解,我知道我可以将我的 API 服务器分离到一个单独的盒子中,它将负责我的证书获取和更新。竖起大拇指!但我保留它作为我的后备解决方案。我有基础设施的原因尝试在同一个机器上同时运行我的 API 服务器和 Apache Web 内容服务器,两者都使用 HTTPS,我将进一步推动以获得完整的证明解决方案。这就是我的想法。

  1. 我的 Apache Web 内容服务器 + certbot 设置工作正常。所以这个 apache 已经在端口 80 上响应域验证(我对这个过程的了解是完全空白的)

  2. 我想在同一个盒子上运行一个使用 HTTPS 的 NodeJS Web API 服务器,并希望使用 Greenlock 来管理该 API 服务器的证书的获取和更新。

在我最初的问题中,我想知道我是否可以将 greenlock 指向 Certbot 管理的证书目录,并且为此您提供了足够清晰的答案。这使我认为我不希望 greenlock 从 certbot 托管目录工作。

所以我在同一台机器上的分离问题(certbot 和 greenlock)是只有一个运行在端口 80 的网络服务器会响应两个系统(certbot 和 greenlock)的域验证。

因此,我决定保持 certbot + acache 不变,并使用 greenlock 和指向 apache webroot 及其自己的 configPath 的 webroot 方案。这样,Apache 将成为域验证器。我将为 API 服务器使用子域。因此 certbot 管理“blah.com”的证书,而 greenlock 管理“api.blah.com”的证书。

我的理论是这样就没有人踩到别人的脚趾了。Certbot 正在使用 Apache 插件,因此它是 TLS-SNI-01 质询,Greenlock 将使用 http-01 质询(使用 Apache 提供文件)。

我可以在您的全自动 HTTPS 示例中看到,

https://git.coolaj86.com/coolaj86/greenlock.js

我可以提供带有 webrootPath 的 certbot 存储。

这意味着当我的 API 服务器尝试获取/更新证书时,将响应域验证的是 apache 服务器,我不需要我的 nodejs 服务器在端口 80 上运行任何东西。

你怎么看呢?

感谢您的时间。

于 2018-05-16T02:45:05.260 回答