1. ホーム
  2. ギット

[解決済み】ファイアウォール越しにHTTPSでGitHubにアクセスしようとすると、SSL証明書が拒否される。

2022-03-24 05:25:28

質問

ファイアウォールに囲まれているため、GitHub のリポジトリにアクセスするには HTTPS を使用する必要があります。Windows XPでcygwin 1.7.7を使用しています。

リモートを https://[email protected]/username/ExcelANT.git しかし、パスワードの入力を求めるプロンプトが表示され、入力しても何もしてくれません。 https://username:<password>github.com/username/ExcelANT.git というメッセージが表示され、ゼロから空のレポをクローンしても、毎回同じエラーになります。

のエラーが発生しました。SSL 証明書の問題です。CA 証明書が問題ないことを確認してください。詳細はこちら

error:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:アクセス中に証明書の検証に失敗しました。 https://github.com/username/ExcelANT.git/info/refs

オンにする GIT_CURL_VERBOSE=1 を得ることができます。

* github.com ポート 443 に connect() しようとしています (#0)

* 207.97.227.239を試しています... * 証明書の検証場所の設定に成功しました。

* CAfile: なし

CApath: /usr/ssl/certs

* SSL証明書の問題で、CA証明書が問題ないことを確認します。詳細はこちら

error:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書の検証は失敗しました。

* 有効期限切れ

* コネクション#0をクローズする

* github.com ポート 443 に connect() するところです (#0)

* 207.97.227.239を試しています... * 証明書の検証場所の設定に成功しました。

* CAfile: なし

CApath: /usr/ssl/certs

* SSL証明書の問題で、CA証明書が問題ないことを確認します。詳細はこちら

error:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:証明書の検証は失敗しました。

* 有効期限切れ

* コネクション#0をクローズする

のエラーが発生しました。SSL証明書に問題があります、CA証明書が問題ないことを確認してください。詳細はこちら

error:14090086:SSLルーチン:SSL3_GET_SERVER_CERTIFICATE:アクセス中に証明書の検証に失敗しました。 https://github.com/username/ExcelANT.git/info/refs

fatal: HTTP request failed

ファイアウォールやCygwinの問題なのか、それとも何なのか?

Gitの設定にHTTPプロキシを設定していなかったのですが、ISAサーバーでBasic認証ではなくNTLM認証が必要でした。

解決方法は?

証明書の問題を解決したいのであれば、この回答は読み飛ばしていただいて結構です。この回答は、ファイアウォールを通した ssh のトンネリングを扱っています。これは、ファイアウォールやプロキシを扱うより良い解決方法だと思います。

httpアクセスよりも良い方法があります。それは、githubが提供しているsshサービスをssh.github.comサーバーの443番ポートで使用することです。

corkscrewというツールを使っています。これは、CygWin (cygwinのホームページからセットアップ) と Linux の両方で、お好みのパッケージングツールを使って利用することができます。MacOSXでは、少なくともmacportsとbrewから入手可能です。

コマンドラインは以下の通りです。

$ corkscrew <proxyhost> <proxyport> <targethost> <targetport> <authfile>

proxyhostとproxyportは、httpsのプロキシの座標です。targethostとtargetportはトンネルを掘るホストの位置です。authfileは、プロキシサーバのユーザ名/パスワードをコロンで区切って1行で記述したテキストファイルです。

abc:very_secret

git 通信に通常の ssh プロトコルを使用するためのインストールです。

これを ~/.ssh/config このトリックは、通常のssh接続に使用することができます。

Host github.com
  HostName ssh.github.com
  Port 443
  User git
  ProxyCommand corkscrew <proxyhost> <proxyport> %h %p ~/.ssh/proxy_auth

これで、gitproxy に ssh で接続して動作を確認することができます。

pti@pti-laptop:~$ ssh github.com
PTY allocation request failed on channel 0
Hi ptillemans! You've successfully authenticated, but GitHub does not provide shell access.
       Connection to github.com closed.
pti@pti-laptop:~$

(注意:githubにログインしたことがない場合、sshはknown hostsファイルにサーバの鍵を追加するように要求してきます。もしあなたが偏執狂なら、鍵をアップロードしたgithubサイトに表示されているRSAフィンガープリントを確認することをお勧めします)。

この方法を少し変形させたのが、別の鍵でリポジトリにアクセスする必要がある場合です。例えば、プライベートアカウントとプロフェッショナルアカウントを分離する場合です。

# 
# account dedicated for the ACME private github account 
#
Host acme.github.com
  User git
  HostName ssh.github.com
  Port 443
  ProxyCommand corkscrew <proxyhost> <3128> %h %p ~/.ssh/proxy_auth
  IdentityFile ~/.ssh/id_dsa_acme

エンジョイ!

私たちはもう何年もLinux、Mac、Windowsの両方でこれを使用しています。

もし、あなたが望むなら 詳しくはこちらのブログ記事をご覧ください。