ARCHIVESDRIVE HB

オイラはホームベーカリー!

CentOS5 以前ではもう github に接続できない

書こうと思ってて忘れてたやつ。

Github に接続できない

github にリクエストを送るとこうなる。

[user@oldhost ~]$ ssh -T git@github.com
no kex alg

古いアルゴリズムがサポートされなくなった

githubengineering.com

github 君は「前々から告知してたよなぁ……?」という体で、それは正しいんじゃがワイも「気付いてなかった、そんなの……」状態であった。

具体的にどうなのか

これだけだとよくわかんねぇな?ってなると思いますが、要は CentOS5 以前の環境では OpenSSL が古いので、新しい TLS をサポートしてなく、 github と通信できなくなりました。 CentOS6 も OpenSSL をアップデートしてないと多分通信できません。最新版まで上げてあれば大丈夫。 OpenSSL 1.0.0 のいくつ位があれば大丈夫だったかは失念しましたね……。

確認方法

以下のようにコマンド叩いて、 error が返って来なければ大丈夫です。

オッケーなパターンもだいぶ OpenSSL 古くないか?!ってご指摘があるかと思いますが、手元の検証用環境なんで許してクレメンス。

CentOS 5 + OpenSSL 0.9.8l

だめなパターン

[USER@localhost ~]$ openssl version
OpenSSL 0.9.8l 5 Nov 2009

[USER@localhost ~]$ openssl s_client -connect github.com:443
CONNECTED(00000003)
24290:error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version:s3_pkt.c:1061:SSL alert number 70
24290:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:530:

CentOS 6 + OpenSSL 1.0.1e-fips

オッケーなパターン

[USER@localhost ~]$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

[USER@localhost ~]$ openssl s_client -connect github.com:443
CONNECTED(00000003)
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, 1.3.6.1.4.1.311.60.2.1.3 = US, 1.3.6.1.4.1.311.60.2.1.2 = Delaware, serialNumber = 5157550, C = US, ST = California, L = San Francisco, O = "GitHub, Inc.", CN = github.com
verify return:1

# snip #

どうする

OpenSSL をアップデートするか、環境を投げ捨てるのが一番です。

とはいえそうそうすぐに捨てられない人もいるでしょう。 その場合は、自分のローカルに適応したい環境と同じプロジェクトを持っておき、毎回差分のあるファイルを zip なりで scp するのが良いでしょう。 rsync も考えたけど、本番とローカルじゃ多分値変わるからね……。