Я пытаюсь включить 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 включен:
Должен ли я продолжать обслуживать страницы по HTTP, используя http.ListenAndServe(..)
, или нужно переключиться на http.ListenAndServeTLS(..)
?
В моем приложении 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)
}
Мне было интересно, использую ли я этот заголовок в нужном месте?