【问题标题】:GitLab job fails due to "bad decrypt" OpenSSL error, but the command executes just fine locally?GitLab 作业因“解密错误”OpenSSL 错误而失败,但命令在本地执行得很好?
【发布时间】:2019-10-16 18:44:17
【问题描述】:

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

【问题讨论】:

  • 就在我以为我终于看到了解决方案的时候,没有答案:-(

标签: encryption openssl gitlab gitlab-ci-runner


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2014-01-31
    相关资源
    最近更新 更多