首页 > 解决方案 > 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”。

标签: encryptionopensslgitlabgitlab-ci-runner

解决方案


所以我想我明白了为什么,以及如何解决..似乎 LibreSSL 2.8x 与 OpenSSL 1.1x 不兼容。

这意味着在一个 TLS 实现上加密的文件无法用另一个解密。

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

这意味着我将无法在我的本地机器上测试解密,但我确信我可以忍受:-)


推荐阅读