Heroku + Cloudflare полностью бесплатный SSL
Попытка получить полностью бесплатный SSL на Heroku с использованием бесплатного Универсального SSL Cloudflares
Прочтите эту статью:
http://mikecoutermarsh.com/adding-ssl-to-heroku-with-cloudflare/
Что, по-видимому, позволяет предположить, что Cloudflare предлагает SSL бесплатно.
Сделанные мной шаги:
- Настройка моего DNS с помощью Cloudflare (бесплатная учетная запись)
- Переадресовал мой домен на my herokuapp (CNAME example-app.com → example-app.herokuapp.com)
- Установите для параметра Cloudflare SSL значение "Полный SSL"
- Добавил мой домен в приложение heroku
-
Принудительное https с этим явным промежуточным программным обеспечением:
app.use(function(req, res, next) {
if (req.headers['x-forwarded-proto'] != 'https') {
res.redirect('https://' + req.headers.host + req.path);
}
else {
return next();
}
});
Домен heroku http://example-app.herokuapp.com работает правильно и перенаправляется на https://example-app.herokuapp.com, зеленый замок и все.
Оба http://example-app.com и https://example-app.com не работают. Значок вкладки браузера просто продолжает вращаться и никогда не разрешается. Любые идеи о том, как это сделать? Возможно ли это?
* UPDATE
Это похоже на то, что это действительно возможно. Поддержка CloudFlare:
Привет, Билл,
В принципе, если "origin" поддерживает SSL-соединение, вы можете использовать Full SSL с CloudFlare.
Саймон
CloudFlare опубликовала это сообщение в блоге сегодня:
https://blog.cloudflare.com/universal-ssl-be-just-a-bit-more-patient/
Мой сайт начал разрешать, но сообщение "Ваше соединение не является частным", как в разделе "Ошибки, которые вы можете увидеть" в блоге. Также в моих настройках CloudFlare появляется предупреждение "SSL-выдача", поэтому я представляю, как только он будет выпущен, это может просто работать. Я буду держать вас в курсе.
Ответы
Ответ 1
Это работает точно так же, как я его настраивал. Проблема заключалась в том, что CloudFlare потребовалось пару дней для выпуска Unlimited SSL. После того, как он скажет "SSL active" в соответствии с вашими настройками SSL CloudFlare, он будет работать.
Ответ 2
Существует улов: он небезопасен между Heroku и Cloudflare.
- Он может работать с "Гибким SSL" - незашифрованным HTTP между Heroku и CF. Мы этого не хотим.
- Он также работает с "Full SSL" - HTTPS между Heroku и CF, но без CF, подтверждающего сертификат. Heroku представляет сертификат
*.herokuapp.com
, CF счастлив. К сожалению, человек в середине между Heroku и CF может представить самозаверяющий сертификат snakeoil.co.mordor
, что CF будет одинаково счастлив (и пользователь не может сказать, что они видят только CF cert)! Он задокументирован в разделе полного SSL-сообщения в блоге CloudFlare Представляем строгий протокол SSL.
- Но "Полный SSL (строгий)" НЕ работает, потому что CF ожидает, что Heroku представит
yourdomain.com
cert и даст страницу с ошибкой:-(
[Конечно, вы можете получить такой сертификат и заплатить Heroku за его подачу в CF, но это вернется на круги своя... Вы получаете преимущества CDN, но это не "полностью бесплатный SSL на Heroku".] Эта ситуация обсуждается в статье CloudFlare Настроить CloudFlare и Heroku по HTTPS.
Итак, эта настройка с полным SSL приемлема? Можно утверждать, что связи между CF и Heroku, вероятно, "лежат на позвоночнике над облаками" и относительно трудно контролировать активного атакующего, поэтому сообщение явно безопаснее, чем вообще TLS. НО он не является сквозным, и вы предоставляете пользователю ложное чувство безопасности, обычно связанное с HTTPS и значком зеленого замка, а некоторые говорят, что хуже, чем раньше нет TLS вообще...
[См. Мнения https://news.ycombinator.com/item?id=8382335]
По состоянию на февраль 2015 года я не видел опции в CF для настройки режима Full Strict, чтобы ожидать получения сертификата в другом домене. Я понятия не имею, почему CF этого не допускает, это было бы технически выполнимым.
Ответ 3
Чтобы получить домен apex для работы, вам, вероятно, потребуется использовать DNS-провайдер, который поддерживает записи ALIAS, Cloudflare также выполняет DNS и скорее всего, будет работать, Больше поставщиков, перечисленных здесь: https://devcenter.heroku.com/articles/custom-domains#root-domain
Ответ 4
Чтобы это сработало, вам нужно создать правило страницы на Cloudflare для своего домена. Моя выглядит примерно так:
URL Pattern: my-domain.co/*
Forwarding to: https://www.my-domain.co/$1
Оттуда вы можете использовать CNAME на www, чтобы указать на my-domain.herokuapp.com.
Cloudflare (и большинство других DNS-провайдеров) не позволяет записи CNAME для корневого домена. Только для субдоменов. www является субдоменом, поэтому вы можете заставить весь трафик использовать www и cname для heroku.