git:リポジトリにhttpsでアクセスしてみる

Joelさんがsubversionを使うのはやめろ!と書いているのを見て、マジかよ!と思ったわけですが、gitの本を2冊買いながら全く手を出していなかった自分にはよい刺激になったんで、会社の開発サーバ(CentOS 5.4)にgitを入れてみた。joelさんはMercurial使ってるみたいだけどね…。

クライアントは、Mac miniです。

サーバの方は、例によってyumで。

yum -y install git

git用の適当なディレクトリを作り、公開リポジトリを作成する。

mkdir -p /var/git/hoge.git
cd /var/git/hoge.git
git init --bare

WebDavで公開するということなので、subversion用のconfをコピーして修正してみる。

cd /etc/httpd/conf.d
cp subversion.conf git.conf # subversion.confがない場合はgit.conf作って下さい
vi git.conf

git.confを修正する。また、.htpasswdは適宜作ってください。ここではあるものとします。

Alias /git-repos/hoge /var/git/hoge.git
<Location /git-repos/hoge>
   DAV on
   SSLRequireSSL
   AuthType Basic
   AuthName "Git Repository"
   AuthUserFile /var/git/.htpasswd
   Require valid-user
</Location>

Apacheを再起動させる。

service httpd restart

作成したgitリポジトリの権限を変更など。

cd /var/git
chown -R apache. hoge.git
cd hoge.git
git update-server-info

ここまでが、サーバの作業。

こっから、クライアント(Mac mini)の作業。
まず、httpsでアクセスするにはcurlを使うみたいなんだけれど、デフォルトの状態だとhttpsのアクセスができないらしいので、portsでサクッとアンインストールする。
その後、curlのインストールパラメータを編集してから、再インストール。

sudo port uninstall curl git-core
sudo port edit curl
# configure.argsのwithout-sslをwith-sslに変更
sudo port install curl
sudo port install git-core

ベーシック認証の認証情報をファイルに書いておく。

vi ~/.netrc
machine www.example.com # 適宜変更
login <ユーザー名>
password <パスワード>

開発サーバのSSL証明書はいわゆるオレオレ証明書なので、gitコマンドにエイリアスを設定しておく。

vi ~/.bashrc
alias git='GIT_SSL_NO_VERIFY=1 git'

これで、サーバに対してcloneでリポジトリを取得しようとしたのだが、エラーが発生した。

git clone https://www.example.com/git-repos/hoge
Initialized empty Git repository in /Users/******/hoge/.git/
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://www.example.com/git-repos/hoge/info/refs?service=git-upload-pack

fatal: HTTP request failed

オレオレ証明書対策はしたと思うのだが、うまくいかなかった。
検索してみたら、.gitconfigのhttp.sslVerifyをfalseにしろって書いてあったのを見つけたのでやってみた。

git config --global http.sslVerify false
# 再びgit clone
git clone https://www.example.com/git-repos/hoge
# クローン成功
cd hoge
touch test.txt
git add test.txt
# コミット。gitなのでローカルのみ
git commit -m "test"
# サーバに変更を送りつける
git push origin master
# pushに成功したとして、再びcloneしてみる
cd ..
git clone https://www.example.com/git-repos/hoge hoge2
cd hoge2
# test.txtがあればOK
ls

コマンドラインだけでやったので、実用としてはまだ試してませんが、とりあえず通信自体は確認できたということでOKとする。


カテゴリー Linux, Mac, システム開発 | タグ | パーマリンク

コメント・トラックバック一覧

  1. Pingback: gitで「SSL certificate problem: self signed certificate」と表示された時の対処法 | CodePlus

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です