ぼんやりDTP

DTPに関係したりしなかったりするぼんやりとした話をなんとなく。

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 pullgit push も出来てた。

ざっくりググったりして思いつく限りでは以下の対処法がありそうだった。

  1. OS の El Capitan 以上へのアップグレード。
    1. 技術的な難易度で言えば一番簡単だが、環境が大幅に変わるので、他の利用アプリケーションとの兼ね合いで、ちょっと抵抗感があった。
  2. gitconfigSSL を利用しないように設定する。
    1. 作業としては難しくはなさそうだが、セキュリティー的に抵抗感があった。
    2. 実際やってみても解決できなかった。
  3. gitSSL認証が成功するように設定等を適切に設定する。
    1. そこそこググったり試みたりしたが、解決には深い理解と試行錯誤が必要そうで無理だと判断した。

結局は OS を High Sierra にアップグレードして git pullgit 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 SierraEl CapitanMac では特に問題なく 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 SierraMac では特に問題なく Sarafi(バージョン13.1.2 (13609.3.5.1.5)) で https://bitbucket.org に接続して開ける。

Git - 認証情報の保存

を読むと

Mac を使っているなら、Git の “osxkeychain” モードが使えます。これを使うと、OS のキーチェーン(システムアカウントと紐づく)に認証情報がキャッシュされます。 このモードでも認証情報がディスクに保存され、有効期限切れもありません。ただし先ほどとは違い、保存内容は暗号化(HTTPS 証明書や Safari の自動入力の暗号化と同じ仕組み)されます。

とのこと。

キーチェーンアクセスで「パスワード」の bitbucket.org を開いて「アクセス制御」を開いてみると「これらのアプリケーションによるアクセスを常に許可」の欄に「git-credential-osxkeychain」がある。

gitgit-credential-osxkeychainキーチェーンアクセス の流れで認証するはずだが OS レベルで bitbucket.org を開けないのでこけてる?

GitHubへのgit clone/pull/push時にSSL証明書まわりでエラーが出るときの本当に正しい対処法 - Qiita

を読んで試しに opensslbitbucket.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 Chromebitbucket.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 - Environment Variables

を読んで下記の項目等いじってみたが具体的な解決は難しそう。

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 pullgit push もできるようになった。

参考ページ:

  1. TLS/SSL handshake の失敗  |  Apigee ドキュメント  |  Apigee Docs
  2. 【GitLab】SSH接続をテストする - Qiita
  3. /source/gitrepo.html
  4. <タイトル無し>
  5. <タイトル無し>
  6. DevOps Server / Team Foundation Server でリポジトリの複製で "SSL certificate problem: unable to get local issuer certificate" が発生しリポジトリにアクセスできない
  7. Git - 認証情報の保存
  8. git — git credential-osxkeychainを無効にします
  9. git — GithubのみのSSL証明書の追加(ca-certificatesパッケージのすべての証明書ではない)
  10. Git - git-config Documentation
  11. Git - gitcredentials Documentation
  12. git clone 時に SSL証明書エラー が出た時の対処方 ~SSL certificate problem: Invalid certificate chain~ - Qiita
  13. Git ssl 証明 書 | Media Files Forums
  14. Git コマンドラインの認証で macOS のキーチェーンを利用する - bits and bobs
  15. Git リポジトリで恒久的に認証する - アトラシアン製品ドキュメント
  16. git を https 経由で使うときのパスワードを保存する - Qiita
  17. git-credential-osxkeychain - Macのgitでhttp接続のパスワードを安全に管理する - ソフトアンテナブログ
  18. GitHubにおけるSSLの認証エラーを回避するため、EV SSL用ルート証明書を追加する - 祈れ、そして働け ~ Ora et labora
  19. GitHubへのgit clone/pull/push時にSSL証明書まわりでエラーが出るときの本当に正しい対処法 - Qiita
  20. Gitサーバにプッシュするときに無効なSSL証明書
  21. Gitの設定をgit configで確認・変更 | note.nkmk.me
  22. Mac OS X にインストールされているルート証明書の確認方法 | Webセキュリティの小部屋
  23. macos — 「git credential-osxkeychain」に保存されている資格情報をリセットするにはどうすればよいですか?
  24. MacからGithubやBitbucketにアクセス出来なくなった現象と解決方法 | NeGiMeMo.net
  25. Macでgitのcredential.helper=osxkeychainにアアアアアッてなって削除した話 - ロップップ
  26. Macでキーチェーンアクセスを使用してキーチェーン項目を読み込む/書き出す - Apple サポート
  27. Macのキーチェーンアクセスで識別プリファレンスを作成する - Apple サポート
  28. Macのキーチェーンに保存されている情報を表示する - Apple サポート
  29. OpenSSLライブラリの「信頼する認証局の証明書」ファイルの場所はどうやって決まるのか – StupidDog's blog
  30. OSX キーチェーンから認証情報を更新する - GitHub Docs
  31. Safari(Mac版) - cybozu.com ヘルプ
  32. SourceTree + Bitbucketで認証エラーが出る場合の対処方法 on Windows | TeraDas
  33. SSLクライアント認証が必要なGitリポジトリをクローンする - 死ぬまでの暇潰し
  34. SSLクライアント認証が必要なGitリポジトリをクローンする – NyankoJP
  35. SSLのエラーのトラブルシューティング - GitHub ヘルプ
  36. Support for TLS Client Certificates (#1291) · Issues · GitLab.org / gitlab-runner · GitLab
  37. Using git with https client certificate ~ Wakoond
  38. Your browser's TLS/HTTP Connection info.
  39. ブラウザ毎のTLS実装の違いについて - Apache 2.4系でHTTP/2対応サーバを構築してみるテスト。
  40. 暗号技術勉強メモ - Qiita
  41. 製品にアクセスする | サイボウズ リモートサービス
  42. 楕円曲線DSA - Wikipedia
  43. 秘密鍵から公開鍵を生成するアルゴリズム「楕円曲線暗号」