OS X Yosemite の MacBook Pro で bitbucket から `git pull` しても `SSL peer handshake failed, the server most likely requires a client certificate to connect` のエラーが出て出来なくなった
OS X Yosemite の MacBook Pro で bitbucket から git pull
しても SSL peer handshake failed, the server most likely requires a client certificate to connect
のエラーが出て出来なくなった。
8月終わりくらいに急に。
それまでは普通に git pull
も git push
も出来てた。
ざっくりググったりして思いつく限りでは以下の対処法がありそうだった。
- OS の
El Capitan
以上へのアップグレード。- 技術的な難易度で言えば一番簡単だが、環境が大幅に変わるので、他の利用アプリケーションとの兼ね合いで、ちょっと抵抗感があった。
git
のconfig
でSSL
を利用しないように設定する。- 作業としては難しくはなさそうだが、セキュリティー的に抵抗感があった。
- 実際やってみても解決できなかった。
git
の SSL認証が成功するように設定等を適切に設定する。- そこそこググったり試みたりしたが、解決には深い理解と試行錯誤が必要そうで無理だと判断した。
結局は OS を High Sierra にアップグレードして git pull
も git push
もできるようになった。
以下、色々ググったり、やってみたメモ。
エラーはこんな表示。
$ git pull fatal: unable to access 'https://hoge@bitbucket.org/hoge/hoge.git/': SSL peer handshake failed, the server most likely requires a client certificate to connect
Google翻訳すると
SSLピアハンドシェイクが失敗しました。サーバーは接続するためにクライアント証明書を必要とする可能性が高いです
別の High Sierra と El Capitan の Mac では特に問題なく git pull
できる。
OSをアップグレードすれば解決するかもしれないが、もう少し試してみた。
試しに Homebrew で git
のバージョンを 2.28.0
にアップグレードしてパスを通してみてもエラーは出る。
Google Chrome(バージョン: 84.0.4147.135(Official Build) (64 ビット)) で https://bitbucket.org
に接続してもページは開けるが、Sarafi(バージョン 10.1.2 (10603.3.8)) で https://bitbucket.org
に接続してもページを開けない。
Sarafi のエラー表示は以下のような感じ。
ページを開けません ページ“https://bitbucket.org”を開けません。サーバ“bitbucket.org”にセキュリティ保護された接続を確立できません。
別の High Sierra の Mac では特に問題なく Sarafi(バージョン13.1.2 (13609.3.5.1.5)) で https://bitbucket.org
に接続して開ける。
を読むと
Mac を使っているなら、Git の “osxkeychain” モードが使えます。これを使うと、OS のキーチェーン(システムアカウントと紐づく)に認証情報がキャッシュされます。 このモードでも認証情報がディスクに保存され、有効期限切れもありません。ただし先ほどとは違い、保存内容は暗号化(HTTPS 証明書や Safari の自動入力の暗号化と同じ仕組み)されます。
とのこと。
キーチェーンアクセスで「パスワード」の bitbucket.org
を開いて「アクセス制御」を開いてみると「これらのアプリケーションによるアクセスを常に許可」の欄に「git-credential-osxkeychain」がある。
git
→ git-credential-osxkeychain
→ キーチェーンアクセス
の流れで認証するはずだが OS レベルで bitbucket.org
を開けないのでこけてる?
GitHubへのgit clone/pull/push時にSSL証明書まわりでエラーが出るときの本当に正しい対処法 - Qiita
を読んで試しに openssl
で bitbucket.org
を開いて見る。
443はSSLで使うポートらしい。
$ openssl s_client -connect bitbucket.org:443
実行結果を見てみても問題ないように見えるがよくわからない。
CONNECTED(00000006) depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA verify return:1 depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 Extended Validation Server CA verify return:1 depth=0 businessCategory = Private Organization, jurisdictionC = US, jurisdictionST = Delaware, serialNumber = 3928449, C = US, ST = California, L = San Francisco, O = "Atlassian, Inc.", OU = Bitbucket, CN = bitbucket.org verify return:1 --- Certificate chain 0 s:businessCategory = Private Organization, jurisdictionC = US, jurisdictionST = Delaware, serialNumber = 3928449, C = US, ST = California, L = San Francisco, O = "Atlassian, Inc.", OU = Bitbucket, CN = bitbucket.org i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 Extended Validation Server CA 1 s:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 Extended Validation Server CA i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA --- Server certificate -----BEGIN CERTIFICATE----- 中略 -----END CERTIFICATE----- subject=businessCategory = Private Organization, jurisdictionC = US, jurisdictionST = Delaware, serialNumber = 3928449, C = US, ST = California, L = San Francisco, O = "Atlassian, Inc.", OU = Bitbucket, CN = bitbucket.org issuer=C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 Extended Validation Server CA --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: ECDSA Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 3367 bytes and written 727 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256 Server public key is 256 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_128_GCM_SHA256 Session-ID: 中略 Session-ID-ctx: Resumption PSK: 中略 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 14400 (seconds) TLS session ticket: 中略 Start Time: 中略 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no Max Early Data: 0 --- read R BLOCK read:errno=0
あとは下記コマンド実行して、情報が冗長に表示されるようにして git pull
を実行してみてもあまり情報量は変わらない。
export GIT_CURL_VERBOSE=1
* Couldn't find host bitbucket.org in the .netrc file; using defaults * Trying 2406:da00:ff00::22c0:3470... * Connected to bitbucket.org (2406:da00:ff00::22c0:3470) port 443 (#0) * SSL peer handshake failed, the server most likely requires a client certificate to connect * Closing connection 0 fatal: unable to access 'https://hoge@bitbucket.org/hoge/hoge.git/': SSL peer handshake failed, the server most likely requires a client certificate to connect
Google Chrome で bitbucket.org
を開いて、URLの欄からダウンロードした bitbucket.org
の証明書を見ると楕円曲線暗号を使用している模様。
Yosemite のキーチェーンアクセスでは楕円曲線暗号に対応していない?との疑念が湧く。
とりあえず、
git clone 時に SSL証明書エラー が出た時の対処方 ~SSL certificate problem: Invalid certificate chain~ - Qiita
を参考に、
$ git config --global http.sslVerify false
を実行するか
[http] sslVerify = false
を .gitconfig
に追加するとSSL証明をoffにできるらしい。
globalに設定するのは抵抗があるので、とりあえず、ローカルの .git/config
に追記してみる。
ローカルの .git/config
に追記してもエラーは出る。
config
の設定を下記コマンドで見てみても何が悪いのかわからない。
git config --global -l git config --local -l
を読んで下記の項目等いじってみたが具体的な解決は難しそう。
GIT_TRACE_PACKET=1 GIT_CURL_VERBOSE GIT_SSL_NO_VERIFY GIT_TRACE=true GIT_TRACE_PACKET=true GIT_TRACE_SETUP=true
最終的には起動ディスクをまるごとバックアップとってOSを High Sierra
にアップグレードしたところ、Safari による https://bitbucket.org
への接続も git pull
も git push
もできるようになった。
参考ページ:
- TLS/SSL handshake の失敗 | Apigee ドキュメント | Apigee Docs
- 【GitLab】SSH接続をテストする - Qiita
- /source/gitrepo.html
- <タイトル無し>
- <タイトル無し>
- DevOps Server / Team Foundation Server でリポジトリの複製で "SSL certificate problem: unable to get local issuer certificate" が発生しリポジトリにアクセスできない
- Git - 認証情報の保存
- git — git credential-osxkeychainを無効にします
- git — GithubのみのSSL証明書の追加(ca-certificatesパッケージのすべての証明書ではない)
- Git - git-config Documentation
- Git - gitcredentials Documentation
- git clone 時に SSL証明書エラー が出た時の対処方 ~SSL certificate problem: Invalid certificate chain~ - Qiita
- Git ssl 証明 書 | Media Files Forums
- Git コマンドラインの認証で macOS のキーチェーンを利用する - bits and bobs
- Git リポジトリで恒久的に認証する - アトラシアン製品ドキュメント
- git を https 経由で使うときのパスワードを保存する - Qiita
- git-credential-osxkeychain - Macのgitでhttp接続のパスワードを安全に管理する - ソフトアンテナブログ
- GitHubにおけるSSLの認証エラーを回避するため、EV SSL用ルート証明書を追加する - 祈れ、そして働け ~ Ora et labora
- GitHubへのgit clone/pull/push時にSSL証明書まわりでエラーが出るときの本当に正しい対処法 - Qiita
- Gitサーバにプッシュするときに無効なSSL証明書
- Gitの設定をgit configで確認・変更 | note.nkmk.me
- Mac OS X にインストールされているルート証明書の確認方法 | Webセキュリティの小部屋
- macos — 「git credential-osxkeychain」に保存されている資格情報をリセットするにはどうすればよいですか?
- MacからGithubやBitbucketにアクセス出来なくなった現象と解決方法 | NeGiMeMo.net
- Macでgitのcredential.helper=osxkeychainにアアアアアッてなって削除した話 - ロップップ
- Macでキーチェーンアクセスを使用してキーチェーン項目を読み込む/書き出す - Apple サポート
- Macのキーチェーンアクセスで識別プリファレンスを作成する - Apple サポート
- Macのキーチェーンに保存されている情報を表示する - Apple サポート
- OpenSSLライブラリの「信頼する認証局の証明書」ファイルの場所はどうやって決まるのか – StupidDog's blog
- OSX キーチェーンから認証情報を更新する - GitHub Docs
- Safari(Mac版) - cybozu.com ヘルプ
- SourceTree + Bitbucketで認証エラーが出る場合の対処方法 on Windows | TeraDas
- SSLクライアント認証が必要なGitリポジトリをクローンする - 死ぬまでの暇潰し
- SSLクライアント認証が必要なGitリポジトリをクローンする – NyankoJP
- SSLのエラーのトラブルシューティング - GitHub ヘルプ
- Support for TLS Client Certificates (#1291) · Issues · GitLab.org / gitlab-runner · GitLab
- Using git with https client certificate ~ Wakoond
- Your browser's TLS/HTTP Connection info.
- ブラウザ毎のTLS実装の違いについて - Apache 2.4系でHTTP/2対応サーバを構築してみるテスト。
- 暗号技術勉強メモ - Qiita
- 製品にアクセスする | サイボウズ リモートサービス
- 楕円曲線DSA - Wikipedia
- 秘密鍵から公開鍵を生成するアルゴリズム「楕円曲線暗号」