CentOS5でGitの「Unknown SSL protocol error in connection to …」エラーに対応する
CentOS5.8でOpenSSL1.0.2、Curl7.53.1、git2.20.1とかをソースからビルドした話です。
あんまりサポート期限の切れたOSは使わずに、新しいの使いましょうね・・。
ということで、どうしても古いサーバ上で、元々動いていたgitを使えるようにしたいという要望が僕にもあったのでやむなく対応しました。
最近どこのサーバもTLS1.2でしかgitを使えなくなったこともあり、
export GIT_CURL_VERBOSE=1
export GIT_TRACE_PACKET=2
を環境変数に追加したあとにgit cloneすると、
Unknown SSL protocol error in connection to xxx.xxx.com:443
とか言われたつらい経験があると思います。
wgetした際に、
SSL による接続が確立できません
とか出る場合もだいたいopensslのバージョンが古くてtls1.2に対応してない場合が多いと思います。
yumでアップデートしようにも、もうサポート切れてるのでOpenSSLは0.9.8までだしgitも1.なんぼかまでしか上がらないしどうしよう・・。
というのに対応したときのログです。つまり、yum等のパッケージ管理ソフトは使わずにCentOS5.8にgitの最新版をインストールしました。
もしかしたらサーバの他の機能に影響あるかもしれませんが、そこには責任取りませんのでぶっつけ本番でやらないようにしてくださいね。
Table of Contents
Toggle前提条件など
- CentOS5.8 64bit
- それぞれのインストールフォルダは/usr/local/bin
- gccとかwgetとかはインストールしてる前提で
/usr/local/binとかは適宜読み替えてください。
目指すところ
CentOS5のマシンでgit cloneができるようにする
というところまでです。
CentOS5.8 64bitに
- OpenSSL 1.0.2q
- Curl 7.53.1
- Git 2.20.1
をインストールします。
1.OpenSSL 1.0.2qをソースからビルド
OpenSSLビルド、インストール
どこでもいいですが、ソースを置いておきたい場所でcdしてください。
cd ~/
ソースを取ってくる。openssl入ってない人向けか、httpでwgetさせてくれるなんて優しい。
wget http://www.openssl.org/source/openssl-1.0.2q.tar.gz --no-check-certificate
tar -xvf openssl-1.0.2q.tar.gz
cd openssl-1.0.2q
./config shared zlib enable-ssl2 enable-ssl3 --prefix=/usr/local/ --openssldir=/usr/local/
make depend
make
make install
ssl2、ssl3は念の為・・。
環境変数を追加
.bash_profileにPKG_CONFIG_PATHを追加。pkgconfigのpathを通す。
vi ~/.bash_profile
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
確認
openssl version
→これでバージョン1.0.2qが出たら成功。出なければ、一回ログオフしたらいいかも。
2.Curl 7.53.1をソースからビルド
Curlビルド、インストール
wget https://curl.haxx.se/download/curl-7.53.1.tar.gz
wgetの参照してるライブラリが古いOpenSSLになってて、
OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
SSL による接続が確立できません。
とかなんとか言われるかもしれないので、scpかなんかで持ってきてください。
tar -xvf curl-7.53.1.tar.gz
cd curl-7.53.1
./configure --enable-libcurl-option --prefix=/usr/local/ --with-ssl=/usr/local/
make
make install
確認
curl --version
→古いバージョン出てたら、一回ログオフしてください。
たぶん下のエラーが出ると思うので、
curl: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
find /usr -name "libssl.so.1.0.0"
で出てきたディレクトリをld.so.confに追加。
echo "/usr/local/lib64/" > /etc/ld.so.conf
ldconfig
curlのバージョンを確認
curl --version
curl 7.53.1 (x86_64-pc-linux-gnu) libcurl/7.53.1 OpenSSL/1.0.2q
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: Largefile NTLM NTLM_WB SSL TLS-SRP UnixSockets HTTPS-proxy
curl 7.53.1、OpenSSL/1.0.2qになってればOK。
3.Gitをソースからビルド、インストール
Gitビルド、インストール
一応、yumで入れた古いgitがあれば削除しておく。
yum remove git
2019年1月12日現在最新のバージョン2.20.1にしてみました。
wget https://github.com/git/git/archive/v2.20.1.tar.gz
wgetはできないかもね・・。
tar -xvf git-2.20.1.tar.gz
cd git-2.20.1
./configure --prefix=/usr/local --with-curl --with-openssl
make all
→zlib-develとかgettextとかがinstallされてないと、
警告: zlib.h: そのようなファイルやディレクトリはありません
とか、
tclsh failed; using unoptimized loading
MSGFMT po/bg.msg make[1]: *** [po/bg.msg] エラー 127
って言われると思うので
サポート終了のCentOS5で yum update する方法
↑このあたりの対応してから、yumで必要なライブラリを追加してください。
make install
確認
git config --global --add http.sslVersion tlsv1.2
git clone https://xxx.com/origin_web.git
たぶんいけるはず。無理だったら出てきたエラーメッセージに従って対応してください。
4.phpからgitを実行する場合
gitをphpから実行する場合、Apache EnvironmentのPATHに/usr/local/binが含まれてないと思うので、yumでinstallされたgitが呼ばれてしまう。
だいたいhttpd.confに
SetEnv PATH "${PATH}:/usr/local/bin"
を書く方法が出てくるんだけどなぜかこれだとpathに追加されなかったので、/etc/init.d/httpd のstartのところに以下を追加して対応しました。
export PATH=$PATH:/usr/local/bin
5.まとめ
けっこうハマったのでやったことを一連の流れにしてまとめました。
必要なパッケージが足りてないなどで、この通りにやってもうまくいかない場合もあると思いますのでその際は柔軟に対応してください。
この記事が誰かの役に立てばいいなと思います。
これも好きかも

俺のCarry Meカスタム
2018年12月21日
WindowsサーバへのRPD接続にYubikey PIV認証を使用する
2024年9月20日