如何在App Engine灵活环境和Go上正确启用HTTPS?

时间:2018-04-29 04:07:49

标签: google-app-engine go https

我正在尝试在部署到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管理:

  1. 我应该继续使用http.ListenAndServe(..)在HTTP上提供网页,还是需要切换到http.ListenAndServeTLS(..)

  2. 在我的Go应用中,我应该将HTTP重定向到HTTPS吗?或者上述设置可以正常工作吗?

  3. 提前感谢您的帮助和建议。

    PS: 尝试使用不同的建议,我将Strict-Transport-Security: max-age=31536000; includeSubDomains添加到处理程序'响应。似乎这对重定向没有帮助。

    编辑/部分答案:

    根据此documentation,在身份验证更改下,不推荐使用securelogin处理程序。该文档建议使用Strict-Transport-SecurityX-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 :(得分: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