TortoiseSVNでSSL証明書のパスフレーズが保存されない

はじめましてr_koikeです。

今日はTortoiseSVNのSubversionで悩んでいたネタです。

TortoiseSVNのsubversion設定を変えようとして、ファイル(configやservers)を編集したのに、subversionに変更内容が反映されない!

という状況に陥ったことはありませんか?

結論は、
Documents and Settingsにあるsubversion(TortoiseSVN)の設定ファイルだけでなく、レジストリも見ろ。
です。

以下、苦闘の記録です。

まぁ、私とまったく同じ状況でハマることは滅多にない(※)かと思います。
※ただ、TortoiseSVNがレジストリ・設定ファイルのどこを見ているか?という話になりますので、TortoiseSVNの設定関連で困っている人は参考になるかもしれません。

ディノではSubversionリポジトリにアクセスするためにはSSL証明書が必要です。
しかし、証明書の期限が切れてしまったため、この前新しい証明書を発行してもらいました。

前の証明書はパスフレーズ不要でしたが、新しい証明書はパスフレーズ付きなので、、
リポジトリにアクセスする際に証明書のパスフレーズを要求するウィンドウがでるようになりました。
TortoiseSVNのSSL証明書パスフレーズ入力ウィンドウ

毎回パスフレーズを入力するのは面倒なので、『認証を保存(S)』にチェックを入れました。しかし、パスフレーズが保存されていないのか、アクセスの度にパスフレーズを要求されます。

linuxなどでは HOME/.subversion/servers に設定すればパスフレーズを自動入力してくれますので、TortoiseSVNでも同じことができないか設定ファイルを探しました。

TortoiseSVNの設定画面を見るとSubversionの設定ファイルを編集ボタンがあり、設定ファイルを編集できます。
TortoiseSVN設定画面のSubversion設定ファイル編集ボタン

ここでは C:\Documents and Settings\UserName\Application Data\Subversion\config というファイルを編集しています。
同じディレクトリに C:\Documents and Settings\UserName\Application Data\Subversion\servers がありましたので、そのファイルに以下の設定を追加しました。

ssl-client-cert-file = C:/path/to/certfile
ssl-client-cert-password = password

設定を追加してみたあとに、リポジトリにアクセスしましたが、まだパスフレーズを要求されます。

Subversion によるバージョン管理を見ると、Windows版では設定をレジストリに保存することもできるようです。…が、TortoiseSVNがどちらの設定を使っているか分かりません。

とりあえず、subversionという文字列を元にレジストリを検索すると
HKEY_CURRENT_USER\Software\tigris.org\Subversion\Servers\(グループ名/ドメイン名)
 というキーがあったので、以下の値をレジストリへ設定しました。

ssl-client-cert-password = password

レジストリにsubversion設定の値を追加する
レジストリにsubversionで使うSSL証明書のパスフレーズを設定する
レジストリにsubversionで使うSSL証明書のパスフレーズを設定した状態

レジストリ書き換え後、すぐにTortoiseSVNへ反映されるようです。
アクセスの際にパスフレーズが要求されない(自動入力された)ことを確認しました。

レジストリの設定について何か書いていないか、Subversion によるバージョン管理をもう一度チェックしなおしてみると、以下のように書いてあります。

レジストリベースの設定オプションは、ファイルベースの残りの部分を検索する前に 検索されます。それで、このようなオプションは、設定ファイル中で見つかった値によって上書きされます。言い換えると、設定のプライオリティは Windowsシステムの場合、以下の順序となることが保証されています:

1.コマンドラインオプション
2.ユーザごとのINIファイル
3.ユーザごとのレジストリ値
4.システム全体のINIファイル
5.システム全体のレジストリ値

INIファイルがDocuments and Settingsにある設定ファイルだと思いますが、レジストリよりINIファイルを優先するとなっています。一応、英語版の方も確認してみます。

1.Command-line options
2.The per-user INI files
3.The per-user Registry values
4.The system-wide INI files
5.The system-wide Registry values

同じですね。

ここからは私の予想なのですが、HKEY_CURRENT_USER\Software\tigris.org\Subversion\ の設定が “3.ユーザごとのレジストリ値” にあたり、C:\Documents and Settings\UserName\Application Data\Subversion\ の設定ファイルが” 4.システム全体のINIファイル” にあたるのでしょうか。

Documents and Settingsのユーザディレクトリ以下にあるファイルなのに”システム全体”扱いなのが謎(※)です。
※Administratorユーザで実行しているからかもしれません。

コメント / トラックバック 1 件

#1 takekoshi 2007/10/17 13:35

自分の旧証明書はパスワードつきでしたが、新証明書に差し替えたことで同じ症状になりました。証明書のファイルパスを記憶させるときであればパスワードも一緒に覚えてくれますので、新証明書のファイルパスを変えることで運用回避できます。
根本解決ではありませんが……。

コメントする