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

she*_*ron 10 ubuntu debian repository ssl-certificate apt

我已经建立了一个 Debian 存储库(实际上是 Ubuntu),供内部使用一些私有软件包,现在希望通过网络将其提供给某些特定服务器。我希望 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";
Run Code Online (Sandbox Code Playgroud)

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

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

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

有关如何进行的任何建议?

cor*_*ump 6

我不使用客户端身份验证,只使用 HTTPS,但我只使用它来工作:

Acquire::https {
        Verify-Peer "false";
        Verify-Host "false";
}
Run Code Online (Sandbox Code Playgroud)

我把它放在/etc/apt/apt.conf.d.

  • 这正是我不想要的 - 我确实想使用我自己的 CA 证书来验证服务器。禁用验证有效,但我不想长期这样做。 (5认同)

小智 6

最近,我遇到了类似的问题。我通过添加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";
};
Run Code Online (Sandbox Code Playgroud)

  • 小心这一点。出于各种安全原因,网站开始禁用 SSLv3;将来只有 TLSv1 和更高版本可以工作,以后只有 TLSv1.2+ (2认同)

ort*_*ang 6

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

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

适用于 Ubuntu 14.04。


she*_*ron 1

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

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

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

到目前为止,这一直运作良好,尽管这似乎是一个不必要的黑客行为。