Раздаем CloudFront по CNAME через собственный SSL сертификат

На случай, если вы таки добавили поддержку SSL на свой сайт, но столкнулись с проблемой раздачи картинок с имеющегося CDN в виде NET::ERR_CERT_COMMON_NAME_INVALID или даже net::ERR_INSECURE_RESPONSE, у меня для вас внезапно есть небольшое, но весьма элегантное решение. Под CDN я конечно же имею в виду CloudFront от AWS с использованием своего собственного CNAME, например cdn.yourdomain.com. В следующем выпуске расскажу, как собственно прикрутить этот самый SSL. Как обычно, бесплатно и без смс.


Насколько мне известно, HTTPS работает вместе с именем дистрибуции, однако HTTPS невозможно использовать вместе с CNAME при условии, что вы не будете игнорировать несовпадения сертификатов на стороне клиента. По-крайней мере, любой уважающий себя браузер точно не будет. Соответственно у вас два варианта: либо переключиться на использование имени дистрибуции (e.g. xuem0e.cloudfront.net), либо использовать поддомен Cloudfront c небольшим твиком.

Простота метода заключается в том, что вам больше не придется использовать AWS CLI, поскольку Amazon с недавних пор разрешает использование пользовательских сертификатов. Более того, разрешает абсолютно БЕСПЛАТНО. Поэтому, если вы собираетесь использовать ваш CloudFront поддомен через безопасное соединение, вам нужно выполнить несколько простых шагов.

Шаг первый. Запрашиваем сертификат от AWS

❗ ВАЖНО: для того, чтобы использовать ваш сертификат с CloudFront, вы должны запросить его в регионе US East (N. Virginia)
Как вариант, вместо запрашивания нового сертификата от AWS вы можете загрузить свой, имеющийся, однако, в таком случае вам придется перезагружать свой сертификат каждый раз по истечению его срока годности.
Заходим в AWS Console, затем — в Services, выбираем Sertificate Manager:

Далее кликаем по кнопке Request a certificate, в появившемся окне Request a certificate прописываем ваш поддомен и переходим к следующему шагу:

На котором указываем Email как способ проверки и жмем кнопку Review:

Открываем письмо, отправленное на адрес, связанный с вашим AWS аккаунтом, переходим по ссылке и подтверждаем запрос на выпуск SSL сертификата:

Шаг второй. Настраиваем CloudFront на использование вашего сертификата

В консоли AWS идем в панель управления CloudFront, выбираем ваш distribution и кликаем по кнопке Edit на вкладке General. В настройке SSL Certificate кликаем по Custom SSL Certificate и выбираем сертификат, который вы запросили ранее:

Далее, для настройки Custom SSL Client Support выбираем Only Clients that Support Server Name Indication (SNI). В противном случае, если выбрать All Clients, AWS будет списывать с вашего аккаунта 600 долларов в месяц, атата!

Сохраняем, и ждем, пока изменения вступят в силу, т.е как только Status вашего distribution изменится с In Progress на Enabled (у меня заняло около часа).

Шаг третий. Конфигурируем CNAME для поддомена

Проверяем, что CNAME-запись для вашего поддомена CloudFront cdn.yourdomain.com добавлена и ссылается на использование CloudFront дистрибуции. Приложил скриншот Route 53 в консоли AWS для моего случая:

Проверяем, что картинки и прочие ресурсы отдаются по https без ошибок безопасности. Идем пить винишко.
P.S На самом деле автор пил винишко все это время, пока конфигрурировал сервер и поэтому пойдет за добавкой. Вопросы?

Удобный способ не пропустить новое в блоге. Раз в месяц пишу обстоятельное письмо всем читателям: анонсы постов, новости нашей деревни и прочие ништяки, которые не ушли в RSS, Feedly или куда-там еще.

На ежемесячную email рассылку подписаны 258 человек

Мотофотопрограммист
Живу в Новой Зеландии. Рассказываю о стране и красивых местах, пишу про бытовые вещи.
Прыгнуть с парашютом - осуществил на 50%; приобрести 1400 - работаю над этим; осилить 300км/ч - осилил на 96.6%