回答:
TLDR:
hostname=XXX
port=443
trust_cert_file_location=`curl-config --ca`
sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port -servername $hostname \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
>> $trust_cert_file_location"
長い答え
基本的な理由は、Gitlabサーバーで使用される証明書に署名した認証局をコンピューターが信頼していないためです。これは、証明書が疑わしいという意味ではありませんが、自己署名されているか、OSのCAのリストにない機関/会社によって署名されている可能性があります。コンピューターの問題を回避するために必要なことは、その証明書を信頼するように指示することです-疑わしい理由がない場合。
gitLabサーバーで使用されているウェブ証明書を確認し、それをに追加する必要があります</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では失敗する」またはこのブログ投稿で説明されているように、これはテスト専用です。
GitLabの設定を確認します(問題4427)。
(curl-ca-bundle.crt
ファイルに追加する必要がある)証明書を取得するには、次のように入力します。
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGitlabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
( ' yourserver.com
'はGitLabサーバー名でYourHttpsGitlabPort
、通常はhttpsポートです443
)
CA(認証局発行者)を確認するには、次のように入力します。
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGilabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
| openssl x509 -noout -text | grep "CA Issuers" | head -1
注:Valeriy Katkov はコメントで-servername
opensslコマンドにオプションを追加することを提案しています。そうでない場合、Valeriyの場合、コマンドはwww.github.comの証明書を表示しません。
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
の場所を特定するには
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
which git
。
curl-config --ca
が何も返されなかった。
注:これには、セキュリティ上の大きな影響があります。
端末を開き、次のコマンドを実行します。
export GIT_SSL_NO_VERIFY=1
それは私のために動作し、私はLinuxシステムを使用しています。
git config --global http.sslverify false
この問題のもう1つの原因は、時計がずれている可能性があります。証明書は時間に敏感です。
現在のシステム時刻を確認するには:
date -R
NTPをインストールして、システム時刻をグローバルNTPプールの信頼できるインターネットタイムサーバーと自動的に同期することを検討してください。たとえば、Debian / Ubuntuにインストールするには:
apt-get install ntp
git
言うまでもありません、それは根本的なSSL交換です。GitはSSLサポートを使用して構築されています。
同じ問題がありました。自己発行の認証局が原因です。.pemファイルを/ usr / local / share / ca-certificates /に追加 して呼び出すことで解決しました
sudo update-ca-certificates
PS:./share/ca-certificatesフォルダー内のpemファイルには拡張子.crtが必要です
システムクロックを確認します。
$ date
正しくない場合、証明書チェックは失敗します。システムクロックを修正するには、
$ apt-get install ntp
時計はそれ自体を同期させる必要があります。
最後に、もう一度cloneコマンドを入力します。
または、次のコメントを実行して、サーバー証明書をデータベースに追加します。
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を実行します。
goagentプロキシをセットアップしているときに、CAファイルをめちゃくちゃにしました。githubからデータをプルできず、同じ警告が表示されます:
サーバー証明書の検証に失敗しました。CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile:なし
Voncの方法を使用し、githubから証明書を取得して、/ etc / ssl / certs / ca-certificates.crtに配置します。問題は解決しました。
エコー-n | openssl s_client -showcerts -connect github.com:443 2> / dev / null | sed -ne '/ -BEGIN CERTIFICATE-/、/-END CERTIFICATE- / p'
git ssl validationをfalseに設定する必要はありません。これは、システムにすべてのCA権限証明書がない場合に発生します。ほとんどの場合、本物のSSL証明書を持っている人が中間証明書を失っています。
中間証明書の完全なテキスト(欠落しているCAおよび中間証明書のチェーン全体)を追加するだけ
sudo gedit /etc/ssl/certs/ca-certificates.crt
を実行せずに動作しupdate-ca-certificates
ます。
手動で生成した証明書についても同様です。CA証明書のテキストを追加するだけです。
最後に:プッシュ成功:すべてが最新です
ターミナル(Ubuntu 18.04)でこの問題を解決するために私がしたこと:
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
証明書チャンクを2つ取得しました。そして、証明書チャンクを私の証明書ファイルにコピーしました/etc/ssl/certs/ca-certificates.crt
。
---BEGIN CERTIFICATE---
と--- END CERTIFICATE ---
?
XubuntuをRaspberry pi 2にインストールしましたが、NTPと自動サーバー同期がオフ(またはインストールされていない)だったため、時間の経過とともに同じ問題が見つかりました。NTPを取得
sudo apt-get install ntp
そして、「時刻と日付」を「手動」から「インターネットサーバーと常に同期」に変更します
最終的に、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
git config http.sslVerify false
。@ romain-vdkによって提案されたグローバルではなく、リポジトリごとにGit構成を編集することを提案していますか?
最初に確認する必要があるのは、/etc/ssl
およびのファイル権限です/etc/ssl/certs
。
Certificate Authority Management Toolで作業しているrm -rf /etc/ssl/*
ときにssl-cert
グループ名/ IDを使用すると、ファイルのアクセス権を削除する(またはSSL ディレクトリを削除する)ミスを犯しました。
次に、wget
とcurl
CLIブラウザツールのまったく同じエラーメッセージに気づきました。
server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
私が持ったら/etc/ssl
と/etc/ssl/cert
にディレクトリファイルパーミッションをo+rx-w
少し簡単に息を開始し、それらのCLIブラウザのツール、:
mkdir -p /etc/ssl/certs
chmod u+rwx,go+rx /etc/ssl /etc/ssl/certs
また、Javaサブディレクトリを再作成し、信頼できるCA証明書ディレクトリを再構築する必要がありました。
mkdir /etc/ssl/certs/java
chmod u+rwx,go+rx /etc/ssl/certs/java
update-ca-certificates
そして海岸は澄んでいた。
curl-config --ca
はを返しまし/etc/ssl/certs/ca-certificates.crt
たが、ここに証明書を追加する必要がありました。それとは別に、この回答は、この問題について私を正しい方向に向ける最初の情報でした