Установка сертификатов от Let's Encrypt с помощью acme.sh (версия 2019 года)

В этой статье опишу небольшую инструкцию для установки сертификата с помощью acme.sh на базе алгоритма ECDSA P-384, этот алгоритм имеет высокий уровень быстродействия и защищенности. Например 256 битный ECDSA соответствует 3072 битному RSA по степени защиты, но при этом скорость работы в несколько раз выше. Установка acme.sh 1 curl https://get.acme.sh | sh Получение сертификата Метод 1 : использование одной и той же директории для всех acme challenge запросов Первоначально нам необходимо создать файл acme.conf в директории /etc/nginx/common/ со следующим содержанием: 1 location /.well-known/acme-challenge/ { alias /var/www/html/.well-known/acme-challenge/; } После этого установим пользователя www-data (или вашего) владельцем директории /var/www/html : 1 chown -R www-data:www-data /var/www/html Последним шагом нам нужно включить acme.conf в вашу конфигурацию виртуального хоста nginx, добавлением следующей строки : 1 include common/acme.conf; Перечитываем конфигурацию nginx командой service nginx reload и уже сейчас вы можете получить свой первый сертификат с помощью acme.sh: ECDSA Certificates (384 Bits) 1 acme.sh --issue -d yourdomain.tld -d www.yourdomain.tld -d blog.yourdomain.tld --keylength ec-384 -w /var/www/html Метод 2 : используем Cloudflare DNS API Настраиваем ваши API ключи 1 2 export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" export CF_Email="[email protected]" ECDSA Certificates (384 Bits) 1 acme.sh --issue -d yourdomain.tld -d www.yourdomain.tld -d blog.yourdomain.tld --keylength ec-384 --dns dns_cf Устанавливаем SSL сертификат в Nginx НЕ ИСПОЛЬЗУЙТЕ сертификаты в директории ~/.acme.sh/, они только для служебного использования, структура директории может измениться в будущем. Создайте директорию для хранения ваших сертификатов в продакшене. ...

28 травня 2019 · 3 хвилин · 526 слів · dimetrius

OpenSSL, ssl_ciphers и nginx: прокачиваем на 100%

Много где написано о том, как получить 100% и A+ по тесту от Qualys. При всём при том практически везде директивы ssl_ciphers и подобные даются как эдакие магические строки, которые нужно просто вставить, и надеяться, что автор не подводит вас под монастырь. Эта статья призвана исправить это недоразумение. По прочтению этой статьи директива ssl_ciphers потеряет для вас всякую магию, а ECDHE и AES будут как друзья да братья. Подготовка Работать будем с Debian 8.7. Если у вас другой дистрибутив, то версии должны быть такие же или более новые. 1 2 3 4 5 6 7 8 # lsb_release -d Description: Debian GNU/Linux 8.7 (jessie) # openssl version OpenSSL 1.0.1t 3 May 2016 # nginx -V nginx version: nginx/1.6.2 Настроим nginx для получения сертификатов от Let’s Encrypt по инструкции, но только до получения сертификата для нашего домена. 1 certbot certonly -d example.com -d www.example.com Конфиг используем минимальный. Ничего лишнего. Всё по умолчанию. 1 2 3 4 5 6 7 8 server { server_name www.example.com example.com; listen 443 ssl default_server; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; } Теперь прогоним тест для этого сервера. ...

4 квітня 2017 · 11 хвилин · 2334 слів · dimetrius

SSL между фронтендом и бэкендом через несколько прокси серверов

Сложность в том, что некоторым скриптам необходимо знать через какую схему они работают, http, или https. Таким образом они формируют ссылки, а иногда принудительно перенаправляют клиентов куда нужно. Из-за не верной настройки серверного ПО переадресация не может завершиться и браузер покажет нам ошибку ‘too many redirects’. В статье рассмотрим две схемы: nginx (front1, server2) -> nginx (front2, server1) -> php-fpm (back, server1) nginx (front1, server2) -> nginx (front2, server1) -> apache (back, server1) Первой рассмотрим схему с php-fpm: nginx (front1, server2) -> nginx (front2, server1) -> php-fpm (back, server1) На сервере nginx (front1, server2) у нас обязательно должны быть строки 1 2 3 4 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; среди которых нам важна последняя. На сервере nginx (front2, server1) в секцию http добавляем 1 2 3 4 5 6 7 8 http { ... map $http_x_forwarded_proto $fastcgi_https { default off; https on; } ... } Если его добавить в любое другое место - получите следующую ошибку при перезапуске nginx: 1 nginx: [emerg] "map" directive is not allowed here Если прописать просто $https вместо $fastcgi_https - получите следующую ошибку: 1 nginx: [emerg] the duplicate "https" variable in /etc/nginx/nginx.conf Дело в том, что начиная с какой-то бородатой версии NginX имеет встроенную переменную $https, поэтому ее повторно использовать не получится. ...

25 вересня 2016 · 3 хвилин · 476 слів · dimetrius

Joomla 2.5-3.5 решение проблемы с циклической переадресацией при включении SSL(https)

В связи со скорым выходом 56 версии Chrome, которая будет показывать уведомление ‘Not Secure’ при посещении сайтов без SSL, я постепенно перевожу все свои сайты на использование HTTPS. Сайты на Joomla конечно же тоже есть в этом списке. Поскольку у меня сайты работают не на одном сервере, не на одном apache, а на целой связке серверов, то возникают некоторые сложности с настройкой HTTPS подключения и корректной работой некоторых скриптов. В моём случае если ничего не включать в настройках Joomla и заходить на неё по https, то картинки, css, js грузились по http, что не допустимо. В интернете почти всюду встречается рецепт: Включаем принудительно SSL в настройках Joomla. Получаем циклическую переадресацию ‘too many redirects’. Редактируем /libraries/joomla/environment/uri.php (в версии 3.5 /libraries/joomla/uri/uri.php) Заменяем 1 2 3 4 5 6 7 8 if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) { $https = 's://'; } else { $https = '://'; } на 1 2 3 4 5 6 7 8 if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) { $https = 's://'; } else { $https = 's://'; } тем самым делая условие абсолютно бесполезным. В этом случае сайт больше не сможет работать по HTTP, не используя HTTPS. Вся эта ситуация вырисовывается от не верных настроек вэб сервера, в моём случае серверов. Бэкэнд всё так же думает что используется HTTP соединение, php соответственно тоже, ссылки строятся без учёта HTTPS. ...

23 травня 2016 · 3 хвилин · 429 слів · dimetrius

Безопасность Openfire jabber сервера и сертификат от Let's Encrypt

Пришлось настраивать openfire jabber сервер. Просили использовать сертификат от Let’s Encrypt, естественно его авто обновление и добиться максимальной оценки на xmpp.org. Описывать установку не буду. В моём случае это был CentOS 6.6, Openfire 4.0.2 был установлен из своего же пакета, оказался на разделе /opt. Java 8 используется интегрированная в пакет, находится там же. Для получения сертификата используем LetsEncrypt. 1 /root/letsencrypt/letsencrypt-auto certonly --webroot -w /opt/ssl -d example.com для того чтоб всё отработало нужно в конфиг виртуального хоста вэб сервера нужного домена добавить что-то такое: 1 Alias "/.well-known" "/opt/ssl/.well-known" Сами должны разобраться. Отключаем устаревшие шифры в файле /opt/openfire/jre/lib/security/java.security 1 2 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024 jdk.tls.disabledAlgorithms=SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA, SSL_DH_anon_EXPORT_WITH_RC4_40_MD5, SSL_DH_anon_WITH_3DES_EDE_CBC_SHA, SSL_DH_anon_WITH_DES_CBC_SHA, SSL_DH_anon_WITH_RC4_128_MD5, SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA, SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DH_DSS_WITH_DES_CBC_SHA, SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DH_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_RC4_128_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA, SSL_FORTEZZA_DMS_WITH_NULL_SHA, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA, SSL_RSA_EXPORT1024_WITH_RC4_56_SHA, SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_FIPS_WITH_DES_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_RSA_WITH_IDEA_CBC_SHA, SSL_RSA_WITH_NULL_MD5, SSL_RSA_WITH_NULL_SHA, SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, SSL_DH_anon_EXPORT_WITH_RC4_40_MD5, SSL_DH_anon_WITH_RC4_128_MD5, SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, SSL_DHE_DSS_WITH_RC4_128_SHA, TLS_DHE_PSK_WITH_RC4_128_SHA, TLS_ECDH_anon_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA, TLS_ECDH_RSA_WITH_RC4_128_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_PSK_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_KRB5_EXPORT_WITH_RC4_40_MD5, TLS_KRB5_EXPORT_WITH_RC4_40_SHA, TLS_KRB5_WITH_RC4_128_MD5, TLS_KRB5_WITH_RC4_128_SHA, TLS_PSK_WITH_RC4_128_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT1024_WITH_RC4_56_SHA, TLS_RSA_PSK_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSLv3 Для активации 256 битных шифров нужно перейти на сайт java и скачать обновлённые файлы. Переходим по ссылке http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html и качаем файл jce_policy-8.zip. Распаковываем содержимое в /opt/openfire/jre/lib/security/ с заменой. Для активации 2048 DH ключа нужно в самом скрипте запуска добавить в строку запуска параметр -Djdk.tls.ephemeralDHKeySize=2048. В человеческих системах, или когда люди больше разбираются, нужно это делать по другому ...

3 травня 2016 · 3 хвилин · 475 слів · dimetrius