Предыстория: с самого начала для сайта нашей Московской компании (по ссылке уже установлен тестовый бета-сертификат Let's Encrypt) был необходим «простой» SSL-сертификат для подтверждения домена и шифрования данных.
В первые дни открытия заявок на бета-тестирование и было принято решение записаться и вот недавно пришло письмо, которое сообщает о том, что теперь программа ACME сгенерирует валидный сертификат для нашего домена:
Далее мы решили опубликовать статью с пошаговой инструкцией процесса, чтобы к моменту релиза вы уже смогли оперативно создать и начать пользоваться своим сертификатом.
Как это работает
Полное описание процесса доступно по этой ссылке.
Важно лишь знать, что для подтверждения владения доменом и успешной генерации сертификата нужно будет иметь доступ к записям DNS или к серверу куда ссылается A-запись, что вполне логично.
Смысл программного набора Automated Certificate Management Environment (ACME) (написан на Python) в том, чтобы автоматизировать генерацию и установку сертификата в Linux-окружении.
Существует неофициальный Windows-клиент с открытыми исходными кодами, который может генерировать и устанавливать сертификаты на Windows IIS и Amazon Web Services, но у нас была задача получить ключи и установить их вручную. Предлагаю любому желающему написать статью по работе с ним.
Процесс по шагам
Использовалась официальная инструкция.
Пользователи Linux могут использовать текст ниже как пример генерации сертификата в ручном режиме.
1. Запустите ваш любимый дистрибутив Linux (мы использовали Debian 8).
либо 2. Установите Git и выполните команды ниже:
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
или 2. Скачайте и распакуйте в папку данный архив и перейдите в эту папку
3. Запустите установку и генерацию с помощью
./letsencrypt-auto --agree-dev-preview --server \https://acme-v01.api.letsencrypt.org/directory -a manual auth
Вам будет предложено ввести электронную почту для восстановления в будущем.
Ключ -a manual позволит сгенерировать ключи в ручном режиме без их автоматической установки на веб-сервер.
4. Далее введите домены для которых вы хотите создать сертификаты
5. Подтвердите сохранение вашего адреса в логах Let's Encrypt
6. Подтвердите владение доменом
Это один из ответственных моментов в режиме ручной регистрации.
Обратите внимание: нас просят создать ответ на запрос, который возвращает Content-Type text/plain.
Такой ответ не пройдёт и подтверждение выдаст ошибку:
Нужно, чтобы было так:
Если у вас сервер на Windows (с поддержкой Razor Views, аналогично и с MVC), то самый простой способ создания правильного ответа:
а) создать папку .well-known и в ней папку acme-challenge
б) поместить туда файл [запрос].cshtml
в) в содержание этого файла добавить:
@{Response.ContentType = "text/plain";Response.Charset = "";}здесь проверочный код
7. После успешной проверки, будут созданы следующие сертификаты в папке /etc/letsencrypt/live/[имя домена]:
privkey.pem — приватный ключ для сертификата
Используется Apache для SSLCertificateKeyFile и nginx для ssl_certificate_key.
cert.pem (сертификат сервера)
Используется Apache для SSLCertificateFile.
chain.pem (сертификат цепочки)
Он же используется Apache для SSLCertificateChainFile.
fullchain.pem (соединение chain.pem и cert.pem)
Он же используется nginx для ssl_certificate.
7. Теперь пришло время сконвертировать его в родной для Windows .pfx формат.
Перейдите в папку /etc/letsencrypt/live/[имя домена] (откройте терминал в режиме администратора с помощью команды su):
cd /etc/letsencrypt/live/[имя домена]
Запустите OpenSSL с помощью команды:
openssl
и начните конвертацию с помощью команды:
pkcs12 -inkey privkey.pem -in fullchain.pem -export -out mydomain.pfx
Вас попросят ввести пароль и подтвердить его.
8. Мы получили сертификат mydomain.pfx, который теперь можем использовать в Windows-окружении.
Важно знать, что сертификаты Let's Encrypt валидны 90 дней. Рекомендуется обновлять их каждые 60 дней. На электронную почту, которую вы указали для генерации, будут приходить уведомления об истечении сертификата.
Буду рад услышать ваши замечания или пожелания к статье.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (43)
Yahweh
06.11.2015 15:50+1Сертификат можно получить только на www.example.com/example.com или на other.example.com тоже можно?
MalcolmReynolds
06.11.2015 15:58+1Тут есть немного информации, но пока в бете выдали на домен с www и без www (хотя мы запрашивали только на один без www).
Anisotropic
06.11.2015 15:57+190 дней это ограничение для беты, или запустится сервис с таким же ограничением?
MalcolmReynolds
06.11.2015 16:02+2Вот тут написали, что на запуске будет тоже 90 дней. Они считают, что администраторы за год могут забыть про сертификат, а настроив автоматизацию один раз можно избавиться от многих проблем.
blind_oracle
06.11.2015 16:36+190 дней — не интересно.
WoSign мне выдал на три года без всяких проблем.
А использовать какую-то приблуду на сервере, которая работает под рутом и будет периодически лазить за сертификатом, лазить в конфиг моего веб-сервера для настройки веб-сайта для подтверждения валидности, а затем для подмены сертификата…
Зачем мне это всё? Зачем так сложно?farcaller
06.11.2015 16:40+1Ну, объективно говоря, приблуда на сервере на должна работать от рута, и не должна менять конфиг сервера каждый раз. А смысл как раз в том чтобы настроить раз и забыть.
blind_oracle
06.11.2015 16:50-3Лично мне проще раз в три года сходить за сертификатом по напоминалке в календаре, чем такое городить.
Затем уже этот сертификат каким-нибудь Ansible/Puppet/etc раскидать куда надо.
А их клиент (ACME) мне напомнил какой-то продукт для админов локалхоста, которое всё делает за тебя.
Поэтому, хоть инвайт на бету и прислали, пользоваться им пока нормальный срок действия сертификатов не введут не собираюсь пока…farcaller
06.11.2015 16:53-2Мне кажется что LE вообще строго говоря и предназначен для админов локалхоста.
У меня на проде два nginx, и LE'шная схема получения сертификатов действительно несколько попаболь. Пишу вот обвязку на го для мониторинга и самостоятельного перевыпуска, попробую пару доменов все же перенести на LE.blind_oracle
06.11.2015 20:11Ну, могли бы и для админов просто добавить какой-нибудь более удобный способ выпустить себе сертификаты. Надеюсь, в будущем это будет доступно.
wrewolf
06.11.2015 16:51+1ну менять конфиг сервера не обязательно как раз, достаточно обновить файлы сертификатов, а это реализуемо от не привелигированного юзера
ivlis
06.11.2015 22:52У меня вебсервер в докер-контейнере с read-only файловой системой. Так что придётся и контейнер пересобрать и перезапустить его.
ValdikSS
06.11.2015 18:39Вы используете DNSSEC? Как миритесь с еженедельными переподписями зон?
blind_oracle
06.11.2015 20:09Пользую. Я генерирую ключи (KSK/ZSK) на каждую зону один раз, дальше за меня всё делает BIND автоматом.
iaf
06.11.2015 22:40+190 — это сейчас, пока бета, потом они планировали увеличить.
Вот у меня, например, wosign через полгода после выдачи один сертификат без объяснения причин отозвал, и поддержка ничего вразумительного не смогла сказать. Благо сертификат был прибит DANE и DNSSEC и использовался исключительно для внутренних нужд, посему отзыв не был дизастером, но все равно было неприятно.
Что касается приблуды, есть вот такая вещь: github.com/diafygi/letsencrypt-nosudo. Разумеется, не все нужен весь тот воз функционала (и гуев), что есть в официальном клиенте, так что в ближайшее время появятся варианты на любой вкус, API то открыты.
Pulse
09.11.2015 12:40Но есть проблема — сертификаты от Wosign 1 января 2017 SHA-1 станут красными. :(
blind_oracle
09.11.2015 12:48У меня вся цепочка (кроме корня, который StartCom, но это и не важно) — SHA256, так что никаких проблем.
Pulse
09.11.2015 13:15А что к корневому это не относится?
blind_oracle
09.11.2015 13:22+1Не относится:
SHA-1-based signatures for trusted root certificates are not a problem because TLS clients trust them by their identity, rather than by the signature of their hash.
googleonlinesecurity.blogspot.ca/2014/09/gradually-sunsetting-sha-1.html
pred8or
06.11.2015 16:56+4Я бы добавил, что в автоматическом режиме ещё генерируется конфиг для веб-сервера, практически готовый к активации.
После настройки https очевидным было протестировать при помощи Qualys SSL Server Test. Результат меня удивил. A без каких-либо дополнительных телодвижений.landy
06.11.2015 17:41+1И A+ тоже, но с небольшим телодвижением :)
для апача например в виртуальные хосты добавить:
<IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" </IfModule>
ну и включить модуль headers.stychos
06.11.2015 20:35Я так делал для сертификатов от StartSSL, потом пожалел — даже после того как убрал, сервер продолжает перекидывать клиента на https, независимо от поддомена. А сертификат-то не вилдкардовый.
Devil_Chrono
06.11.2015 20:54А что мешает убрать «includeSubDomains;»?
stychos
06.11.2015 21:01Уже давно всё убрал, у меня оказался малость не тот случай, когда надо бегать за красивыми А+ циферками, при ограниченном сертификате.
Devil_Chrono
06.11.2015 21:33Я имею ввиду, что изначально не нужно было ставить «includeSubDomains;», а теперь, если проблема только на вашем браузере, то можно почистить настройки HSTS.
И можно подробнее про ограниченный сертификат?stychos
06.11.2015 21:37Проблема, к сожалению, не только у меня. Про ограничения я имел в виду, что он только на domain.tld. и www.domain.tld. — когда мне понадобилось сделать static.domain.tld., я столкнулся с таким вот конфузом, при этом многие клиенты уже хотят по таким вот настройкам «для А+» =) Ну это, безусловно, мой косяк. За ссылку большое спасибо!
Gendalph
08.11.2015 01:54max-age=0 -> редирект куда и как надо -> отдача правильного HSTS (если всё еще на SSL)
Lockal
07.11.2015 13:23А кто-нибудь может подсказать, где IP-адреса регистрирующих машин «will be publicly logged»? Зачем это вообще и что делать пользователям CloudFlare?
istui
07.11.2015 14:23+1Для cloudflare можете все равно поставить сертификат, для защиты трафика между вашим сервером и origin pull-сервером (Full SSL — Strict)
Кроме того, cloudflare обслуживает только определенные порты, если ваш сервер нуждается в защите других портов — вам все равно пригодится LE.Lockal
09.11.2015 00:33Это понятно. Я про то, что для машин за CloudFlare не допускается утечка IP-адреса. По этому скриншоту из статьи можно предположить, что где-то в интернете в открытом доступе есть пары IP-domain, некоторые из которых раскрывают реальные IP-адреса машин за экранами.
istui
12.11.2015 11:38Насколько я понял, записывается IP машины, с которой был запрошен сертификат.
Берете любой VPS на пару дней на тест и выходите в этот момент в сеть через него.
la0
07.11.2015 13:24+37. Скопируйте их на Windows-машину.
8. Теперь пришло время сконвертировать их в родной .pfx формат.
Для этого установим OpenSSL, распакуем его, добавим в эту же папку наши ключи и запустим от имени администратора:
Я бы поменял пункты местами и конвертил бы линуксовым OpenSSL(команды идентичны)MalcolmReynolds
07.11.2015 14:58Спасибо! Действительно, лишний шаг с установкой openssl в Windows. Обновил инструкцию.
Evengard
Блин, я даже не знал что они запустили бету, а где зарегистрироваться?
MalcolmReynolds
Здесь
Evengard
Спасибо!