После получения сертификата Let′s Encrypt для нового сайта, обозреватель Chrome сообщает о том, что соединение не защищено. Хотя другие сайты, расположенные в этой виртуальной машине, открываются нормально. Так же, проблемный сайт нормально открывается в другом браузере.
Вероятно проблема в том, что сайт содержит смешанное содержимое, которое передаётся как по HTTPS, так и по HTTP. В этом случае необходимо проверить, включена ли принудительная переадресация на HTTPS в настройках вэб-сервера.
В BitrixEnv это можно сделать через меню: 6. Configure pool sites → 5.Change a site’s https settings
В сводной таблице, для сайта должно отображаться значение S — Only HTTPS access to the server
HTTPS
NginX — установка бесплатных SSL-сертификатов для нескольких сайтов
- Создаем пользователя letsencrypt и необходимые директории:
- Создаём основные приватные ключи:
- Скачиваем клиент acme_tiny.py:
- Создаем сценарий /var/www/challenges/acme-tiny.sh, для автоматизации. Изменив значение переменной DOMAINS, указываем имена доменов, для которых необходимо получить сертификаты:
- Меняем права на директории:
- Создаём файл /etc/nginx/acme:
- В конфигурационный файл nginx каждого сайта, в блок server, добавляем строку:
- Запускаем скрипт:
- Включаем шифрование, добавив в конфигурационные файлы nginx каждого сайта:
- Для автоматического продления сертификатов, создадим файл /etc/cron.d/letsencrypt:
- Создадим файлы журналов:
adduser —home /var/www/challenges \
—shell /bin/sh \
—disabled-password \
—disabled-login \
letsencrypt
mkdir -p /etc/letsencrypt/domains
cd /etc/letsencrypt/
openssl dhparam -out dhparam.pem 2048
openssl genrsa 4096 > account.key
cd /var/www/challenges
wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py
DOMAINS=( site1.ru site2.com )
DOMAIN_ROOT=/etc/letsencrypt/domains
ACCOUNT_KEY=/etc/letsencrypt/account.key
ACME_DIR=/var/www/challenges
ACME_TINY=${ACME_DIR}/acme_tiny.py
[ -d ${DOMAIN_ROOT} ] || { echo "ERROR: DOMAIN_ROOT dir does not exists"; exit 1; }
[ -f ${ACCOUNT_KEY} ] || { echo "ERROR: ACCOUNT_KEY not found."; exit 1; }
[ -d ${ACME_DIR} ] || { echo "ERROR: ACME_DIR dir does not exists"; exit 1; }
[ -f "$ACME_TINY" ] || { echo "ERROR: ACME_TINY not found."; exit 1; }
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > ${DOMAIN_ROOT}/intermediate.pem
for DOMAIN in "${DOMAINS[@]}"
do
if [ ! -f "${DOMAIN_ROOT}/${DOMAIN}.key" ]; then
echo "INFO: Generation private key for $DOMAIN";
openssl genrsa 4096 > ${DOMAIN_ROOT}/${DOMAIN}.key
openssl req -new -sha256 -key ${DOMAIN_ROOT}/${DOMAIN}.key -subj "/CN=${DOMAIN}" > ${DOMAIN_ROOT}/${DOMAIN}.csr
fi
echo "INFO: Generation cert for $DOMAIN";
python ${ACME_TINY} --account-key ${ACCOUNT_KEY} --csr ${DOMAIN_ROOT}/${DOMAIN}.csr --acme-dir ${ACME_DIR} > ${DOMAIN_ROOT}/${DOMAIN}.crt || exit 1
cat ${DOMAIN_ROOT}/${DOMAIN}.crt ${DOMAIN_ROOT}/intermediate.pem > ${DOMAIN_ROOT}/${DOMAIN}.pem
done
sudo service nginx reload
chmod 755 /etc/letsencrypt
chown -R letsencrypt: /etc/letsencrypt /var/www/challenges
location ^~ /.well-known/acme-challenge/ {
alias /var/www/challenges/;
try_files $uri =404;
allow all;
}
include /etc/nginx/acme;
/bin/bash /var/www/challenges/acme-tiny.sh
server {
server_name site1.ru www.site1.ru;
listen 80;
include acme;
# включим переадресацию на https-версию сайта
location / {
return 301 https://$host$request_uri;
}
}
server {
server_name site1.ru www.site1.ru;
listen 443 ssl;
# включим шифрование
ssl on;
ssl_certificate /etc/letsencrypt/domains/alluborka.ru.pem;
ssl_certificate_key /etc/letsencrypt/domains/alluborka.ru.key;
ssl_dhparam /etc/letsencrypt/dhparam.pem;
ssl_stapling on;
ssl_stapling_verify on;
# исключим возврат на http-версию сайта
add_header Strict-Transport-Security "max-age=31536000";
# явно "сломаем" все картинки с http://
add_header Content-Security-Policy "img-src https: data:; upgrade-insecure-requests";
...
}
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 0 1 * * letsencrypt /bin/bash /var/www/challenges/acme-tiny.sh >> /var/log/acme_tiny.log
sudo touch /var/log/acme_tiny.log
sudo chown letsencrypt: /var/log/acme_tiny.log