概要
git を利用していて、リモートレポジトリを登録するときに、https を使いたい。
具体的には、プライベートサーバーに立てた gitbucket を remote origin にしたいが、単に
git remote add origin https://MY.PRIVATE.HOST/gitbucket/git/USERNAME/PROJECT.git
git push -u origin
とすると、
error: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none while accessing .....
のように表示され、うまく push できない。
よく見つかる例(だけどセキュリティ的に不安)
上記エラーメッセージをもとにネット検索をしてみると、
export GIT_SSL_NO_VERIFY=1
にするとか
git config --global http.sslverify false
にすると良い、というような情報が見つかる。
でも、それって証明書を無視しているわけだから(しかも場合によっては、すべてのプロジェクトで)、セキュリティ的には不安だし、根本的な解決にはなっていないような気がした。
で、どうするか
stackoverflow の記事を参照に、
HOST=MY.PRIVATE.HOST
PORT=443
echo -n | openssl s_client -showcerts -connect ${HOST}:${PORT} 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
として、表示された内容を /etc/ssl/certs/ca-certificates.crt などに書き加える。
参照した記事には「表示された証明書のすべてを追記」みたいなことが書かれているので、その通りにした方がいいと思われる。
今回のサーバーは自己証明書だったので、証明書一つ分の追記で正常に動いた。
・・・結局、自己証明書のサーバーなのでセキュリティ的な問題は残るような気もするが、そこはあえて目を瞑る。