You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dput上传deb包时遭遇SSL证书验证失败问题求助

解决dput上传GitLab Debian仓库时的SSL证书验证失败问题

问题场景

使用dh-make构建.deb包后,通过dput上传至GitLab Debian仓库,执行的配置与命令如下:

cat <<EOF > dput.cf
[gitlab]
method = https
fqdn = <my login>:<my password>@gitlab.mydomain.com
incoming = /api/v4/projects/<project id>/packages/debian
EOF

dput --config=dput.cf --unchecked --no-upload-log gitlab <my package name>_1.0.1_amd64.changes

错误日志

执行后出现SSL验证失败错误:

Uploading <my package name> using https to gitlab (host: <my login>:<my password>@gitlab.mydomain.com; directory: /api/v4/projects/<project id>/packages/debian)
running allowed-distribution: check whether a local profile permits uploads to the target distribution
running checksum: verify checksums before uploading
running suite-mismatch: check the target distribution for common errors
running gpg: check GnuPG signatures before the upload
Not checking GPG signature due to allow_unsigned_uploads being set.
Not writing upload log upon request
Uploading <my package name>_1.0.1.dsc
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1007)>

已尝试操作

在Ubuntu 22.04系统中,已通过以下步骤添加自签名GitLab SSL证书至系统信任列表,HTTP上传测试正常,但HTTPS仍报错,尝试过certifi等Python SSL配置方案无效:

mkdir -p /usr/local/share/ca-certificates

openssl s_client -showcerts -connect gitlab.mydomain.com:443 -servername gitlab.mydomain.com < /dev/null 2>/dev/null | openssl x509 -outform PEM > /usr/local/share/ca-certificates/gitlab.mydomain.com.crt

update-ca-certificates

解决方案

1. 为dput指定CA证书路径

修改dput.cf配置,将账号密码与FQDN分离,并添加ssl_ca_cert字段指向你的自签名证书:

cat <<EOF > dput.cf
[gitlab]
method = https
fqdn = gitlab.mydomain.com
login = <my login>
password = <my password>
incoming = /api/v4/projects/<project id>/packages/debian
ssl_ca_cert = /usr/local/share/ca-certificates/gitlab.mydomain.com.crt
EOF

重新执行dput命令即可:

dput --config=dput.cf --unchecked --no-upload-log gitlab <my package name>_1.0.1_amd64.changes

2. 强制Python使用系统CA证书

若dput依赖的Python环境未读取系统信任的CA证书,可通过环境变量指定系统证书路径:

export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
dput --config=dput.cf --unchecked --no-upload-log gitlab <my package name>_1.0.1_amd64.changes

如需永久生效,可将export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt添加至~/.bashrc或~/.profile文件中。

3. 重新导入完整证书链

之前的证书导出命令可能只提取了服务器证书,漏掉了中间CA证书,重新导出完整证书链并更新信任列表:

# 导出完整证书链
openssl s_client -showcerts -connect gitlab.mydomain.com:443 -servername gitlab.mydomain.com < /dev/null 2>/dev/null | awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/{print}' > /usr/local/share/ca-certificates/gitlab.mydomain.com.crt

# 刷新系统证书
update-ca-certificates --fresh

验证证书是否生效:

curl -v https://gitlab.mydomain.com

若输出中包含SSL certificate verify ok,说明证书已被系统信任。

内容的提问来源于stack exchange,提问作者JFrol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:33:27