【问题标题】:Securely storing secrets in hosted source control在托管源代码控制中安全地存储秘密
【发布时间】:2013-01-29 20:13:09
【问题描述】:

我们公司最近在本地源代码控制系统上采用了由 BitBucket 托管的私有存储库。除了源代码之外,每个存储库都具有构建、配置和部署所需的所有组件(脚本等)。这在大多数情况下都很好用,但我对如何处理通常伴随我的构建和部署脚本附带的敏感密码、ftp 配置等感到困惑。

请参阅this similar post 概述问题。

在我的例子中,xml 配置代表了用于解析它们的代码,因此需要对它们进行版本控制(无论如何是模式)。

显然,将机密存储在本地以外的任何地方都会增加您的风险,但还有哪些替代方法?将它们加密存储?在构建期间使用花哨的配置部分替换,从外部系统提供配置值?

【问题讨论】:

    标签: encryption version-control dvcs


    【解决方案1】:

    Git

    双向关键字的涂抹/清洁过滤器代码替换

    Mercurial

    MQ-patch (local),恢复本地工作目录中的敏感数据,在推送和发布的 repo 中丢失

    【讨论】:

    • (我们使用的是 Hg,所以是 MQ-Patch)。所以这本质上意味着实际值需要存储在源代码控制之外?这适用于证书等整个文件还是只是字符串替换?
    • @JeremySmith - 不,mq-queue 中的补丁存储在本地存储库中(并作为其一部分)。并且每个补丁都可以存储任何更改,可以手动使用工作目录执行(添加-删除-重命名-编辑文件)
    • 我不是 Hg wiz,但如果它是本地存储库的一部分,如何在不推送的情况下与其他开发人员共享这些文件的更改?
    • @JeremySmith - 您可以在 pull|push(--mq 选项)中的 P2P 通信(dev-dev)中交换补丁使用MQCollab Extension 将(应用的)补丁保存为包并以通常的方式传输包。我认为 MQCollab 是最好的方式(对我来说)
    【解决方案2】:

    您可以在本地存储包含敏感数据的配置文件。您应该签署此文件,其中包含私钥或密钥。验证签名的公钥应该存储在代码中。现在,您将加密的版本化配置存储在源存储库中。只有当应用程序在指定位置找到签名的解密密钥时,才能读取加密的配置。如果它找不到它们,它会退回到普通的默认值进行测试。如果您添加此附加技巧,请不要忘记添加您正在使用的配置的日志记录。您可能还想对配置文件进行签名或执行 MAC 计算。

    这提供了多少安全性取决于系统的其余部分,但您可以在本地保留相对静态的数据,并且仍然将配置数据放在版本控制系统中。请注意,许多版本控制系统都喜欢文本,因此您可能希望对加密的配置文件进行 base64 编码,以确保这一点。

    当然,这只是众多方案之一。

    【讨论】:

    • 我认为,如果我们走这条路,我们会喜欢将 RSA 保护配置与 aspnet_regiis 一起使用,就像我们一直在使用 web.configs 一样。这是否可以以某种方式与提交过程挂钩以加密途中的配置?也许这就是 Lazy Badger 的解决方案所能提供的?
    • 不知道,也许问问懒獾。这是一个或多或少独立于使用的源代码控制的通用解决方案。我喜欢加密和安全,而不是版本控制系统。
    猜你喜欢
    • 2020-04-06
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2013-06-02
    相关资源
    最近更新 更多