web-dev-qa-db-ja.com

httpsでapt-getが動作しない問題

サーバーに(プライベート)aptリポジトリーがセットアップされています。 SSLを介したこのリポジトリへのアクセスのみを許可し、クライアント証明書のみを許可しています。 curlを使用して接続をテストしました。

$ curl --cacert /opt/CA.crt --cert /opt/user.crt --key /opt/user.key --pass 1234 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 "true";
    Verify-Host "true";

    CaInfo "/opt/CA.crt";

    SslCert "/opt/user.crt";
    SslKey  "/opt/user.key";
};

/etc/apt/sources.list.d/example.com.listに次のファイルを追加しました:

deb https://example.com/ lucid main

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
AEE

いくつかの検索の後、私は何が起こっているかについてのより良いアイデアを持っています(しかし、まだ解決策はありません)。

Aptのソースコードは https://code.launchpad.net/~ubuntu-branches/ubuntu/lucid/apt/lucid で見つけました。 sslにはlibcurlを使用し、sslにはgntlsを使用します。

このエラーメッセージはlibcurlからのものであり、CA証明書ではなくキー/パスワードについて不平を言っています。この線:

* found 1 certificates in /opt/CA.crt

cA.crtが正しくロードされたと言っています。エラーメッセージは、次のものから発生します。

if(gnutls_certificate_set_x509_key_file(
     conn->ssl[sockindex].cred,
     data->set.str[STRING_CERT],
     data->set.str[STRING_KEY] ?
     data->set.str[STRING_KEY] : data->set.str[STRING_CERT],
     do_file_type(data->set.str[STRING_CERT_TYPE]) ) !=
   GNUTLS_E_SUCCESS) {
  failf(data, "error reading X.509 key or certificate file");
  return CURLE_SSL_CONNECT_ERROR;
}

http://alpha.gnu.org/gnu/gnutls/libtasn1-0.2.10.tar.gz のgtls.cから)

問題は、そのキーに関連付けられているパスワードにあります。次を使用してキーからパスワードを削除しました:

$ openssl rsa -in user.key -out user-nopasswd.key

これは理想的ではありませんが、うまくいくようです。

2
AEE

Httpsでapt-getを実行しようとしたときに遭遇した問題の1つは、SslCertオプションでは。pemファイルを使用できないため、apt-getが失敗することでした。これをリポジトリへの接続で使用する有効な形式として認識します。 Webサーバーへの接続に使用する自己署名の.pemがあります。これは.pem形式であるため、使用しようとしました。

解決策は、.pemを.crtと.keyの正しいファイルに分割し、apt-getを正常に接続することでした。

TLDR:あなたの。pemファイルを。crt。keyに分割すれば動作します。

0
ihatecache