Heroku + Cloudflare полностью бесплатный SSL

Попытка получить совершенно бесплатный SSL на Heroku с помощью Cloudflares - новый бесплатный универсальный SSL

Прочитайте эту статью: http://mikecoutermarsh.com/adding-ssl-to-heroku-with-cloudflare/

Который, кажется, предполагает, что это возможно теперь, когда Cloudflare предлагает SSL бесплатно.

Шаги, которые я предпринял:

  • Настройте мой DNS с Cloudflare (бесплатный аккаунт)
  • Переадресация моего домена в мой 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/ не работают. Значок вкладки браузера просто продолжает вращаться и никогда не разрешается. Любые идеи о том, как заставить это работать? Это вообще возможно?

*ОБНОВИТЬ

Это выглядит так, как будто это действительно возможно. Из поддержки CloudFlare:

Привет, Билл,

По сути, если "источник" поддерживает соединение SSL, вы можете использовать Full SSL с CloudFlare.

Саймон

CloudFlare выпустил этот пост сегодня: https://blog.cloudflare.com/universal-ssl-be-just-a-bit-more-patient/

Мой сайт начал разрешать, но получил сообщение "Ваше соединение не является частным", как в части "Ошибки, которые вы можете видеть" в сообщении блога. Кроме того, в моих настройках CloudFlare есть предупреждение о выдаче SSL, так что я думаю, что после его выдачи это может сработать. Я буду держать вас в курсе.

4 ответа

Решение

Это работает точно так, как я его настроил. Проблема заключалась в том, что CloudFlare потребовалось несколько дней, чтобы выпустить свой безлимитный SSL. Как только в ваших настройках CloudFlare SSL появится надпись "SSL act ive", он будет работать.

Есть загвоздка: она небезопасна между Heroku и Cloudflare.

  • Он может работать с "Flexible SSL" - незашифрованным HTTP между Heroku и CF. Мы этого не хотим.
  • Он также работает с "Full SSL" - HTTPS между Heroku и CF, но без проверки сертификата CF. Heroku представляет *.herokuapp.com Cert, CF счастлив. К сожалению, посредник между Heroku и CF может представить самоподписанный snakeoil.co.mordor сертификат CF будет одинаково счастлив (и пользователь не может сказать, они видят только сертификат CF)! Это задокументировано в разделе Full SSL в блоге CloudFlare. Представляем строгий SSL.
  • Но "Полный SSL (строгий)" НЕ работает, потому что CF ожидает, что Heroku представит yourdomain.com Сертифицируйте, и выдает страницу ошибки:-(
    [Конечно, вы можете сами получить такой сертификат и заплатить 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 не позволяет этого, это было бы технически выполнимо.

Чтобы заставить работать домен apex, вам, вероятно, потребуется использовать провайдера DNS, который поддерживает записи ALIAS, Cloudflare также выполняет DNS и , вероятно, будет работать. Другие провайдеры перечислены здесь: https://devcenter.heroku.com/articles/custom-domains

Чтобы это сработало, вам нужно создать правило страницы на 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 и назвать его на heroku.

Другие вопросы по тегам