web-dev-qa-db-ja.com

サーバー証明書の検証に失敗しました。 CAファイル:/etc/ssl/certs/ca-certificates.crt CRLファイル:なし

Sshを使ってクローンプロジェクトでプッシュすることはできますが、httpsを使ってプロジェクトをクローンするとうまくいきません。以下のようにメッセージエラーを表示します。

server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
261
Sokhom Ratanak

TLDR:

hostname=XXX
port=443
trust_cert_file_location=`curl-config --ca`

Sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port \
    2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'  \
    >> $trust_cert_file_location"

長答

基本的な理由は、コンピューターが、証明書に署名した認証局を信頼していないことです使用Gitlabサーバー上。これは、証明書が疑わしいことを意味するものではありませんが、自己署名またはOSのCAリストにない機関/会社によって署名されている可能性があります。コンピューター上の問題を回避するためにあなたがしなければならないことはその証明書を信頼するように言うことです-もしあなたがそれを疑う理由がないなら。

GitLabサーバーに使用されているWeb証明書を確認し、</git_installation_folder>/bin/curl-ca-bundle.crtに追加する必要があります。

少なくともクローンが機能するかどうかを確認するには、前述の証明書をチェックせずに、設定できます:

export GIT_SSL_NO_VERIFY=1
#or
git config --global http.sslverify false

ただし、「 SSLはブラウザ、wget、およびcurlで動作しますが、git で失敗します」またはこの ブログ投稿 に示されているように、テスト専用です。

issue 4272 のGitLab設定を確認してください。


その証明書(curl-ca-bundle.crtファイルに追加する必要がある証明書)を取得するには、次のように入力します。

echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

(「yourserver.com」はGitLabサーバー名です)

CA(認証局発行者)を確認するには、次を入力します。

echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
  | openssl x509 -noout -text | grep "CA Issuers" | head -1

注: Valeriy Katkov は、 コメント内 を提案して、opensslコマンドに-servernameオプションを追加します。そうしないと、コマンドはwww.github.comの証明書を表示しません。ヴァレリーの場合。

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

Findekano 追加 コメント内

curl-ca-bundle.crtの場所を識別するには、次のコマンドを使用できます

curl-config --ca

また、私の最近の答え「 github:サーバー証明書の検証に失敗しました 」を参照してください:これらの証明書を再リストする必要があるかもしれません:

Sudo apt-get install --reinstall ca-certificates
Sudo mkdir /usr/local/share/ca-certificates/cacert.org
Sudo wget -P /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt
Sudo update-ca-certificates
git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt
346
VonC

注: これには major のセキュリティ上の影響があります。

端末を開き、次のコマンドを実行してください。

export GIT_SSL_NO_VERIFY=1

それは私のために動作し、私はLinuxシステムを使用しています。

168
Afzal Masood

この問題のもう一つの原因はあなたの時計がオフになっていることかもしれません。証明書は時間に敏感です。

現在のシステム時刻を確認するには

date -R

global NTP pool から信頼できるインターネットタイムサーバーとシステム時刻を自動的に同期させるには、 _ ntp _ をインストールすることを検討してください。例えば、Debian/Ubuntuにインストールするには:

apt-get install ntp
125
davidthings

プライベートネットワーク内でgitサーバーを使用していて、自己署名証明書またはIPアドレスを介した証明書を使用している場合。 sslチェックを無効にするためにgitグローバル設定を使うこともできます。

git config --global http.sslverify "false"
44
Romain VDK

同じ問題がありました。自己発行の認証局によって引き起こされます。 .pemファイルを /usr/local/share/ca-certificates/ に追加して呼び出すことで解決しました。

Sudo update-ca-certificates

PS:フォルダ./share/ca-certificates内のpemファイルには、拡張子.crtが必要です。

41
Nikolay Ruban

システムクロックを確認してください。

$ date

正しくない場合、証明書の確認は失敗します。システムクロックを修正するには、

$ apt-get install ntp

時計は自動的に同期するはずです。

最後にcloneコマンドをもう一度入力してください。

30
mycowan
GIT_CURL_VERBOSE=1 git [clone|fetch]…

問題がどこにあるかあなたに言うべきです。私の場合は、NSSに対して構築されたときにcURLがPEM証明書をサポートしていないことが原因でした。そのサポートはNSSのメインラインではないためです( #726116#804215#402712およびもっと )。

21
Tobu

または単にこのコメントを実行して、サーバー証明書をデータベースに追加します。

echo $(echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort 2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p') >> /etc/ssl/certs/ca-certificates.crt

それからもう一度git cloneを実行してください。

15
phiphu

Goagent proxyをセットアップしている間に、CAファイルと混同しました。 githubからデータを取得できず、同じ警告が表示されます。

サーバー証明書の検証に失敗しました。 CAファイル:/etc/ssl/certs/ca-certificates.crt CRLファイル:なし

voncの方法を使い、githubから証明書を取得し、それを/etc/ssl/certs/ca-certificates.crtに入れてください。

echo -n | openssl s_client -showcerts -connect github.com:443 2>/dev/null | sed -ne '/ -BEGIN CERTIFICATE - /、/ - END CERTIFICATE-/p'

9
IFQ

git ssl verificationをfalseに設定する必要はありません。システムにすべてのCA認証局証明書がない場合に発生します。本物のSSL証明書を持っている人のほとんどが中間証明書を失っています。

中間証明書の全文(欠けているCAと中間証明書の全連鎖)を

Sudo gedit /etc/ssl/certs/ca-certificates.crt 

update-ca-certificatesを実行せずに動作します。

手動で生成された証明書についても同様です。単にCA証明書のテキストを追加してください。

最後に:成功したプッシュ:すべてが最新である

8
abcdef12

私はRaspberry Pi 2にXubuntuをインストールしましたが、NTPと自動サーバー同期がオフになっている(またはインストールされていない)のと同じ問題が発生しました。 NTPを入手

Sudo apt-get install ntp

そして、「時間と日付」を「手動」から「インターネットサーバーと同期し続ける」に変更します。

3
user273711

最終的に、http.sslverifyをあなたの.git/configに追加してください。

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "Origin"]
    url = https://server/user/project.git
    fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
    remote = Origin
    merge = refs/heads/master
[http]
        sslVerify = false
1
Mickael L

ターミナルでこの問題を解決するために私がしたこと(Ubuntu 18.04):

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

証明書チャンクのチャンクを2つ受け取りました。そして、証明書のチャンクを証明書ファイルに/etc/ssl/certs/ca-certificates.crtにコピーしました。

1
mindcoder

私はいつも同じように動作するgitリポジトリと全く同じ問題に遭遇しました。問題は、最初の接続時にキャプティブポータルにリダイレクトするパブリックWiFiアクセスを通じてアクセスしたことです(たとえば、広告を表示してtosに同意するなど)。

0
Tosha

証明書とバンドルを1つの.crtファイルにコピーし、ファイル内の証明書の間に空白行があることを確認します。

これは、インターネットですべてを試した後、GitLabサーバーで機能しました。

0
shambhu