HTTPSベースの内部APTリポジトリに自己署名SSL証明書を使用する


10

私はいくつかのプライベートパッケージで内部使用するためにDebianリポジトリ(実際にはUbuntu)を設定しましたが、特定のサーバーがWeb経由で利用できるようにしたいと考えています。apt-get / aptitudeをHTTPSを使用して接続したいのですが、お金を使いたくないので自己署名証明書を使用しています。

apt-getで自分のルートCA証明書を使用してホストを検証するようにapt.confのマニュアルページを試してみましたが、動作しないようです。

私の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")を有効にしましたが、情報はほとんど提供されません。

続行する方法について何か提案はありますか?

回答:


5

私はクライアント認証を使用せず、HTTPSのみを使用していますが、これを使用して機能させるだけです:

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

これをの下のファイルに置きます/etc/apt/apt.conf.d


1
それはまさに私が望まないことです-私は自分のCA証明書を使用してサーバーを確認したいのです。検証の無効化は機能しますが、長期間実行したくありません。
シェブロン、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
これに注意してください。Webサイトは、さまざまなセキュリティ上の理由からSSLv3を無効にし始めています。将来的にはTLSv1以降のみが機能し、それ以降はTLSv1.2 +のみが機能します
Michael Hampton

3

askubuntu、私はこのソリューションおよび単一のホストにオプションを制限1のやや簡単なバージョンを見つけました。

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

これでうまくいきました。

ただし、ここの質問者は認証を保持したいと考えました。私は上記の線に沿っていくつかのことを試みましたが、それも機能させることができませんでした。一方、私のリポジトリは署名されており、署名キーをインストールしたので、SSL認証はセキュリティにとって重要ではありません。


繰り返しますが、私が望むものでありません-私ピア検証必要です。とは言っても、個人的に私は動作する設定を持っています(stunnelでの私の回避策を参照)。これはまだ他の人を助けるかもしれません。
シェブロン2013

3

ca-certificateをインストールすることで、別の方法で解決しました。

  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で着信接続をリッスンするようにstunnelを設定し、それらを私のリポジトリ(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年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.