【问题标题】:How to properly enable HTTPS on App Engine flex environment and Go?如何在 App Engine flex 环境和 Go 上正确启用 HTTPS?
【发布时间】: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 是否启用:

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

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

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

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)
}

我想知道我是否在正确的地方使用了这个标题?

【问题讨论】:

    标签: google-app-engine go https


    【解决方案1】:

    对于我的第二组问题,我意识到我的页面上有混合内容。我的混合内容是一组字体的 http 链接。当我修复混合内容时,即将 http 更改为 https,Chrome 和 Firefox 的安全警告都消失了。您也可能会发现此页面 Avoiding the Not Secure Warning in Chrome 在此问题上很有用。

    【讨论】:

      【解决方案2】:

      您需要使用以下方式检查您的应用:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-16
        • 1970-01-01
        • 2021-01-29
        • 2019-04-24
        • 1970-01-01
        • 2018-11-02
        • 2011-04-17
        • 1970-01-01
        相关资源
        最近更新 更多