Автоматизация создания сертификатов OpenSSL , Подписание Let'sEncrypt и связывание каталога сайта в среде Nginx

На perl:

#!/usr/bin/perl

my (%hotu, %hpc)=();
while(<>){
  my($pc,$otu,$v)=split;
  $hpc{$pc}=1;
  ($hotu{$otu} or $hotu{$otu}={})->{$pc}+=$v;
}
#headers
my @apc = sort keys %hpc;
print join ("\t", 'OTU_ID', @apc) . "\n";
#values
foreach my $otu (sort keys %hotu) {
  print join ("\t", $otu, map {$_=0 unless defined; $_} @{$hotu{$otu}}{@apc}) . "\n";
}
3
13.08.2017, 11:56
4 ответа

С помощьюdehydrated(https://github.com/lukas2511/dehydrated)легко создавать и обновлять сертификаты Let's Encrypt.

Вы должны добавить местоположение /.well-known/acme-challenge/для каждого сайта, так как служба Let's Encrypt будет проверять ответы на запросы в этом местоположении, чтобы убедиться, что вы являетесь владельцем сайтов, для которых вы запросили сертификаты :

.
location /.well-known/acme-challenge/ { allow all; root /st/hosting/hamilton/htdocs; } 

И использовать тот же путь в обезвоженной конфигурации:

egrep -v "^#|^[[:space:]]*$" config                                          
WELLKNOWN="/st/hosting/hamilton/htdocs/.well-known/acme-challenge"
CONTACT_EMAIL=<you@email>

После этого поместите все ваши домены в domain.txtфайл :в каждой строке первый домен будет CommonNameа остальные имена будут AlternativeNames, например:

head -n1 domains.txt
hamilton.rinet.ru jenkins.hamilton.rinet.ru munin.hamilton.rinet.ru

После этого вы должны указать dehydrated -cв cron и использовать скрипт, подобный этому, для установки новых сгенерированных сертификатов:

#!/bin/sh

CERTS_DIR=/usr/local/etc/dehydrated/certs
NGINX_SSL=/usr/local/etc/nginx/ssl
DOMAINS=$(awk '{ print $1 }' /usr/local/etc/dehydrated/domains.txt)

for d in $DOMAINS; do
  short_d=${d%%.rinet.ru}
  short_d=${short_d%%.ru}
  # short_d=${short_d##www.}
  cp -v ${CERTS_DIR}/$d/fullchain.pem ${NGINX_SSL}/${short_d}.crt
  cp -v ${CERTS_DIR}/$d/privkey.pem ${NGINX_SSL}/${short_d}.key
done

# Also update certs for Dovecot
cp -v ${CERTS_DIR}/hamilton.rinet.ru/fullchain.pem /usr/local/etc/dovecot/certs/certs/server.crt
cp -v ${CERTS_DIR}/hamilton.rinet.ru/privkey.pem /usr/local/etc/dovecot/certs/private/server.key
3
27.01.2020, 21:13

Прежде всего, я хотел бы проверить некоторые из клиентов LetsEncrypt . В частности, те, которые перечислены для Nginx. Я бы начал с этого, прежде чем изобретать велосипед, поскольку вы изначально хотели использовать сертификаты с подписью LE.

Если вместо этого вы хотите использовать OpenSSL для создания самоподписанных -сертификатов, вы можете пройтись по списку доменных имен и выполнить opensslдля каждого домена с помощью команды, аналогичной:

openssl req -x509 -newkey rsa:2048 -keyout examplekey.pem -out examplecert.pem -nodes -days 365 -set_serial NNNNN -subj "/C=US/L=Any City/OU=FooBar Inc/CN=*.example.com"

Конечно, для каждого домена вы хотите изменить examplekey.pem, examplecert.pemи *.example.com. Замените NNNNNпорядковым номером, увеличивая его для каждой итерации цикла.

Вы должны быть в состоянии легко написать сценарий, который перебирает нужные доменные имена и обновляет различные файлы конфигурации Nginx.

2
27.01.2020, 21:13

Используйте certbot --nginx -d your.domain.nameи certbot автоматически обновит вашу конфигурацию nginx

Итак, после того, как вы настроили Virtualhosts, вы можете запустить его для каждого из доменов, где вы будете использовать команду ssl certbot --nginx -d your.domain.name, которая задаст вам несколько вопросов и сгенерирует правильный файл конфигурации. Или вы можете просто запустить certbot --nginx, если у вас уже есть имена хостов на nginx. Он будет автоматически включать файлы конфигурации для nginx, старые будут сохранены как.old.

Вы также можете ознакомиться с этим руководством:https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04Не забудьте добавить crontab с certbot --renew.

0
27.01.2020, 21:13

Я добавлю acmetool в круг клиентов Let’s Encrypt, это очень просто, как только вы накормите его путями.acmetool want www.site1.orgacmetool want www.site2.netи т. д. Вы должны указать запрос acme в нужное место с помощью блока location {} в nginx... он обрабатывает обновления через cron, если хотите.

1
27.01.2020, 21:13

Теги

Похожие вопросы