1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOSアップデート後にghコマンドがTLSエラーで死んだ話(x509: OSStatus -26276)

1
Posted at

はじめに

こんにちは

新政水墨です。

突然ghコマンドで認証が切れてますとなったので解消法をご紹介します。
結論的にはMac OSをTahoeにアップデートしたのが原因のようでした。

TL;DR

macOSアップデート後、gh コマンドが急に動かなくなった。
curl は問題ないのに gh だけ失敗する場合、キーチェーンのCA信頼設定が原因の可能性が高い。


症状

ある朝突然、gh コマンドがすべてこのエラーで失敗するようになった。

$ gh pr view 123
Post "https://github.your-company.com/api/graphql": tls: failed to verify certificate: x509: OSStatus -26276

gh auth status を確認すると、こんな表示も。

$ gh auth status
github.your-company.com
  X Failed to log in to github.your-company.com account your-account (keyring)
  - The token in keyring is invalid.

「トークンが無効?パスワード変えたっけ?」と思って再ログインを試みるも、同じTLSエラーで失敗。


なぜ curl は動くのに gh だけ失敗するのか

$ curl https://github.your-company.com
# → 問題なく接続できる

$ gh pr view 123
# → TLSエラーで失敗

この違いは証明書の検証方法にある。

ツール 証明書の検証方法
curl /etc/ssl/cert.pem(OpenSSL/LibreSSL)
gh(Goバイナリ) macOS Security フレームワーク(キーチェーン)

gh は Go 製バイナリのため、macOS の Security フレームワークを通じてキーチェーンの信頼設定で証明書を検証する。そのため、curl では問題なくても gh だけ失敗するケースが起きる。


原因

macOS のアップデートによって、USERTrust RSA Certification Authority(Sectigo 証明書のルートCA)がキーチェーンで信頼されていない状態になっていた。

OSStatus -26276 は macOS Security フレームワークの errSecNotTrusted(証明書が信頼されていない)に対応するエラーコード。

「token invalid」は罠
gh auth status の「The token in keyring is invalid」はトークンの問題ではなく、TLSエラーで GitHub に接続できないため gh が検証失敗と誤判断していただけ。トークンを再発行しても解決しない。


解決方法

手順

  1. キーチェーンアクセスを開く

    • Spotlight(⌘ + Space)→「キーチェーンアクセス」と入力
  2. 検索ボックスに USERTrust と入力

  3. 「USERTrust RSA Certification Authority」をダブルクリック

  4. 「信頼」セクションを展開

  5. 「この証明書を使用するとき」を「常に信頼」に変更

  6. ウィンドウを閉じる → 管理者パスワードを入力して確定

  7. ターミナルを再起動して確認

$ gh auth status
github.your-company.com
  ✓ Logged in to github.your-company.com account your-account

補足

USERTrust ECC Certification Authority も同様に「常に信頼」にしておくと安心。


なぜ macOS アップデート後に起きるのか

macOS のセキュリティアップデートにより、一部ルートCAの信頼設定が「システムデフォルトを使用」にリセットされることがある。「システムデフォルト」では Apple が明示的に信頼リストに含めていない CA は検証できないため、Go の Security フレームワーク経由の TLS
検証が失敗する。

curl はキーチェーンを使わないため影響を受けない。


影響を受けるケース

同じ原因で gh 以外にも影響が出る可能性がある。

  • Go 製の CLI ツール全般(macOS Security フレームワークを使うもの)
  • GitHub Enterprise / GitLab などのオンプレミス環境(Sectigo 証明書を使っている場合)

まとめ

  • macOS アップデート後に gh が x509: OSStatus -26276 で失敗したら、キーチェーンのCA信頼設定を疑う
  • curl は動くのに gh だけ失敗する場合、OpenSSL とキーチェーンの違いが原因
  • gh auth status の「token invalid」は TLS エラーの誤検知の可能性あり
  • キーチェーンアクセスで USERTrust RSA CA を「常に信頼」にすれば解決
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?