对基于 HTTPS 的内部 APT 存储库使用自签名 SSL 证书

对基于 HTTPS 的内部 APT 存储库使用自签名 SSL 证书

我已经设置了一个 Debian 存储库(实际上是 Ubuntu),用于内部使用一些私有软件包,现在想通过 Web 将其提供给某些特定服务器。我希望 apt-get / aptitude 使用 HTTPS 连接到它,因为我不想花任何钱,所以我使用自签名证书。

我尝试按照 apt.conf 手册页指示 apt-get 使用我自己的根 CA 证书来验证主机,但似乎不起作用。

我的 apt.conf 文件如下所示:

#Acquire::https::repo.mydomain.com::Verify-Peer "false";
Acquire::https::repo.mydomain.com::CaInfo      "/etc/apt/certs/my-cacert.pem";
Acquire::https::repo.mydomain.com::SslCert     "/etc/apt/certs/my-cert.pem";
Acquire::https::repo.mydomain.com::SslKey      "/etc/apt/certs/my-key.pem";

我也使用客户端证书,但这似乎不是一个问题,因为当我将 Verify-Peer 设置为“false”(上面评论)时,一切都正常。

使用相同的 CA 证书、客户端证书和密钥可以与 curl 很好地配合使用。

我启用了 apt 调试(Debug::Acquire::https“true”)但它提供的信息很少。

关于如何进行有什么建议吗?

答案1

我不使用客户端身份验证,只使用 HTTPS,但我只能使用以下命令使其工作:

Acquire::https {
        Verify-Peer "false";
        Verify-Host "false";
}

我把它放入文件中/etc/apt/apt.conf.d/90sslverify

答案2

最近也遇到了类似的问题,通过添加SslForceVersion选项解决了。

我的配置如下:

Acquire::https::test.com {
    Verify-Peer "true";
    Verify-Host "true";

    CaInfo "/tmp/ca.crt";

    SslCert "/tmp/client.crt";
    SslKey  "/tmp/client.key";
    SslForceVersion "SSLv3";
};

答案3

我通过另一种方式解决了这个问题,即安装 ca 证书。

  1. 将文件复制*.crt/usr/local/share/ca-certificates/
  2. 跑步sudo update-ca-certificates

适用于 Ubuntu 14.04。

答案4

希望这对其他人有所帮助 - 我还无法直接解决这个问题。

作为一种解决方法,我现在使用 stunnel4 创建到我的 HTTPS 存储库的隧道。我拥有的自签名证书和客户端证书与 stunnel4 配合得很好。

我已经设置了 stunnel 来监听 localhost:8888 上的传入连接,并将它们定向到我的存储库 (repo.mydomain.com:443)。我已经设置了 apt 来查找我的存储库http://本地主机:8888/

到目前为止,效果还不错,尽管这看起来像是一个不必要的改动。

相关内容