如何在 Google Cloud AppEngine 上强制使用 https



我正在尝试强制https处理托管在Google Cloud AppEngine上的应用程序的所有流量。 https 可以工作,但尽管按照将 http 流量重写为 https 的说明,仍然可以使用 http 访问该站点,这会导致问题。

我已将其添加到app.yaml中:

handlers:
- url: /.*
script: _go_app
secure: always
redirect_http_response_code: 301

但这似乎没有任何区别。

我正在使用朱利安施密特路由器,然后处理所有路由:

log.Fatal(fmt.Println(http.ListenAndServe(":8080", router)))

我已经看过使用 http。ListenAndServeTLS,但这需要额外的参数,我无法确定这些参数的值应该在Google AppEngine上下文中是什么。

log.Fatal(fmt.Println(http.ListenAndServeTLS(":8443", "cert.pem", "key.pem", router)))
">

cert.pem"和"key.pem"在哪里?

我已经读到我不需要在我的应用程序中显式提供TLS,因为AppEngine会为我处理它,所以即使我知道参数是什么,我也不确定它是否有助于强制使用https。


http://sapling.appspot.com https://sapling.appspot.com
http://sapling.money
https://sapling.money

以上所有工作,但我似乎无法将任何 http 版本强制为 https。

如果您使用的是secure:always处理程序,并且请求未自动重定向,那么您可能使用的是 App Engine Flex?

App Engine Flex 不支持处理程序,您可以在 Flexible app.yaml 文档中看到这一点。

相反,您可以签入代码是否通过 HTTP 或 HTTP 发送请求并重定向。这是通过 App Engine 特定的标头X-Forwarded-Proto完成的。

该实现在您的终端上配置,并且有一个关于该主题的简短段落。

您还可以查看具有相同答案的类似 Stack 帖子 1

我希望这有帮助!

在 app.yaml 中包含secure: always元素是正确的,因为这将强制应用处理程序使用 HTTPS。

但是,我相信此处找到的以下有关"保护您的应用程序"的 App Engine 文档可能对您有所帮助。如该链接所示,您可以通过简单地将每个资源之间的句点替换为-dot-来将 HTTP URL 转换为 HTTPS。您可能会看到下面提供的示例。

http://[SERVICE_ID].[MY_PROJECT_ID].appspot.com
https://[SERVICE_ID]-dot-[MY_PROJECT_ID].appspot.com 

有关 HTTPS URL 和资源目标的其他信息,您可以在此处查看请求的路由方式。

希望这有帮助!

您可以使用 Strict-Transport-Security 标头指示浏览器对给定页面或整个域首选 https 而不是 http,如本文档中所述。若要将 HTTP 严格传输安全标头 (HSTS( 添加到应用,必须在应用代码中实现标头,而不是在应用的配置文件(app.yaml 或 appengine-web.xml(中实现标头。

如果您向 Google 的 HSTS 预加载列表注册应用程序,则启用 HSTS 预加载也是一个好主意。Firefox 和 Chrome 绝不会通过非安全连接加载您的网站。

最新更新