2010年10月26日火曜日

subversion への接続を https 化することで proxy 経由でも接続可能になった

前回、外部から proxy 経由で自宅 subversion に接続しようとすると、
うまくできませんでした。

Proxyサーバに阻まれているんだけどどうしよう? を見ると、以下のような記述があります。
"別の戦略としては、SSL上でチェックアウトする、というのもあって、多くのプロキシがこれを許可している。"
ということで、 、Apache を https 化することにしました。

結論としては、SSL にすれば proxy 経由でも正常に subversion に接続することができました!

接続イメージ以下のような感じです。
外部PC --> proxy --> インターネット --> 自宅ルータ --> 自宅PC(Apache+SSL+subversion)

※ 自宅PCの環境は Windows Vista Ultimate SP2 32bit です。

以下に、OpenSSL 付の Apache の導入手順をメモしておきます。

  1. Apache 2.2.17 (OpenSSL付) ダウンロード
    Apache は以下のサイトより、
    httpd-2.2.17-win32-x86-openssl-0.9.8o.msi をダウンロードしました。

    http://httpd.apache.org/download.cgi


  2. 既存の Apache 2.2.16 (OpenSSL無) をアンインストール


  3. Apache 2.2.17 (OpenSSL付) インストール
    httpd-2.2.17-win32-x86-openssl-0.9.8o.msi を実行。

    手順は Apache 2.2.16 (OpenSSL無) と変わりません。
    詳細は Subversion & Apache & subclipse の導入 の "4. Apache のインストール" を参照。

    ※ httpd.conf は 2.2.16 アンインストール後も残っています。
        さらに、2.2.17 インストール後も残っているので、2.2.16 時点のものが、
        そのまま利用できました。


  4. 秘密鍵の作成
    コマンド・プロンプトを管理者として実行し、以下を実行。
    <Apache導入先>\conf\server.key を作成します。

    C:\> cd C:\Program Files\Apache Software Foundation\Apache2.2\bin

    C:\Program Files\Apache Software Foundation\Apache2.2\bin> openssl.exe genrsa -des3 1024 > ..\conf\server.key
    Loading 'screen' into random state - done
    Generating RSA private key, 1024 bit long modulus
    ............++++++
    ..................++++++
    e is 65537 (0x10001)
    Enter pass phrase:
    Verifying - Enter pass phrase:

    C:\Program Files\Apache Software Foundation\Apache2.2\bin>


  5. CSRの作成
    <Apache導入先>\conf\server.csr を作成します。

    C:\Program Files\Apache Software Foundation\Apache2.2\bin> openssl.exe req -config ..\conf\openSSL.cnf -new -key ..\conf\server.key > ..\conf\server.csr
    Enter pass phrase for ..\conf\server.key:
    Loading 'screen' into random state - done
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:JP
    State or Province Name (full name) [Some-State]:Fukuoka
    Locality Name (eg, city) []:Fukuoka
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:rtaki
    Organizational Unit Name (eg, section) []:rtaki
    Common Name (eg, YOUR name) []:rtaki
    Email Address []:hoge@123.abc.co.jp

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:riverfall
    An optional company name []:rtaki

    C:\Program Files\Apache Software Foundation\Apache2.2\bin>


  6. サーバー証明書の作成
    <Apache導入先>\conf\server.crt を作成します。

    C:\Program Files\Apache Software Foundation\Apache2.2\bin> openssl.exe x509 -in ..\conf\server.csr -days 1000 -req -signkey ..\conf\server.key > ..\conf\server.crt
    Loading 'screen' into random state - done
    Signature ok
    subject=/C=JP/ST=Fukuoka/L=Fukuoka/O=rtaki/OU=rtaki/CN=rtaki/emailAddress=hoge@123.abc.co.jp
    Getting Private key
    Enter pass phrase for ..\conf\server.key:

    C:\Program Files\Apache Software Foundation\Apache2.2\bin>


  7. httpd.conf の編集
    SSLモジュールを有効化するために、httpd.conf にて、以下の行を有効化します。

      LoadModule ssl_module modules/mod_ssl.so


    さらに、SSL設定ファイル(以下の行)を有効化します。

      Include conf/extra/httpd-ssl.conf

    <Apache導入先>\conf\extra\httpd-ssl.conf は編集不要です。
    念のため、SSLCertificateFile と SSLCertificateKeyFile が、
    項番 4. と 6. で作成したファイルになっていることを確認しておきます。

    SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server.crt"
    SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server.key"


  8. Apache 起動エラーの回避
    <Apache導入先>\conf\extra\server.key を server.key_bk にリネームし、以下を実行します。

    C:\Program Files\Apache Software Foundation\Apache2.2\bin> openssl.exe rsa -in ..\conf\server.key_bk -out ..\conf\server.key
    Enter pass phrase for ..\conf\server.key_bk:
    writing RSA key

    C:\Program Files\Apache Software Foundation\Apache2.2\bin>

    これを実行しないと Apache が起動に失敗し、<Apache導入先>\log\error.log に以下のエラーが記録されます。

    SSLPassPhraseDialog builtin is not supported on Win32 (key file C:/Program Files/Apache Software Foundation/Apache2.2/conf/server.key)


  9. 設定の反映
    httpd.conf の修正の修正を反映するために、Apache サービスを再起動します。
    「コントロールパネル」→「管理ツール」→「サービス」より、Apache 2.2 を再起動します。


  10. 接続確認
    ブラウザを起動し、https://localhost/ として、It works! と表示されること確認します。

    その際に、証明書に関する警告が表示されますが、無視して、
    「このサイトの閲覧を続行する (推奨されません)。」を選択します。(IE8の場合)

    IE8 以外でも同様の画面が表示されるので、無視しましょう。
    オレオレ証明書(自分で作った証明書)なので仕方がないです。



subclipse で最初に接続する際も、以下のように同じような警告が表示されます。
Error validating server certificate for https://xxx~
- Unkown certificate issuer
「永久に承諾」としておきましょう。



以上、https版Apacheの完成です。ヾ(〃^∇^)ノわぁい♪