サーバーに(プライベート)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に関するドキュメントを見つけるのに苦労しましたが、ソースコードを見つけることすらできませんでした。
誰にもアイデアはありますか?
これは主にディレクトリのアクセス許可の問題で発生します。apt-getは、キーと証明書ファイルに設定されているアクセス許可を非常に意識しているため、777または644だけを設定しても機能しません。
https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1668944 で説明されている手順は、この問題を絞り込むのに非常に役立ちました。
これに対処するために次の手順を実行しましたが、
~# usermod -G ssl-cert _apt
~# chgrp ssl-cert /opt/CA.crt /opt/user.crt /opt/user.key
~# 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 /を移動したら