我想将github动作的工件发布到特定的更新存储库,以便我的软件可以使用它来进行自我更新。为了在本地更新过程中验证更新,我想对此工件进行签名。我选择暂时将更新本身和签名存储在单独的文件中。
我的github操作将采用压缩后的工件,并应使用给定的RSA4096私钥对其进行签名,并应使用SHA512作为摘要。
我的github动作如下所示:
- name: Sign release
run: |
echo $PRIVATE_KEY > privatekey.pem
openssl dgst -sha512 -sign privatekey.pem -out latest.sig latest.zip
env:
PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
这个github动作应该从存储库的秘密中获取我的私钥,将其放入环境变量中,然后将其放入本地文件中,以便以下openssl命令可以使用此私钥对其进行签名。我这样做是为了阻止私钥本身回显到日志中。
私有密钥值如下:(当然这不是实际的私有密钥,而是我为测试目的而创建的唯一密钥,直到此github动作正常为止。此私有密钥仅为1024位,而不是上述的4096位。我将请勿再使用此私钥。)
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgGwdzKeZPLdOHV+/iDpHHtEk7kephhI5eythCfmoqzy5CSx+GZ6X
Z1GiIzII+CtyN69cOgyzO99uPvquBkbo3lHL5+jZnOEue8nMub8iwPXZgDB6s8BV
sFevjLENx4LWJSZSo8rUn6al3bfoWJUySzkla9xc4g0GiO1K81zGeRH9AgMBAAEC
gYBTZbUs/vYny5i69+pkUeICoEMxgiHKQw6win0AWMwl3fGmoWqvu8hV3wTZHrQY
B1XO7gxVKZigo9Du23g6EH0UhGHZm9s4csjVXm8gVt7LghoOZq82nLmbe+XBrn+C
B3VeQbk7urD5mfdWx5zRYWGPjg/zaCGu47Apuuc1Kw0vvQJBAMhbyHvua2b/Fdbm
fbpO283aTPBaHYrexsqp5DZ8/DUet7BIB/p9yb4hVpV9nDH/WALSl1stfcfe260w
Lsm4/icCQQCKJDAi/ukBW2QpFy9evMNpR0KxtFIETxs6y5v0/EOoaqKDrFjjb7M2
svEybXa/y/AgYMxxVeNbFpfWSC4Sc+k7AkA2D2XJ4qvCD6PB51EXOv3dzkAiPf5o
oPF8b1ivRwv5/T7M5rKYaOZNUct97HV/nAkQQegq5txgWIZndW+6aBrTAkACNG2o
QVVKtkC0/y+8XVrpFUAVQgGFHBYdLB7DHDugNoN9goSwrJm5p8V9vo2Epiag/aqF
rI9CZuvpeaFynfL9AkEApFCO3IxSkXYwx4AjQwxcuVz1w5lUAL5LxvRlmqy8Jj0l
RgXLxBfGTQoTVL9/JuUjE7xLXWfYm+8u9k3KV3FJYQ==
-----END RSA PRIVATE KEY-----
问题是执行此步骤时github操作的以下日志输出:
unable to load key file
6196:error:0909006C:PEM routines:get_name:no start line:crypto\pem\pem_lib.c:745:Expecting: ANY PRIVATE KEY
这意味着,回显到privatekey.pem的不是实际的私钥秘密值,而是其他东西。我无法在后续测试中打印文件的内容。由于没有necho或cat命令或类似命令,因此实际上我不知道写入文件的内容,这使我无法更深入地进行分析。
这里有人可以推断出一些有用的提示或解决此问题的方法吗?
问题的一部分可能是缺少报价。当您在外壳程序中不引用变量时,它会在空格(空格,制表符和换行符)上分割,因此您要传递的echo
是几个不同的参数,这些参数不是由换行符分隔,而是由空格分隔回声。
您可能需要编写此代码(请注意周围的引号$PRIVATE_KEY
:
- name: Sign release
run: |
echo "$PRIVATE_KEY" > privatekey.pem
openssl dgst -sha512 -sign privatekey.pem -out latest.sig latest.zip
env:
PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
通常,除非您确定要让Shell扩展它们,否则在所有变量使用双引号时都是一个好习惯。
当然,仅当您使用的是POSIX Shell时,所有这一切才适用,这意味着您需要使用Unix或bash
Windows,因为您使用的语法是POSIX Shell语法。
像大多数CI系统一样,GitHub Actions尝试清理其输出,以防止泄露偶然打印到日志中的秘密,这就是为什么您无法打印该值的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句