【问题标题】:How do I store the private key of my server in google app engine?如何将我的服务器的私钥存储在谷歌应用引擎中?
【发布时间】:2016-01-06 08:57:03
【问题描述】:

我正在使用 "github.com/dgrijalva/jwt-go" 创建 JSON 网络令牌。
当我在本地托管我的服务器时,我可以像往常一样使用我的私钥。但在 GAE 中它不起作用,因为我无权访问文件系统。

你们会怎么做呢?将密钥存储在数据存储中或任何其他想法?

谢谢

编辑:

我的app.yaml 看起来像这样(在api_version 下方):

handlers:
- url: /.*
  script: _go_app

【问题讨论】:

    标签: google-app-engine go jwt google-cloud-datastore


    【解决方案1】:

    在 AppEngine 上,您无权访问主机操作系统的文件系统,但您可以访问 Web 应用程序的文件(您拥有只读权限,不能更改它们,也不能创建应用文件夹中的新文件)。

    所以问题是:您想在不重新部署应用的情况下从应用中更改此私钥吗?或者,如果它与您的应用程序代码“静态”部署,那完全没问题?

    如果您不需要更改它(或仅在您重新部署应用时),最简单的方法是将其存储为“静态”文件作为 web 应用的一部分。您可以使用相对路径引用您的应用程序的文件,其中当前或工作目录是您的应用程序的根目录。例如。如果您的应用在其根目录(app.yaml 所在的位置)中包含一个key 文件夹,并且在key 文件夹内有一个my_key.txt 文件,您可以使用路径引用它:key/my_key.txt

    实际上,将静态文件与您的应用程序代码一起“传送”是很常见的:只需考虑由 Go 代码读取和处理的 HTML 模板(例如包html/template)以生成 HTML 结果; HTML 模板文件的内容不直接提供给客户端。

    如果您需要不时更改它而无需重新部署您的应用,请将其存储在您的应用可以读取和修改的 Datastore 中。

    注意:

    一个重要提示:并非每个文件都可以通过代码读取,这取决于应用配置。引用Configuring with app.yaml / Static file handlers:

    静态文件是针对给定 URL 直接提供给用户的文件,例如图像、CSS 样式表或 JavaScript 源文件。静态文件处理程序描述应用程序目录中的哪些文件是静态文件,以及哪些 URL 为它们提供服务。

    为了提高效率,App Engine 将静态文件与应用程序文件分开存储和提供。静态文件在应用程序的文件系统中不可用。 如果有数据文件需要应用程序代码读取,数据文件必须是应用程序文件,不能通过静态文件模式匹配。

    静态文件处理程序可以通过两种方式定义:作为映射到 URL 路径的静态文件的目录结构,或者作为将 URL 映射到特定文件的模式。

    阅读链接如何正确配置应用程序和静态文件/目录。

    【讨论】:

    • 谢谢!很好的答案!
    • 也许不是您想深入研究的东西,但是当我部署我的代码时,我无法让它工作。为本地服务时,密钥的路径有效。我通过执行 ioutil.readfile("keys/demo.rsa") 获取密钥,并且从根目录有一个名为 keys 的文件夹,其中 demo.rsa 和 demo.rsa.pub 都在其中。包含它们的我的文件位于另一个与密钥处于同一级别的文件夹。你有什么想法吗?
    • @SimonNilssonGuldstrand 请参阅编辑。代码需要读取的文件必须是应用程序文件,并且不能匹配任何静态文件模式
    • 我已经阅读了链接中的页面,我想我知道我想做什么。但是我现在无法部署我的代码。 app.yaml 中的错误。我只有 - url: /.* script: _go_app 首先。现在我有 - url:/keys static_dir:keys application_readable:true。这个好看吗?
    • @SimonNilssonGuldstrand 您只有一个 _go_app 条目的第一个版本看起来很完美。您的第二个示例很糟糕:它将您的密钥公开!还原该更改!
    【解决方案2】:

    解决方案是让 app.yaml 保持原样。将 app.yaml 放在项目的根 lvl 中。然后将所有导入从从 GOPATH 开始更改为从项目根目录开始。让我选择将 app.yaml 和 main go 文件放在项目根目录下的不同文件夹中的问题是由于双重导入。阅读本文以获得更好的理解:Google Go AppEngine imports and conflicts when serving / testing

    解决方案让我的项目找到了我想要的文件。

    【讨论】:

      猜你喜欢
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 2018-05-09
      相关资源
      最近更新 更多