Вот наконец решил попробовать SSL сертификат от Let’s Encrypt. Сподвигло меня на это то что, купленный мной ранее сертификат от COMODO, на платформе Android оказывается считается недоверенным. А я ни сном ни духом об этом( Да и вобщем хрен с ним с тем сертификатом, стоил он всего 8$, и во первых не жалко, а во вторых, FireFox начал ругаться на то сертификат использует небезопасное шифрование 1024bit.
Вообще что такое Let’s Encrypt? Это центр сертификации который выдает бесплатные HTTPS сертификаты. Ну и немножко википедии:
Проект Let’s Encrypt создан для того, чтобы большая часть интернет-сайтов смогла перейти к шифрованным подключениям (HTTPS). В отличие от коммерческих центров сертификации, в данном проекте не требуется оплата, переконфигурация веб-серверов, использование электронной почты, обработка просроченных сертификатов, что делает процесс установки и настройки TLS-шифрования значительно более простым. Например, на типичном веб-сервере на базе Linux, требуется исполнить две команды, которые настроят HTTPS шифрование, получат и установят сертификат примерно за 20-30 секунд.
У сервиса есть несколько ограничений которые немного печалят, сертификат выдается сроком всего на 3 месяца, отсутствуют WildCard сертификаты. Первое ограничение объясняют тем что мол в случае компрометации, сертификат, выданный на 3 месяца, нанесет вреда меньше, чем сертификат выданный на год.
Теория заговора: хотя мне кажется все эти ограничения созданы искусственно с другой целью — оставить остальные центры сертификации на плаву. Кому то будет лень настраивать cron на перевыпуск сертификата, или же перевыпускать его вручную каждые три месяца. Кому то лень получать сертификаты на все поддомены. А так Let’s Encypt занимает свою нишу среди гиков, которым такие вещи только нравятся.
Как установить Let’s Encypt?
Для этого существует специальный одноименный клиент созданный этой же организацией:
1
2
3
|
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt—auto —help
|
Вообще для nginx у них есть вроде как почти полностью автоматизированный установщик, но честно сказать я не особо рад тому что бы сторонняя утилита правила мои конфиги. Поэтому я предпочел установку сертификатов вручную.
1
|
./letsencrypt—auto certonly —webroot —w [path to webroot dir] —d [domain]
|
В моем случае это выглядит вот так:
1
|
./letsencrypt—auto certonly —webroot —w /var/www/intsystem.org/public_html/ —d intsystem.org —d www.intsystem.org
|
После чего будет создан каталог /etc/letsencrypt/live/intsystem.org/
с символическими ссылками на сертификаты и ключ:
1
2
3
4
|
lrwxrwxrwx 1 root root cert.pem -> ../../archive/intsystem.org/cert1.pem
lrwxrwxrwx 1 root root chain.pem -> ../../archive/intsystem.org/chain1.pem
lrwxrwxrwx 1 root root fullchain.pem -> ../../archive/intsystem.org/fullchain1.pem
lrwxrwxrwx 1 root root privkey.pem -> ../../archive/intsystem.org/privkey1.pem
|
Теперь путь к ним осталось прописать в конфиг Nginx
1
2
3
|
ssl_certificate «/etc/letsencrypt/live/intsystem.org/fullchain.pem»;
ssl_certificate_key «/etc/letsencrypt/live/intsystem.org/privkey.pem»;
ssl_trusted_certificate «/etc/letsencrypt/live/intsystem.org/chain.pem»; #Если используете OCSP
|
и рестартуем Nginx.
Как обновить сертификат?
Особого умения тут тоже не надо, используем ту же самую команду, но с параметром --renew-by-default
:
1
|
./letsencrypt—auto certonly —renew—by—default —webroot —w [path to webroot dir] —d [domain]
|
В моем случае:
1
|
./letsencrypt—auto certonly —renew—by—default —webroot —w /var/www/intsystem.org/public_html/ —d intsystem.org —d www.intsystem.org
|
После выпуска и получения новых сертификатов, должны автоматически обновится символические ссылки на них:
1
2
3
4
|
lrwxrwxrwx 1 root root cert.pem -> ../../archive/intsystem.org/cert2.pem
lrwxrwxrwx 1 root root chain.pem -> ../../archive/intsystem.org/chain2.pem
lrwxrwxrwx 1 root root fullchain.pem -> ../../archive/intsystem.org/fullchain2.pem
lrwxrwxrwx 1 root root privkey.pem -> ../../archive/intsystem.org/privkey2.pem
|
и рестарт Nginx (reload).
Как обновлять сертификат Let’s Encypt автоматически?
Для этого можно добавить следующие комманды в крон на каждые два месяца:
1
2
|
[path]/letsencrypt—auto certonly —renew—by—default —webroot —w [path to webroot dir] —d [domain]
service nginx reload
|
После чего про головную боль связанную с SSL сертификатами можно забыть навсегда.