git で https なリモートレポジトリを登録


概要

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 などに書き加える。

参照した記事には「表示された証明書のすべてを追記」みたいなことが書かれているので、その通りにした方がいいと思われる。

今回のサーバーは自己証明書だったので、証明書一つ分の追記で正常に動いた。

・・・結局、自己証明書のサーバーなのでセキュリティ的な問題は残るような気もするが、そこはあえて目を瞑る。

参照