Как стать автором
Обновить

Комментарии 11

эм… я или туплю от того что с VPS работал… на которых как бэ можно нормально автоматизировать бесплатное получение сертов от летсэнкрипта… или…
Не поняла вопрос.
Товарищ хотел до вас донести, что переезд к какому-либо хостеру, который обещает бесплатный сертификат — нынче далеко не преимущество. Уже достаточно давно отлажен процесс получения «вечных» и бесплатных сертификатов для любого сервера от Let'sEncrypt.
Мы и не переезжали) У нас изначально был хостинг на Amazon S3. И цель статьи была не столько рассказать о бесплатном сертификате, сколько вообще о переезде. К тому же в Amazon можно загрузить сертификат, полученный в любом другом месте, процедура будет почти та же самая.
Да я уже понял, что это чистейшей воды реклама амазона. Просто ваш заголовок на 50% состоит из того, что основное преимущество этого сервиса — бесплатный сертификат. Хотя, по сути, ничего необычного в этом нет, и бесплатные сертификаты уже давно доступны всем желающим.
Тогда попросите Amazon перечислить мне деньги за рекламу) Они ни про нас, ни про Хабр наверное и не слышали)

Про бесплатный сертификат от Amazon мы, например, не знали, и сначала купили сертификат от Comodo. Потом когда стали разбираться, как его установить, узнали, что оказывается можно получить сертификат бесплатно, поэтому я написала об этом в заголовке.
Справедливости ради стоит заметить, что в статье упоминается wildcard сертификат(если верить скриншоту), а Let'sEncrypt wildcard ещё только анонсировал на январь 2018-го. Так что кому-то может и пригодится информация из статьи.
Большое спасибо за дополнение!
Недавно занимался примерно тем же самым, только сайт не статический, поэтому не на S3, а на EC2 (на виртуалке с nginx + php).
Решил всё сделать через Amazon и вот пара подводных камней, о которых хочу рассказать:

1) Зарегистрировал новый домен с помощью сервиса Route 53, заплатил 11$ — пока всё ок

2) Иду регистрировать бесплатный сертификат с помощь ACM, указал домен, далее нужно подтвердить своё право владения, перейдя по ссылке, которая отправлена на admin@domain.com, webmaster@domain.ru и т.п. Но постойте, у меня нет этих почтовых ящиков, я только лишь зарегистрировал домен в Route 53! По наивности думал, если купить домен в Amazon, то он сообразит, что у меня есть права на этот домен и сертификат выпишут в один клик. Оказалось, что не выпишут. Как завести почту? Пошел быстренько подключил яндекс.почту для домена, потом в Амазоне нажал кнопку «отправить письмо повторно», получил письмо, перешел по ссылке, сертификат выписан.

3) Я заказал сертификат на *.domain.com чтобы покрыть всё сразу. Но оказалось *.domain.com покрывает только поддомены, но не сам domain.com — вещь достаточно известная для тех кто сталкивался, но для новичка будет не очевидно. Чтобы действительно покрыть всё, нужно выписывать сертификат сразу на две позиции: domain.com и *.domain.com с помощью кнопки «Add another name to this certificate». Кстати, скриншот в этой статье показан не удачный, там видно что добавлена всего одна позиция "*.domain.com", не забудьте добавить вторую позицию «domain.com»!
(хотя по описанию из статьи автор на самом деле выписывал сертификат как надо на две позиции)
image

4) В Amazon можно получить бесплатный сертификат, но его не получится установить на nginx на своей EC2 виртуалке, они просто не отдают приватные ключи. Чтобы воспользоваться этим бесплатным сертификатом придётся купить сервис балансировщика ELB к которому можно привязать только что выписанный сертификат, и который будет терминировать HTTPS трафик, а к нашей конечной EC2 виртуалке с nginx будет приходить обычный HTTP запрос. Получается сэкономили на сертификате, но заплатили за ELB. В сколько именно мне обойдётся этот ELB я пока не разобрался.

5) Сделать перенаправление http -> https средствами Route 53 или ELB не удастся, эту задачу придётся самому прописывать в конфиге nginx на EC2 (напомню, по условиям данной задачи мы говорим не про статический сайт на S3, а про сайт на виртуалке EC2). Фокус в том, что nginx на нашей виртуалке стоит за балансировщиком ELB и он теперь всегда получает голый http. Как в этом случает понять, по какому протоколу пришел реальный пользователь, http или https? Погуглив, обнаружил что этим вопросом задаются многие. Если трафик пришел через ELB, то мы можем проверить оригинальный протокол по специальному заголовку x-forwarded-proto:
server {
    listen 80;
    listen [::]:80 ipv6only=on;

    if ($http_x_forwarded_proto = "http") {
       rewrite ^(.*)$ https://$http_host$1;
    }

   #...
}


6) Наконец, на бэкенде за nginx у вас работает какое-то приложение (PHP/Ruby/Python/Node/...), в коде которого может быть дополнительная логика проверяющая протокол http/https. Поместив приложение за ELB с терминацией https, мы создали видимость, что у нас все запросы приходят чисто по http. Не забудьте проверить, помешает ли это вашему конкретному приложению и умеет ли оно читать x-forwarded-proto?
Большое вам спасибо за комментарий! Действительно, сертификат выпускали на два домена, а скриншоты я делала уже потом и пропустила это. Скриншот в статье обновила, текст тоже.
Полезная статья, спасибо!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий