Подтвердить что ты не робот

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-выдача", поэтому я представляю, как только он будет выпущен, это может просто работать. Я буду держать вас в курсе.

4b9b3361

Ответ 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 этого не допускает, это было бы технически выполнимым.

Ответ 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.