我在服务器上设置了一个 (私有) apt 存储库。我只允许通过 SSL 访问此存储库,并且只能使用客户端证书。我已使用 curl 测试了连接:
$ curl --cacert /opt/CA.crt --cert /opt/user.crt --key /opt/user.key
https://example.com/dists/lucid/main/binary-amd64/Packages.gz 内容按预期下载。
我在 /etc/apt/apt.conf.d/45example-com 中创建了一个文件,其中包含
Debug::Acquire::https "true";
Acquire::https::example.com {
Verify-Peer "false";
Verify-Host "false";
CaInfo "/opt/CA.crt";
SslCert "/opt/user.crt";
SslKey "/opt/user.key";
};
我在 /etc/apt/sources.list.d/example.com.list 添加了一个文件,内容如下:
德布https://example.com/清晰的主
CA 证书似乎有问题,当我尝试更新时,出现以下信息:
> apt-get update
> * Connected to example.com (8.0.0.8) port 443 (#0)
> * found 1 certificates in /opt/CA.crt
> * error reading X.509 key or certificate file
> * Closing connection #0
example.com 上的服务器日志显示没有收到任何请求,因此我猜测 apt-get 在尝试发送请求(与日志所述的内容相符)之前就失败了。
我很难在互联网上找到有关 apt-get 和 ssl 的任何文档,甚至无法找到源代码。
有人有什么想法吗?
答案1
这主要发生在目录权限问题上,apt-get 非常清楚密钥和证书文件的权限设置,因此仅设置 777 或 644 是行不通的。
描述的步骤https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1668944对于缩小这个问题的解决非常有帮助。
我采取了以下步骤来解决这个问题,
- 将 _apt 用户添加到组 ssl-cert
~# usermod -G ssl-cert _apt
- 更改证书目录的组
~# chgrp ssl-cert /opt/CA.crt /opt/user.crt /opt/user.key
- 修复文件权限
~# chmod 655 /opt/CA.crt /opt/user.crt /opt/user.key
此外,如果这对您不起作用,您可以su
尝试_apt
读取您的证书和密钥文件,如果可以,那么使用客户端证书的 apt 应该可以按预期工作。
为了确保您使用的是自签名证书,请确保运行
~# sudo update-ca-certificates
一旦你移动了你的 ca 证书 /usr/local/share/ca-certificates/