Как правильно включить HTTPS в гибкой среде App Engine и Go? - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь включить HTTPS в своем приложении Go, развернутом в среде GAE flex. Мой пользовательский домен успешно сопоставлен, и я использую управляемые Google SSL-сертификаты. Я настроил app.yaml для перенаправления HTTP на HTTPS следующим образом:

handlers:
- url: /.*
  script: _go_app
  secure: always

Теперь есть две проблемы, которые мне пока не удалось решить.

Сначала , указанная выше конфигурация должна перенаправлять HTTP-трафик на HTTPS, но, видимо, этого не происходит.

Секунда , когда я добавляю https:// в поле URL-адреса, я вижу три различных поведения в Firefox, Chrome и Edge. Edge идентифицирует сайт как безопасный, Firefox помечает сайт как безопасное соединение, но говорит, что он «заблокировал части этой страницы, которые не являются безопасными», и удивительно, что Chrome помечает сайт как небезопасный (хотя он говорит, что сертификат действителен!) .

С этими симптомами мне стало интересно, стоит ли мне предпринимать дополнительные шаги, чтобы перенаправление и SSL работали на моем сайте? В частности, я хотел бы знать, с App Engine, и управляемый SSL включен:

  1. Должен ли я продолжать обслуживать страницы по HTTP, используя http.ListenAndServe(..), или нужно переключиться на http.ListenAndServeTLS(..)?

  2. В моем приложении Go я должен перенаправить HTTP на HTTPS? или вышеупомянутая настройка, как ожидается, будет работать нормально?

Заранее спасибо за помощь и советы.

PS: Пробуя разные предложения, я добавил Strict-Transport-Security: max-age=31536000; includeSubDomains в ответ обработчиков. Не похоже, помогло ли это и с перенаправлением.

РЕДАКТИРОВАТЬ / ЧАСТИЧНЫЙ ОТВЕТ:

Согласно этой документации , при Изменения аутентификации , обработчики secure и login устарели. Документация предлагает использовать Strict-Transport-Security или X-Forwarded-Proto вместо.

Я использую Strict-Transport-Security на стороне сервера для обогащения моего заголовка ответа:

func (h *STLHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
    w.Header().Add("Strict-Transport-Security", "max-age=63072000; includeSubDomains")
    h.nextHandler.ServeHTTP(w, req)
}

Мне было интересно, использую ли я этот заголовок в нужном месте?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

По второму набору своих проблем я понял, что на моей странице смешанный контент. Мое смешанное содержимое было http-ссылкой на набор шрифтов. Когда я исправил смешанный контент, то есть изменил http на https, предупреждения безопасности Chrome и Firefox исчезли. Вы также можете найти эту страницу полезной по этому вопросу Как избежать предупреждения о небезопасности в Chrome .

0 голосов
/ 29 апреля 2018

Вы должны проверить свое приложение, используя:

http://[YOUR_PROJECT_ID].appspot.com

Или, если вы недет HTTPS:

https://[YOUR_PROJECT_ID].appspot.com

Если вам нужен собственный сертификат, вам нужно загрузить его и затем использовать: https://your -domain.tld

Из документов :

  • Для API, которые будут размещаться в гибкой среде App Engine, необходимо использовать домен appspot.com, а имя службы должно иметь следующий формат: YOUR_PROJECT_ID.appspot.com

    При развертывании API в App Engine автоматически создается запись DNS с именем в формате YOUR_PROJECT_ID.appspot.com.

  • Для API, которые будут размещаться в Compute Engine, Kubernetes Engine или Kubernetes, необходимо использовать домен cloud.goog, а имя службы должно иметь следующий формат: YOUR_API_NAME.endpoints.YOUR_PROJECT_ID.cloud.goog

Или вы можете просто поставить CDN впереди, как Cloudflare, который будет выполнять за вас все SSL-терминации и, если потребуется, перенаправить весь HTTP на HTTPS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...