我正在尝试在部署到GAE flex环境的Go App上启用HTTPS。我已成功映射自定义域,并使用Google管理的SSL证书。我将app.yaml配置为将HTTP重定向到HTTPS,如下所示:
handlers:
- url: /.*
script: _go_app
secure: always
现在有两个问题我到目前为止无法解决。
首先,上述配置应该将HTTP流量重定向到HTTPS,但显然没有发生。
第二次,当我在网址框中添加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)
}
我想知道我是否在正确的位置使用此标题?
答案 0 :(得分:1)
对于我的第二组问题,我意识到我的页面上有混合内容。我的混合内容是指向一组字体的http链接。当我修复混合内容,即将http更改为https时,Chrome和Firefox安全警告都消失了。您也可以在此问题上找到此页面Avoiding the Not Secure Warning in Chrome。
答案 1 :(得分:0)
您需要使用以下方式检查您的应用:
http://[YOUR_PROJECT_ID].appspot.com
或者如果您使用HTTPS:
https://[YOUR_PROJECT_ID].appspot.com
如果您需要自己的证书,则需要上传该证书,然后才能使用:https://your-domain.tld
来自docs:
对于将托管在App Engine灵活环境中的API,您必须使用appspot.com域,并且服务名称必须采用以下格式:
YOUR_PROJECT_ID.appspot.com
将API部署到App Engine时,会自动创建名称格式为YOUR_PROJECT_ID.appspot.com
的DNS条目。
对于将在Compute Engine,Kubernetes Engine或Kubernetes上托管的API,您必须使用cloud.goog域,并且服务名称必须采用以下格式:
YOUR_API_NAME.endpoints.YOUR_PROJECT_ID.cloud.goog
或者您可以像在Cloudflare中一样放置CDN,它会为您完成所有SSL终止,如果需要redirect all HTTP to HTTPS