具有执行阶段的管道,该阶段执行应该解密密钥文件的脚本,因此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”,在服务器上,我将其升级到相同版本。不过,在跑步者的容器上,输出为“ OpenSSL 1.1.0j 20 Nov 2018”。
答案 0 :(得分:1)
所以我想我知道原因,以及解决方法。 看来LibreSSL 2.8x与OpenSSL 1.1x不兼容。
这意味着在一种TLS实施中加密的文件无法与另一种解密。
我要做的是ssh
进入Ubuntu VM,然后在此处运行加密。由于CI将与我们的任何Ubuntu VM一起运行,并将部署在使用类似TLS实现的类似机器上,因此我预计密钥文件加密/解密不会有任何进一步的问题。
这意味着我将无法在本地计算机上测试解密,但是我确定我可以忍受:-)