web-dev-qa-db-ja.com

クライアント証明書と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に次のファイルを追加しました:

deb 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が失敗していると推測されます(ログの内容と一致します)。

インターウェブでsslを使用してapt-getに関するドキュメントを見つけるのに苦労しましたが、ソースコードを見つけることすらできませんでした。

誰にもアイデアはありますか?

3
davidls

これは主にディレクトリのアクセス許可の問題で発生します。apt-getは、キーと証明書ファイルに設定されているアクセス許可を非常に意識しているため、777または644だけを設定しても機能しません。

https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1668944 で説明されている手順は、この問題を絞り込むのに非常に役立ちました。

これに対処するために次の手順を実行しましたが、

  1. _aptユーザーをグループssl-certに追加します

~# usermod -G ssl-cert _apt

  1. Certsディレクトリのグループを変更します

~# 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 as _aptとして、証明書とキーファイルの読み取りを試みることができます。そうすれば、クライアント証明書でaptが期待どおりに動作するはずです。

自己署名証明書を使用しているかどうかを確認するために、必ず実行してください

~# Sudo update-ca-certificates

ca証明書/ usr/local/share/ca-certificates /を移動したら

1
davidls