Sshを使ってクローンプロジェクトでプッシュすることはできますが、httpsを使ってプロジェクトをクローンするとうまくいきません。以下のようにメッセージエラーを表示します。
server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
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
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
注: これには major のセキュリティ上の影響があります。
端末を開き、次のコマンドを実行してください。
export GIT_SSL_NO_VERIFY=1
それは私のために動作し、私はLinuxシステムを使用しています。
この問題のもう一つの原因はあなたの時計がオフになっていることかもしれません。証明書は時間に敏感です。
現在のシステム時刻を確認するには
date -R
global NTP pool から信頼できるインターネットタイムサーバーとシステム時刻を自動的に同期させるには、 _ ntp _ をインストールすることを検討してください。例えば、Debian/Ubuntuにインストールするには:
apt-get install ntp
プライベートネットワーク内でgitサーバーを使用していて、自己署名証明書またはIPアドレスを介した証明書を使用している場合。 sslチェックを無効にするためにgitグローバル設定を使うこともできます。
git config --global http.sslverify "false"
同じ問題がありました。自己発行の認証局によって引き起こされます。 .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 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'
git ssl verificationをfalseに設定する必要はありません。システムにすべてのCA認証局証明書がない場合に発生します。本物のSSL証明書を持っている人のほとんどが中間証明書を失っています。
中間証明書の全文(欠けているCAと中間証明書の全連鎖)を
Sudo gedit /etc/ssl/certs/ca-certificates.crt
update-ca-certificates
を実行せずに動作します。
手動で生成された証明書についても同様です。単にCA証明書のテキストを追加してください。
最後に:成功したプッシュ:すべてが最新である
私はRaspberry Pi 2にXubuntuをインストールしましたが、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
ターミナルでこの問題を解決するために私がしたこと(Ubuntu 18.04):
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
証明書チャンクのチャンクを2つ受け取りました。そして、証明書のチャンクを証明書ファイルに/etc/ssl/certs/ca-certificates.crt
にコピーしました。
私はいつも同じように動作するgitリポジトリと全く同じ問題に遭遇しました。問題は、最初の接続時にキャプティブポータルにリダイレクトするパブリックWiFiアクセスを通じてアクセスしたことです(たとえば、広告を表示してtosに同意するなど)。
証明書とバンドルを1つの.crtファイルにコピーし、ファイル内の証明書の間に空白行があることを確認します。
これは、インターネットですべてを試した後、GitLabサーバーで機能しました。