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


10

我已经建立了一个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”),但是它提供的信息很少。

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

Answers:


5

我不使用客户端身份验证,仅使用HTTPS,但是我只能使用以下方法来使它起作用:

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

我把它放在文件下/etc/apt/apt.conf.d


1
这正是我所不想要的-我确实想使用自己的CA Cert验证服务器。禁用验证有效,但我不想长期这样做。
shevron 2011年

5

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

2
请注意这一点。网站出于各种安全原因开始禁用SSLv3。将来只有TLSv1和更高版本可以使用,以后只有TLSv1.2 +可以使用
Michael Hampton

3

askubuntu中,我找到了该解决方案的一个简单版本,并将该选项限制为单个主机。

Acquire::https::mirror.ufs.ac.za::Verify-Peer "false";

这对我有用。

但是,这里的发问者想要保留身份验证。我按照上述方法尝试了一些方法,但也无法使其正常工作。另一方面,由于我的存储库已签名并且已经安装了签名密钥,因此SSL身份验证对于安全性不是至关重要的。


同样,不是我想要的-我确实需要对等验证。就是说,我个人有一个有效的设置(请参阅我的stunnel解决方法)。这可能仍然可以帮助其他人。
shevron 2013年

3

我通过安装ca证书以另一种方式解决了该问题。

  1. *.crt文件复制到`/ usr / local / share / ca-certificates /
  2. sudo update-ca-certificates

该解决方案至少适用于Ubuntu 14.04。


1
这也适用于进行SSL侦听/解密的代理。只需将证书添加到/ etc / ssl / certs即可。这次真是万分感谢!
乔丹

1
它不起作用,因为我安装的证书是来自防火墙的自签名证书。我没有其他证书。
保罗

1

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

解决方法是,我现在使用stunnel4创建通往我的HTTPS存储库的隧道。我已经使用stunnel4很好地完成了自签名证书和客户端证书。

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

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


-1

GnuTLS或apt似乎有问题。如果我的apt sources.list中的主机名与我的存储库Web服务器中的Apache ServerName不匹配,则使用TLSv1会出现以下错误:

W:无法获取 https://repo.example/debian/dists/unstable/non-free/binary-amd64/Packages:gnutls_handshake()失败:已收到TLS警告警报。

使用SSLv3,一切正常。

注意:这与SSL证书无关。无效的证书将导致以下错误:

错误https://repo1.example不稳定/非免费i386软件包SSL:证书使用者名称(repo.example)与目标主机名'repo1.example'不匹配


实际上,这是正确的-Apache支持SNI,并且会在其从客户端接收的主机名与服务器的配置主机名不匹配时发出警报。如果apt打印警报详细信息会很好,但是这样做是正确的。如今,退回到SSLv3是非常不明智的,并且只有“有效”,因为您正在禁用应该使用的功能。
djmitche 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.