GitLab作业由于“解密错误” OpenSSL错误而失败,但是该命令在本地执行得很好吗?

时间:2019-04-29 19:48:07

标签: encryption openssl gitlab gitlab-ci-runner

具有执行阶段的管道,该阶段执行应该解密密钥文件的脚本,因此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”。

1 个答案:

答案 0 :(得分:1)

所以我想我知道原因,以及解决方法。 看来LibreSSL 2.8x与OpenSSL 1.1x不兼容。

这意味着在一种TLS实施中加密的文件无法与另一种解密。

我要做的是ssh进入Ubuntu VM,然后在此处运行加密。由于CI将与我们的任何Ubuntu VM一起运行,并将部署在使用类似TLS实现的类似机器上,因此我预计密钥文件加密/解密不会有任何进一步的问题。

这意味着我将无法在本地计算机上测试解密,但是我确定我可以忍受:-)