【发布时间】:2018-10-09 12:46:22
【问题描述】:
我正在尝试在部署到 GAE flex 环境的 Go 应用上启用 HTTPS。我的自定义域已成功映射,并且正在使用 Google 管理的 SSL 证书。我已将 app.yaml 配置为将 HTTP 重定向到 HTTPS,如下所示:
handlers:
- url: /.*
script: _go_app
secure: always
现在有两个问题我至今没能解决。
首先,上面的配置应该是把HTTP流量重定向到HTTPS,但显然没有发生。
第二,当我在 url 框中添加 https:// 时,我在 Firefox、Chrome 和 Edge 上看到了三种不同的行为。 Edge 将该网站标识为安全,Firefox 将该网站标记为安全连接,但表示它“已阻止此页面的不安全部分”,令人惊讶的是,Chrome 将该网站标记为不安全(尽管它说证书有效!) .
有了这些症状,我想知道是否应该采取额外的步骤来使重定向和 SSL 对我的网站起作用?具体来说,我想知道 App Engine 和托管 SSL 是否启用:
我应该继续使用
http.ListenAndServe(..)在HTTP 上提供页面,还是需要切换到http.ListenAndServeTLS(..)?在我的 Go 应用程序中,我应该将 HTTP 重定向到 HTTPS 吗?或者上述设置应该可以正常工作?
提前感谢您的帮助和建议。
PS:
尝试不同的建议后,我在处理程序的响应中添加了Strict-Transport-Security: max-age=31536000; includeSubDomains。似乎这也有助于重定向。
编辑/部分答案:
根据此documentation,在身份验证更改下,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)
}
我想知道我是否在正确的地方使用了这个标题?
【问题讨论】:
标签: google-app-engine go https