書こうと思ってて忘れてたやつ。
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 も考えたけど、本番とローカルじゃ多分値変わるからね……。