在github动作中使用openssl

怪胎

我想将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命令或类似命令,因此实际上我不知道写入文件的内容,这使我无法更深入地进行分析。

这里有人可以推断出一些有用的提示或解决此问题的方法吗?

bk2204

问题的一部分可能是缺少报价。当您在外壳程序中不引用变量时,它会在空格(空格,制表符和换行符)上分割,因此您要传递的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或bashWindows,因为您使用的语法是POSIX Shell语法。

像大多数CI系统一样,GitHub Actions尝试清理其输出,以防止泄露偶然打印到日志中的秘密,这就是为什么您无法打印该值的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在github动作中使用mstest?

来自分类Dev

如果在github动作中使用环境变量

来自分类Dev

在AsyncCallback中使用动作

来自分类Dev

在同一工作中使用Node.JS和.NET的GitHub动作

来自分类Dev

如何在SceneKit Editor中使用动作

来自分类Dev

为什么要在Flux中使用“动作”?

来自分类Dev

在Ionic 2中使用动作表

来自分类Dev

在Bison语义动作中使用C宏

来自分类Dev

在鹦鹉螺动作中使用管道

来自分类Dev

在动作脚本3中使用Tweenlite

来自分类Dev

在Ionic 2中使用动作表

来自分类Dev

如何使用Github动作镜像GitHub存储库?

来自分类Dev

如何在openssl的BIGNUM中使用负数?

来自分类Dev

在Windows中使用Dynamic Zlib编译OpenSSL

来自分类Dev

在C中使用OpenSSL进行AEAD解密

来自分类Dev

如何在openssl的BIGNUM中使用负数?

来自分类Dev

如何使用GitHub动作自动向某人请求评论?

来自分类Dev

在组件中使用Vuex getter和动作的axios数据

来自分类Dev

如何在Xamarin和MvvmCross中使用动作栏

来自分类Dev

在动作监听器中使用Lambda表达式

来自分类Dev

无法在Struts 2中使用注释调用动作

来自分类Dev

在git hub动作中使用elm-test

来自分类Dev

尝试在动作中使用异步代码的最佳做法

来自分类Dev

在动作创建者中使用状态来反应redux

来自分类Dev

现在可以在Android Studio中使用动作布局的按钮

来自分类Dev

我该如何在List(of Date)中使用动作或功能

来自分类Dev

动作帮手无法在车把的{{#if}}中使用

来自分类Dev

春季:在一个JSP文件中使用Controller动作

来自分类Dev

展开项目后在Packery库中使用鼠标动作