MyTetra Share
Делитесь знаниями!
Letsencrypt: webroot или standalone для приложения на node.js?
Время создания: 13.07.2018 15:31
Текстовые метки: Nginx SSL Node.js Цифровые сертификаты
Раздел: SSL

Не совсем понятно как будет происходит верфикация сертификата и домена для приложения на node.js?
Во все примерах какие-то папки /.well-known/acme-challenge/. Что это за папки, где они и зачем? нужны ли они если приложение на node.js? Где их размещать - внутри структуры моего проекта, что-ли? "acme-challenge" - это что такое вообще? Я хренею с этих интструкций.

Какой способ выбрать webroot или standalone? Учитывая, что я хочу запустить несколько сайтов с разными доменами на одном VPS. Убунта 16.04.

Решения вопроса 2

Алексей Ярков @yarkov

Vue.js Frontend Developer

Я себе пару скриптов написал:
addnew.sh

#!/bin/bash


# Usage:

# sudo ~/letsencrypt/addnew.sh domain.ru


set -e


DOMAIN="$1"


sudo letsencrypt certonly -a webroot --webroot-path=/var/www/html -d ${DOMAIN} -d www.${DOMAIN}

#openssl dhparam -out /etc/pki/nginx/dhparam.pem 4096


echo -e '

*********************************************************************

NGINX config add:

ssl_certificate /etc/letsencrypt/live/${DOMAIN}/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem;

ssl_dhparam /etc/pki/nginx/dhparam.pem;

*********************************************************************

'


letsencrypt.cron.sh

#!/bin/bash


# This script renews all the Let's Encrypt certificates with a validity < 30 days

# Usage:

# run command:

# sudo crontab -e

# add string

# @daily /home/vpsuser/letsencrypt/letsencrypt.cron.sh

# run command:

# chmod +x /home/vpsuser/letsencrypt/letsencrypt.cron.sh


NGINX=$(which nginx)


if ! /usr/bin/letsencrypt renew > /var/log/letsencrypt/renew.log 2>&1 ; then

echo Automated renewal failed:

cat /var/log/letsencrypt/renew.log

exit 1

fi

${NGINX} -t && service nginx restart



Ну и Nginx:
default.conf

server {

listen 80 default_server;

listen [::]:80 default_server;


root /var/www/html;

index index.html index.htm index.php;

server_name _;


location / {

try_files $uri $uri/ =404;

}


# For LetsEncrypt: https://letsecure.me/secure-web-deployment-with-lets-encrypt-and-nginx/

location ~ /.well-known/acme-challenge {

allow all;

}

}



Ну и документация:
https://gist.github.com/yarkovaleksei/2c6c96222924...

Ответ написан 12 марта 2017 Нравится 2 1 комментарий

Максим Чернятевич @vechnoe

Tornado, Django, Postgres, Asyncio, Clojure

Непонятно, причем здесь node.js. Вы же ноду все равно будете запускать за nginx. Все сертификаты хранятся в /etc/letsencrypt/live/ -- руками там ничего не нужно делать. Единственное, что вы должны сделать -- сконфигурировать nginx и запустить certbot.

1. Добавляте в:
/etc/nginx/templates/certbot.conf шаблон:

# /etc/nginx/templates/certbot.conf


location ~ ^/(.well-known/acme-challenge/.*)$ {

proxy_pass http://127.0.0.1:9999/$1;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $http_host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}



2. Конфиг сайта с бэкендом (например, API), (http редиректится на https):

upstream api_server {

server localhost:8000;

}


server {

listen 192.168.88.245:80;

server_name api.site.com;


return 301 https://$server_name$request_uri;

}


server {

listen 192.168.88.245:443 ssl;

server_name api.dev.drevle.com;

client_max_body_size 4G;


access_log off;

error_log off;


ssl_certificate /etc/letsencrypt/live/api.site.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/api.site.com/privkey.pem;


include templates/certbot.conf;


location /static/ {

alias /home/user/api.site.com/static_collected/;

access_log off;

}


location / {

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $http_host;

proxy_redirect off;


# Try to serve static files from nginx, no point in making an

# *application* server like Unicorn/Rainbows! serve static files.

if (!-f $request_filename) {

proxy_pass http://api_server;

break;

}

}

}



3. Конфиг фронта (например, SPA на ангуляр), (http редиректится на https):

server {

listen 192.168.88.245:80;

server_name ui.site.com;


return 301 https://$server_name$request_uri;

}


server {

listen 192.168.88.245:443 ssl;

server_name ui.site.com;


access_log off;

error_log off;

root /home/user/ui.site.com/site_ui/bin;


charset utf-8;


ssl_certificate /etc/letsencrypt/live/ui.site.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/ui.site.com/privkey.pem;


include templates/certbot.conf;


location / {

try_files $uri /index.html;

}

}



4. Команда генерации сертификата, (чтобы сертификакты сгенерировались корректно, необходимо чтобы был добавлен
certbot.conf, который приведен выше. Настройки https в конфиг добавляете после генерации сертификатов:

sudo certbot --agree-tos --renew-by-default --standalone --standalone-supported-challenges http-01 --http-01-port 9999 --server https://acme-v01.api.letsencrypt.org/directory certonly -d api.site.com



Для обновления раз в три месяца команду можно добавить в крон.

 
MyTetra Share v.0.53
Яндекс индекс цитирования