从GitLab调用Webhook返回SSL错误

6
在GitLab 11.0.2中创建Webhook并进行测试时,我收到了以下错误:

Hook execution failed: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: tlsv1 alert internal error

Webhook URI使用的是带有公共证书(非自签名)的HTTPS协议。
此Webhook的SSL验证已被禁用。
更新:我已经将openssl1.0.2g升级到openssl1.0.2o,但错误仍然存在。
然后我尝试运行:
openssl s_client -connect mywebhookhost:443

这导致了:

depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2
verify error:num=20:unable to get local issuer certificate

更新2

/opt/gitlab/embedded/bin/ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'

返回结果:

OpenSSL 1.0.2o 27 Mar 2018

更新3

已安装GlobalSign CA证书。

 awk -v cmd='openssl x509 -noout -subject' '
>     /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep GlobalSign

结果是

subject=OU = GlobalSign ECC Root CA - R4, O = GlobalSign, CN = GlobalSign
subject=OU = GlobalSign ECC Root CA - R5, O = GlobalSign, CN = GlobalSign
subject=C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
subject=OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
subject=OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
2个回答

1

这个帖子看来,你的openssl版本太旧了。

我已经为TLS奋斗了几天,意识到我的GitLab运行在旧的debian8上,升级到了debian9。所以现在:

python -c "import ssl; print ssl.OPENSSL_VERSION" OpenSSL 1.1.0f 25 May 2017

因此,请开始检查/升级openssl,以使你的Webhook脚本正常运行。


@AlexanderZeitler,测试是在你自己的GitLab服务器上进行吗? - VonC
Ruby本身用于运行GitLab,可能已经使用较旧版本的openssl进行编译。 - VonC
@AlexanderZeitler 如果你在GitLab服务器上,那么ps -eaf|grep gitlab命令会显示一个运行该服务器的Ruby进程。 - VonC
GitLab 仪表板显示的 Ruby 版本是 2.4.4p296 - Alexander Zeitler
@AlexanderZeitler 好的,所以 OpenSSL 似乎没问题。现在只剩下证书本身了... - VonC
显示剩余9条评论

1
我有同样的问题,为了解决它,我需要在GitLab服务器上安装根证书。请参见此处了解详细步骤。

安装ca-certificates软件包时,GlobalSign的CA证书不应该已经安装了吗? - Alexander Zeitler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接