我们如何将 GPG 密钥设置为环境变量

如果您不熟悉 GPG 密钥,请先完成上述记录。

现在,当您了解什么是 GPG密钥后,我们就可以讨论它在项目中的用法了。

在应用程序部署中,我们可能有各种环境,例如 DEV、QA、STAG 和 PROD,甚至可能更多。
除此之外,可能还有各种类型的文件需要多个不同的 GPG 密钥才能对其进行加密。

现在的问题是,在部署应用程序之前,我们是否需要在特定环境中导入 GPG 密钥?
嗯,这是导入密钥的方法之一,但前提是我们确定密钥不会经常更改。

这种方法的问题
开发人员可能有权在特定环境上部署应用程序,或者也可以通过 CI/CD 流程来完成。但开发者可能没有导入 GPG 密钥的完整权限。
他现在需要另一个有权导入 GPG 密钥的人。现在有依赖性。
每当开发人员引入新的 GPG 密钥或密钥发生更改时,就需要另一个对 env具有完全权限的人来测试新开发的更改。

我们如何消除这种依赖性
我们需要一个解决方案,可以像使用环境变量进行其他配置一样配置这些键。

将 GPG 密钥配置为环境变量时出现问题
首先让我们看一个示例 GPG 密钥:

-----开始 PGP 公钥块-----

mDMEYr7UeBYJKwYBBAHaRw8BAQdAZceJqna9PlHH1t0QzO1pUk/M/p94UWt2w932
HxBZziq0IVNBUCBVc2VyIDEgPHNhcF91c2VyXzFAYXBwbGUuY29tPoiaBBMWCgBC
FiEElTDqcjvYE2kmvlx2xD2M6blccP4FAmK+1HgCGwMFCQPCZwAFCwkIBwIDIgIB
BhUKCQgLAgQWAgMBAh4HAheAAAoJEMQ9jOm5XHD+1vkBAIgwVNKc9EMAoJUMenUn
L9FdvuL3Yi/Sha+d97FoBp/IAP954uvnkM5UhSZs9/kMgKyiyHM0QrpGUn/Aqz7k
VcvuBLg4BGK+1HgSCisGAQQBl1UBBQEBB0AxD8Hev5OCrbsl1b28iomb76ylnnYg
5IsuuNrzYeRCfwMBCAeIfgQYFgoAJhYhBJUw6nI72BNpJr5cdsQ9jOm5XHD+BQJi
vtR4AhsMBQkDwmcAAAoJEMQ9jOm5XHD+C1kA/2i9r8ojLakCyy/x+n3l3uDPzxzq
ZLzaGSVv9bv9vom4AQC6QPJiNjI6xynWmjXQoxrUY3Oq4CSKmo4iuAgmekGHCA==
=t5iy
-----END PGP公钥块-----

正如我们所见,任何 GPG 密钥的内容都是多行值,而环境变量只能有单行值。

所以我们需要这种多线到单线的解决方案。

多行转单行
方法一:
我们可以在每行末尾放置一个像\n这样的分隔符,并且可以手动将这个多行值变成单行。
此后,尝试导入 GPG 密钥的 Python 代码将首先通过删除 \n 和回车符来准备原始密钥,使其再次成为多行值。
但是我们需要一个人手动准备这个单行值,并且可能会更改内容,然后不会发生正确的导入。

方法2:
我们可以借助base64实用程序。
出于共享目的导出密钥的通用命令是 -
gpg --armor --export

上面的命令返回多行值。
所以如果我们使用上面的命令如下

gpg --armor --export | gpg --armor --export | base64

单行键如下所示:
LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUVOQkdRejNYb0JDQURDZURnbXhZZGdXSVJzUFhCVGdxMzM3NEthSWFBZ2tLTzlYZ3dpOWxEQmFaRjNUcDdNCi9rWmxTSHRiODYyWnpnL0pGMjYwN1puK0NEMmI4dDEwLzhQZVFZbmpqOEZMcjFJcndWVjRpY3hGWW5uMXFQU0wKZGpzaDRDeXNxZThVaitmYlFWR25BeDNoSE5wNEwvSlV3NzI5QTFiTlhSVlovNzFQWWx0VWdMNzZETDg5TXY5bgpUMFBJbzE4TDJzZ2JMR1hvUWhFeExPME41cjZQaUMxTDVMeEtQUFl6ajJ6Sm1QeDg0Y2kydENFMjczVmZtWk8vCjd6aE5tWUNvRHZ4MUU4S1oxd203Q3pHZE9MNkwzN1NZd3VmWkZTSm5neHdFK0lkS1BpSXBIRDRYVGxXL3pGV1UKam9LTW5kVHhZQmtsSERTc2gxR3gzb015QWEzdGU2KzNjNUNMQUJFQkFBRzBLR052WVNCMFpYTjBJQ2gwWlhOMApJR3RsZVNrZ1BHTnZZVjkwWlhOMFFHRndjR3hsTG1OdmJUNkpBVkVFRXdFSUFEc1dJUVJrZlVyRXVoWHEvOGoyCmtsTE84d2dWZWhTZ1p3VUNaRFBkZWdJYkF3VUxDUWdIQWdJaUFnWVZDZ2tJQ3dJRUZnSURBUUllQndJWGdBQUsKQ1JETzh3Z1ZlaFNnWjBzWEIvOVc5KzhMWFBSdGtIRjlNQlpYemJHVWVwT3BtOFVzV29lY2p1TDRwNXIreC94dwpjUmVqK05NN3RWNmJMM2dSR0pTbVp1dDJGTnVSMEVGWmdTbnZYbEczbzVUMnJHUlZEMCthWjFMMys4MGNpbTVsCmozZ2E5eEdmUk9TUDE1M2wrdlVXYXo0dUZ4TlBnL25oNEY5YVJLeDExQ0Jlc0hvTGFySzJzYzZUelpHVHpQUlUKR0dGcGNkdkE4NXFJUUdwY2tYZ2hzSmg4U1lFa0ZKRTU4NXBIUVhoRFJuUUlBUXExVlhOOXFHQ1JCQWRCMkptZwpKNHM2VWhaQ0ZNdys2QVBTeUlNT0JHRzdjTlVMQ1NUK29QVXlwOUpsdWNRYXE4K29lTVN3UDVKZURwTmU0ZkQvCi9nVmI3T1FveVNyd1cvL0hFcGRrUUIxY3YrT3JPY2pyZ1FyU0hIUEl1UUVOQkdRejNYb0JDQURjenJCcTBmeUcKeWJ0VlZKZ0dnOHR3WlBUZnRuT05JSE5DWlJYOWdmbldiZG1UbVZDaXN4Sk5VeW9wOGhJNzhPUVZoNE0zYlRlbApGWENTWWZOeHorb1BhMi9ZOVp3Wis4MjNpelJRSnZSZFF6K0Yyd0M1VDJKRjBGSWw4QU9TcmVXZm1mTS9SVTJ5CnZiUks1a3VyL0RaZmkxQytCZEMxR3plNjBJZVRsM1NQSW5WZW1WVXVvWERLTytNQlZkZTFGdEZKaHVDNlFvYjgKYU9rWjhvdTVrL0tCR1p5TkdBeFI0ODN2a3ZxZGswdmpsMmVPWEo0RDQwLzhJK3RYblhKckduWFZ0dnNCc1diawptT3NiVWltS1psUVBjajlLQjNuNzkxUkQ1THA0Wk9uQ0RZbmVqbzNsNlRCcVhjZzVTK2JzdmpHS3oyNjRpNzV3CkNxMlQzUlAyK0lKVEFCRUJ=ZjCm00QkhBcDlmaTQ0TTF1QjU2alNSUnBDTkdtNkJ4YzdUdEI3Z1hBWVdBVlM0MzQ5N3NjaDhoTFF5bGxJUHhuZ2wKSXh5Z1pJdG04NGlvZli0bXZUWVZ4YUhTYXZQa3JCM1BKcT d4Q0pLdStNa1JMbTh4Qjc1RloxN3hoQTNIK1hIbQpIQkZXdzBGN1MvZWdiYWkzTnZIQnRRMG00V2tPVW51M1JZUkZJdDR1WWZweDdjR2x6Q0NXU1pienpzUklST2trCmlJbDNVYlFCWHRES 09LOW1oNU5oMDJJS3IxK2hGdkJRVkJzWlk4R3NEcWVBbmtyQmxTb0UKPTN1WkkKLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQo=ZjCm00QkhBcDlmaTQ0TTF1QjU2alNSUnBDTkdtNkJ4YzdUdEI3Z1hBWVdBVlM0MzQ5N3NjaDhoTFF5bGxJUHhUZ2wKSXh5Z1pJdG04NGlvZlI0bXZUWVZ4YUhtYXZQa3JCM1BKcT d4Q0pLdStNa1JMbTh4Qjc1RloxN3hoQTNIK1hIbQpIQkZXdzBGN1MvZWdiYWkzTnZIQnRRMG00V2tPVW51M1JZUkZJdDR1WWZweDdjR2x6Q0NXU1pienpzUklST2trCmlJbDNVYlFCWHRES 09LOW1oNU5oMDJJS3IxK2hGdkJRVkJzWlk4R3NEcWVBbmtyQmxTb0UKPTN1WkkKLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQo=

我们将获得单行 base64 编码的 GPG 密钥。
然后在 Python 代码中,我们可以在导入之前检索原始 GPG 密钥,如下所示:

Original_multiline_gpg_key = base64.b64decode(gpg_key_base64_encoded)

通过这种方式,我们消除了对只需要导入任何新 GPG 密钥的人的依赖性。

猜你喜欢

转载自blog.csdn.net/jascl/article/details/131323228
gpg
今日推荐