gpt4 book ai didi

python - 如何在我的版本控制系统中安全地保存我的 key 和密码?

转载 作者:IT老高 更新时间:2023-10-28 12:31:48 25 4
gpt4 key购买 nike

我将开发和生产服务器的主机名和端口等重要设置保存在我的版本控制系统中。但我知道将 secret (如私钥和数据库密码)保存在 VCS 存储库中是不好的做法

但密码——就像任何其他设置一样——似乎应该进行版本控制。那么保持密码版本控制的正确方法是什么

我想这将涉及将 secrets 保存在他们自己的“secrets settings”文件中,并对 那个 文件进行加密和版本控制。但是什么技术?以及如何正确地做到这一点?有没有更好的方法来解决这个问题?


我一般会问这个问题,但在我的具体实例中,我想使用 gitgithub 存储 Django/Python 站点的 key 和密码.

此外,当我使用 git 推/pull 时,理想 解决方案会做一些神奇的事情——例如,如果加密的密码文件发生更改,则会运行一个脚本,该脚本要求输入密码并将其解密到位.


编辑:为了清楚起见,我 am 询问在哪里存储 生产 secret 。

最佳答案

您希望在加密敏感设置文件的同时仍将文件保留在版本控制中,这是完全正确的。正如您所提到的,最好的解决方案是当您推送某些敏感文件时,Git 会透明地加密它们,以便在本地(即在任何拥有您的证书的机器上)您可以使用设置文件,但 Git 或 Dropbox 或任何人将文件存储在 VC 下无法读取明文信息。

推/pull 过程中的透明加密/解密教程

这个 Gist https://gist.github.com/873637展示了如何使用 Git 的 smudge/clean 过滤器驱动程序和 openssl 来透明地加密推送文件的教程。您只需要进行一些初始设置。

工作原理总结

您将创建一个包含 3 个 bash 脚本的 .gitencrypt 文件夹,

clean_filter_openssl 
smudge_filter_openssl
diff_filter_openssl

被 Git 用于解密、加密和支持 Git diff。在这些脚本中定义了主密码和盐(已修复!),您必须确保 .gitencrypt 永远不会被实际推送。示例 clean_filter_openssl 脚本:

#!/bin/bash

SALT_FIXED=<your-salt> # 24 or less hex characters
PASS_FIXED=<your-passphrase>

openssl enc -base64 -aes-256-ecb -S $SALT_FIXED -k $PASS_FIXED

smudge_filter_open_ssldiff_filter_oepnssl 类似。请参阅 Gist 。

您的包含敏感信息的 repo 应该有一个 .gitattribute 文件(未加密并包含在 repo 中),该文件引用 .gitencrypt 目录(其中包含 Git 透明加密/解密项目所需的所有内容)并且存在于您的本地计算机上。

.gitattribute 内容:

* filter=openssl diff=openssl
[merge]
renormalize = true

最后,您还需要将以下内容添加到您的 .git/config 文件中

[filter "openssl"]
smudge = ~/.gitencrypt/smudge_filter_openssl
clean = ~/.gitencrypt/clean_filter_openssl
[diff "openssl"]
textconv = ~/.gitencrypt/diff_filter_openssl

现在,当您将包含敏感信息的存储库推送到远程存储库时,文件将被透明地加密。当您从具有 .gitencrypt 目录(包含您的密码)的本地计算机中提取时,文件将被透明地解密。

备注

我应该注意,本教程并未描述仅加密您的敏感设置文件的方法。这将透明地加密推送到远程 VC 主机的整个存储库并解密整个存储库,使其在本地完全解密。为了实现您想要的行为,您可以将一个或多个项目的敏感文件放在一个sensitive_settings_repo 中。您可以研究这种透明加密技术如何与 Git 子模块一起使用 http://git-scm.com/book/en/Git-Tools-Submodules如果您确实需要将敏感文件放在同一个存储库中。

如果攻击者可以访问许多加密的存储库/文件,理论上使用固定密码可能会导致暴力破解漏洞。 IMO,这种可能性非常低。正如本教程底部的注释所述,不使用固定密码将导致不同机器上的本地版本的存储库始终显示“git status”发生了更改。

关于python - 如何在我的版本控制系统中安全地保存我的 key 和密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11575398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com