Skip to content

Commit b324110

Browse files
committed
Trying something to fix the auto ssl renewal process
1 parent b38e239 commit b324110

File tree

6 files changed

+48
-19
lines changed

6 files changed

+48
-19
lines changed

manager/src/backend/internal/ssl.js

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const internalSsl = {
2626
processExpiringHosts: () => {
2727
if (!internalSsl.interval_processing) {
2828
logger.info('Renewing SSL certs close to expiry...');
29-
return utils.exec('/usr/bin/letsencrypt renew')
29+
return utils.exec('/usr/bin/certbot renew --webroot=/config/letsencrypt-acme-challenge')
3030
.then(result => {
3131
logger.info(result);
3232
internalSsl.interval_processing = false;
@@ -55,7 +55,7 @@ const internalSsl = {
5555
requestSsl: host => {
5656
logger.info('Requesting SSL certificates for ' + host.hostname);
5757

58-
return utils.exec('/usr/bin/letsencrypt certonly --agree-tos --email "' + host.letsencrypt_email + '" -n -a webroot --webroot-path=' + host.root_path + ' -d "' + host.hostname + '"')
58+
return utils.exec('/usr/bin/letsencrypt certonly --agree-tos --email "' + host.letsencrypt_email + '" -n -a webroot --webroot-path=/config/letsencrypt-acme-challenge -d "' + host.hostname + '"')
5959
.then(result => {
6060
logger.info(result);
6161
return result;
@@ -69,7 +69,7 @@ const internalSsl = {
6969
renewSsl: host => {
7070
logger.info('Renewing SSL certificates for ' + host.hostname);
7171

72-
return utils.exec('/usr/bin/letsencrypt renew --force-renewal --disable-hook-validation --cert-name "' + host.hostname + '"')
72+
return utils.exec('/usr/bin/certbot renew --force-renewal --disable-hook-validation --webroot-path=/config/letsencrypt-acme-challenge --cert-name "' + host.hostname + '"')
7373
.then(result => {
7474
logger.info(result);
7575
return result;
@@ -83,7 +83,7 @@ const internalSsl = {
8383
deleteCerts: host => {
8484
logger.info('Deleting SSL certificates for ' + host.hostname);
8585

86-
return utils.exec('/usr/bin/letsencrypt delete -n --cert-name "' + host.hostname + '"')
86+
return utils.exec('/usr/bin/certbot delete -n --cert-name "' + host.hostname + '"')
8787
.then(result => {
8888
logger.info(result);
8989
})
@@ -101,20 +101,17 @@ const internalSsl = {
101101
let filename = internalNginx.getConfigName(host);
102102
let template_data = host;
103103

104-
template_data.root_path = '/tmp/' + host.hostname;
105-
106-
return utils.exec('mkdir -p ' + template_data.root_path)
107-
.then(() => {
108-
try {
109-
template = fs.readFileSync(__dirname + '/../templates/letsencrypt.conf.ejs', {encoding: 'utf8'});
110-
let config_text = ejs.render(template, template_data);
111-
fs.writeFileSync(filename, config_text, {encoding: 'utf8'});
112-
113-
return template_data;
114-
} catch (err) {
115-
throw new error.ConfigurationError(err.message);
116-
}
117-
});
104+
return new Promise((resolve, reject) => {
105+
try {
106+
template = fs.readFileSync(__dirname + '/../templates/letsencrypt.conf.ejs', {encoding: 'utf8'});
107+
let config_text = ejs.render(template, template_data);
108+
fs.writeFileSync(filename, config_text, {encoding: 'utf8'});
109+
110+
resolve(template_data);
111+
} catch (err) {
112+
reject(new error.ConfigurationError(err.message));
113+
}
114+
});
118115
},
119116

120117
/**

manager/src/backend/templates/letsencrypt.conf.ejs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ server {
66
access_log /config/logs/letsencrypt.log proxy;
77

88
location / {
9-
root <%- root_path %>;
9+
root /config/letsencrypt-acme-challenge;
1010
}
1111
}

manager/src/backend/templates/proxy.conf.ejs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ server {
1414
<%- typeof block_exploits !== 'undefined' && block_exploits ? 'include conf.d/include/block-exploits.conf;' : '' %>
1515

1616
<% if (typeof ssl !== 'undefined' && ssl) { -%>
17+
include conf.d/include/letsencrypt-acme-challenge.conf;
1718
include conf.d/include/ssl-ciphers.conf;
1819
ssl_certificate /etc/letsencrypt/live/<%- hostname %>/fullchain.pem;
1920
ssl_certificate_key /etc/letsencrypt/live/<%- hostname %>/privkey.pem;
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Rule for legitimate ACME Challenge requests (like /.well-known/acme-challenge/xxxxxxxxx)
2+
# We use ^~ here, so that we don't check other regexes (for speed-up). We actually MUST cancel
3+
# other regex checks, because in our other config files have regex rule that denies access to files with dotted names.
4+
location ^~ /.well-known/acme-challenge/ {
5+
6+
# Set correct content type. According to this:
7+
# https://community.letsencrypt.org/t/using-the-webroot-domain-verification-method/1445/29
8+
# Current specification requires "text/plain" or no content header at all.
9+
# It seems that "text/plain" is a safe option.
10+
default_type "text/plain";
11+
12+
# This directory must be the same as in /etc/letsencrypt/cli.ini
13+
# as "webroot-path" parameter. Also don't forget to set "authenticator" parameter
14+
# there to "webroot".
15+
# Do NOT use alias, use root! Target directory is located here:
16+
# /var/www/common/letsencrypt/.well-known/acme-challenge/
17+
root /config/letsencrypt-acme-challenge;
18+
}
19+
20+
# Hide /acme-challenge subdirectory and return 404 on all requests.
21+
# It is somewhat more secure than letting Nginx return 403.
22+
# Ending slash is important!
23+
location = /.well-known/acme-challenge/ {
24+
return 404;
25+
}

rootfs/etc/services.d/manager/run

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#!/usr/bin/with-contenv bash
22

3+
mkdir -p /config/letsencrypt-acme-challenge
4+
35
cd /srv/manager
46
node --abort_on_uncaught_exception --max_old_space_size=250 /srv/manager/src/backend/index.js
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
text = True
2+
non-interactive = True
3+
authenticator = webroot
4+
webroot-path = /config/letsencrypt-acme-challenge

0 commit comments

Comments
 (0)