带有客户端证书和 HTTPS 的 Apt

带有客户端证书和 HTTPS 的 Apt

我在服务器上设置了一个 (私有) 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对于缩小这个问题的解决非常有帮助。

我采取了以下步骤来解决这个问题,

  1. 将 _apt 用户添加到组 ssl-cert

~# usermod -G ssl-cert _apt

  1. 更改证书目录的组

~# chgrp ssl-cert /opt/CA.crt /opt/user.crt /opt/user.key

  1. 修复文件权限

~# chmod 655 /opt/CA.crt /opt/user.crt /opt/user.key

此外,如果这对您不起作用,您可以su尝试_apt读取您的证书和密钥文件,如果可以,那么使用客户端证书的 apt 应该可以按预期工作。

为了确保您使用的是自签名证书,请确保运行

~# sudo update-ca-certificates

一旦你移动了你的 ca 证书 /usr/local/share/ca-certificates/

相关内容