encryption - GitLab 作业因“解密错误”OpenSSL 错误而失败,但该命令在本地执行得很好?
问题描述
有一个带有执行脚本的阶段的管道,该脚本应该解密密钥文件,GitLab Runner 失败:
$ scripts/decrypt.sh $LWCMAP_SERVER_KEY
bad decrypt
139810674749504:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:../crypto/evp/evp_enc.c:536:
ERROR: Job failed: exit code 1
$LWCMAP_SERVER_KEY
包含一个密码短语,用于解密文件夹内的密钥,使用以下命令.gitlab-ci.yml
:
- scripts/decrypt.sh $LWCMAP_SERVER_KEY
而shell脚本的内容就是解密文件的OpenSSL命令:
openssl aes-256-cbc -k $1 -in assets/server.key.enc -out assets/decripted_server.key -d
我想知道为什么作业因“解密错误”而失败,因为完全相同的命令在本地执行得很好。我什至计算了文件和解密时使用的密钥的 md5,它们在运行器和本地完全相同(这意味着它不是损坏的数据)。
有任何想法吗?
编辑:
本地openssl version
输出“LibreSSL 2.8.3”,在服务器上,我将它升级到相同的版本。不过,在 Runner 的容器上,输出是“OpenSSL 1.1.0j 20 Nov 2018”。
解决方案
所以我想我明白了为什么,以及如何解决..似乎 LibreSSL 2.8x 与 OpenSSL 1.1x 不兼容。
这意味着在一个 TLS 实现上加密的文件无法用另一个解密。
相反,我所做的是ssh
进入 Ubuntu VM,然后在那里运行加密。由于 CI 将与我们的任何 Ubuntu VM 一起运行,并将部署在使用类似 TLS 实现的类似机器上,我预计密钥文件加密/解密不会出现任何进一步的问题。
这意味着我将无法在我的本地机器上测试解密,但我确信我可以忍受:-)
推荐阅读
- java - 运行 mvn test,可以找到测试类,但是显示 Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
- javascript - 删除最后出现的括号的内容
- r - 如何在矩阵上应用 Fisher 精确检验
- flutter - 颤振材质不同的边框颜色,半径不起作用
- javascript - 是否可以通过网络查询苹果电视上正在播放的内容,最好是通过 JS 查询?
- firebase - 在 Firestore 规则中的通配符前添加文本
- microsoft-teams - Microsoft Teams Graph Explorer:如何在“发送频道消息”API 中提及频道成员?
- swift - 从另一个未在 | 中声明的类修改 @Published 变量 SwiftUI
- airflow - 定义气流中的维护窗口
- r - 如何创建一个新的因子水平来汇总其他因子水平的总值?