Обходной путь для Heroku больше не поддерживает SSL за Cloudflare («Строгий TLS в CDN не поддерживается»)? - PullRequest
9 голосов
/ 03 мая 2019

Несколько дней назад мы получили сообщение об ошибке «Строгий TLS в CDN не поддерживается» в 1 приложении Heroku, которое находится за прокси-сервером Cloudflare (оранжевое облако, если вы знаете Cloudflare).

Обычно клиент запрашивает https://foo.example.com передаются через Cloudflare, который затем делает запросы к https://foo.herokuapp.com,, кэширует ответ и передает результат обратно клиенту.Обратите внимание, что вся цепочка по HTTPS.Мы настроили Clouflare на только связь с конечным сервером по протоколу HTTPS, и мы не хотим, чтобы конечный сервер отправлял ответы по HTTP.

Похоже, что политика Heroku отсутствуетбольше позволяет работать через SSL, когда они обнаруживают, что вы находитесь за прокси-сервером, который уже обрабатывает SSL.За последнюю неделю все больше приложений начали показывать эту ошибку, и нам пришлось отключить прокси Cloudflare. Вот их документация по этому вопросу, и указана причина «потому что Cloudflare предоставляет SSL-сертификаты».

Кто-нибудь еще сталкивался с этим и нашел обходной путь?Хотя Cloudflare по-прежнему предотвращает определенные уязвимости от клиента до Cloudflare, это оставляет другие уязвимости открытыми от Cloudflare до конечного сервера.

Обновление: Я получил ответ от Heroku об этом:

ACM может использоваться с Full или Flexible, а также может работать с «Full (Strict)», но это не рекомендуется.Режим «Полный (Строгий)» ... может использоваться после завершения ACM.Если необходимо «Полное (строгое)», мы рекомендуем использовать более длительный сертификат, выданный ЦС, с процессом подписания CSR.

Однако я не нашел вышеизложенного верным.При любой настройке (Полная или Строгая) Heroku всегда сообщает об указанной выше ошибке.Я установил сертификаты происхождения от Cloudflare, чтобы решить эту проблему.

1 Ответ

5 голосов
/ 04 мая 2019

Похоже, что Heroku специально не хочет, чтобы вы использовали ACM (автоматическое управление сертификатами), в котором они используют Let's Encrypt для автоматической выдачи сертификатов для вас.Это не нужно, если ваши сертификаты не ориентированы на клиента.

Если Cloudflare всегда говорит с вашим приложением Heroku, я предлагаю вместо этого использовать «сертификаты происхождения».Cloudflare может сгенерировать сертификат и закрытый ключ специально для вас, чтобы установить на исходный сервер с целью аутентификации его в Cloudflare.Этот сертификат подписан частным центром сертификации Cloudflare, который не распознается браузерами, а только самим Cloudflare.Это означает, что вам не нужно перепрыгивать через столько обручей, чтобы подтвердить свой домен и обновить сертификаты, как если бы вы делали это с обычными сертификатами CA.

Вы можете указать Cloudflare создать сертификат происхождения на панели мониторинга Cloudflare.Вы можете установить свой сертификат в Heroku в соответствии с этой документацией:

https://devcenter.heroku.com/articles/ssl#manually-uploading-certificates-and-intermediaries

Обратите внимание, что для этого не требуется «ACM» на стороне Heroku, потому что вы приносите свой собственный сертификат,Я ожидал бы, что Heroku хорошо работает с этим режимом, находясь за Cloudflare (если нет ... это будет довольно серьезный недостаток в Heroku).

Вот общие документы Cloudflare по сертификатам происхождения:

https://support.cloudflare.com/hc/en-us/articles/115000479507-Managing-Cloudflare-Origin-CA-certificates

(Отказ от ответственности: я на самом деле не пробовал это с Heroku, но в прошлом я успешно использовал сертификаты происхождения с другими хостами.)

...