web-dev-qa-db-ja.com

/etc/ssl/certs/ca-certificates.crtのパーミッションの問題

通常のユーザーとしてHTTPSでcurlまたはgit cloneを試みると、次のエラーで失敗します。

fatal: unable to access 'https://github.com/mikemackintosh/xxx/': Problem with the SSL CA cert (path? access rights?)

:rootとしてコマンドを実行する場合、それは正常に動作しますが、sslを介して通信できるユーザーはrootだけではいけません。

だから、私は自分自身に、カールが舞台裏で何をしているのかと思います:

$ GIT_CURL_VERBOSE=1 git clone https://github.com/mikemackintosh/xxx
Cloning into 'xxx'...
* Couldn't find Host github.com in the .netrc file; using defaults
* Hostname was NOT found in DNS cache
*   Trying 192.30.252.130...
* Connected to github.com (192.30.252.130) port 443 (#0)
* error reading ca cert file /etc/ssl/certs/ca-certificates.crt (Error while reading file.)
* Closing connection 0
fatal: unable to access 'https://github.com/mikemackintosh/xxx/': Problem with the SSL CA cert (path? access rights?)

その結果、ca-certificateファイルが/etc/ssl/certs/ca-certificates.crtであることを確認できます。これはcurl-config -ca出力と一致します。

次のステップは、ファイルの試行と読み取りです。単なる昔ながらの非rootユーザーとして:

$ cat /etc/ssl/certs/ca-certificates.crt
cat: /etc/ssl/certs/ca-certificates.crt: Permission denied

今では奇妙に思えます。

$ Sudo ls -la /etc/ssl/certs/ca-certificates.crt
-rw-r--r-- 1 root root 273790 Jun 15 22:35 /etc/ssl/certs/ca-certificates.crt

$ Sudo lsattr /etc/ssl/certs/ca-certificates.crt
-------------e-- /etc/ssl/certs/ca-certificates.crt

そのため、アクセス許可を見ると、誰でも読み取り可能です。問題なくアクセスできるはずです。アクセスを妨げるクレイジーな属性はありません。

ls -la /etc/ssl/certs/を実行すると、以下が返されます。

...
l????????? ? ? ? ?            ? Verisign_Class_4_Public_Primary_Certification_Authority_-_G3.pem
l????????? ? ? ? ?            ? VeriSign_Universal_Root_Certification_Authority.pem
l????????? ? ? ? ?            ? Visa_eCommerce_Root.pem
l????????? ? ? ? ?            ? WellsSecure_Public_Root_Certificate_Authority.pem
l????????? ? ? ? ?            ? WoSign_China.pem
l????????? ? ? ? ?            ? WoSign.pem
...

Sudo cat /etc/ssl/certs/ca-certificates.pemを実行すると、期待どおりに内容が吐き出されます。

ああ、これは確かに権限の問題です。

グーグルで調べてみると、ssl-certグループが存在することがわかりましたが、このグループには/etc/ssl/certsディレクトリに対する権限がありません。

Apparmorを除外し、ディスクの破損を除外しました。update-ca-certificates (w/wo -f)などを実行しても改善はありません。

誰もこの動作を見ましたか?

このようなものを見たことはありませんが、2台の別々のマシンで複製しました。注として、私はCentOS/RHELのバックグラウンドから来ているので、これはUbuntuの通常の動作かもしれませんが、本当の解決策を見つけたいです。

3
Mike Mackintosh

namei -mo /etc/ssl/certs/ca-certificates.crtを実行します。出力を次と一致させます。

f: /etc/ssl/certs/ca-certificates.crt
 drwxr-xr-x root root /
 drwxr-xr-x root root etc
 drwxr-xr-x root root ssl
 drwxr-xr-x root root certs
 -rw-r--r-- root root ca-certificates.crt

chmodおよびchownを使用して、すべてを正しい設定に戻すことができます。

  • Sudo chown root / && chown root /etc/ && chown root /etc/ssl/ && chown root /etc/ssl/certs/ && chown root /etc/ssl/certs/ca-certificates.crt
  • Sudo chmod 755 /
  • Sudo chmod 755 /etc/
  • Sudo chmod 755 /etc/ssl/
  • Sudo chmod 755 /etc/ssl/certs
  • Sudo chmod 644 /etc/ssl/certs/ca-certificates.crt
10
earthmeLon

今日、同じ問題に遭遇しました。ここに私がやったことがあります:

GIT_CURL_VERBOSE = 1 git clone https://github.com/robbyrussell/oh-my-zsh.git

これはcurl verboseモードでリポジトリを複製します(curlは現在問題を引き起こしています)

ここに私が得たものがあります

Cloning into 'oh-my-zsh'...
* Couldn't find Host github.com in the .netrc file; using defaults
* Hostname was NOT found in DNS cache
*   Trying 192.30.252.131...
* Connected to github.com (192.30.252.131) port 443 (#0)
* error reading ca cert file /bin/curl-ca-bundle.crt (Error while reading file.)
* Closing connection 0
fatal: unable to access 'https://github.com/robbyrussell/oh-my-zsh.git/': Problem with the SSL CA cert (path? access rights?)

次の行に注意してください。

  • cA証明書ファイル/bin/curl-ca-bundle.crtの読み取りエラー(ファイルの読み取り中にエラーが発生しました。)

~/.gitconfig[HTTP]->sslCAinfoセクションに設定の問題がありました。同じ問題はないかもしれませんが、自分でデバッグするのに十分な情報が得られます。

4
VarunAgw

UNIXでは、パス全体がチェックされますので、私の意見では、パス内のフォルダにアクセス許可があるかどうかを確認する必要があります、少なくともrw-を持っている必要があり、パニックにならないでください、wは話している場合は書き込みを意味しませんフォルダについて... /a/b/c/certificate.pemがあり、「b」を過ぎて取得できない場合、bを超えて取得できないため:D

それが役に立てば幸い :)

2
IcyIcyIce

SSLベースのアプリケーションがSSL接続の信頼性を確認できるように、CA証明書を持っていることを確認してください。次の方法でインストールできます。

Sudo apt-get install ca-certificates openssl

これは、特にDockerまたはCIコンテナーで欠落している可能性があります。

お持ちの場合は、再インストールを検討してください。

Sudo update-ca-certificatesを実行することもできます。

関連する:

0
kenorb