2014年07月03日

Proxy環境からStrawberry PerlのCPANを使う

環境:Windows7 + Strawberry Perl + Proxy環境(ドメイン認証)

社内LANで外部接続にProxyを使っているPCにStrawberry Perlをインストールしたものの、CPANを使おうとしてエラーが発生したので対処をメモ。

発生したエラー
error: "Undefined subroutine 
CPAN::HTTP::Credentials::_clear_non_proxy_credentials called

ググってもぜんぜん出てこない…。
cpanのコマンドでhttp_proxyとユーザー・パスワードを設定するも同様のエラーが出てしまった。

Proxyがドメイン認証ということが原因なのかどうなのか…情シスに聞くのもややこしい。
追加モジュールを別途ダウンロードしてインストールするという手順もあったが、そもそも追加モジュールを探すのが面倒くさいので、ProxyとクライアントPCの間にさらにProxy(BurpSuite)を挟んで対応することに。

接続のイメージとしてはこんな感じ
CPAN(http://ftp.riken.jp/) <==> 社内Proxy <==> Burp Proxy(PC) <==> CPANクライアント(PC)

まずProxyとしてBurpSuite(無料版)をダウンロードします。
http://www.portswigger.net/index.html

ダウンロードして起動したら、Optionsのタブを選択し「Upstream Proxy Servers」の「Add」ボタンを押します。
burp01.png


次にBurp Proxyの上位に来るプロキシの設定画面になりますので、情報を入力します。

 Destination Host: * (*はワイルドカードなので、全てのホストが対象になります)
 Proxy Host: 社内LANのプロキシサーバを指定
 Proxy Port: 社内LANのプロキシサーバのポートを指定
 Authentication Type: ドメイン認証の場合、NTLMのv1かv2を選択(v2でいけた)
 Username/Password: 自分のドメイン認証のIDとパスワード
 Domain: ドメイン名を指定
 Hostname: よくわからなかったので空白にした
burp02.png


最後に、Proxyタブから「Intercept is Off」になるようにします。
これが「Intercepts is On」のままだと、プロキシにアクセスするたびに「Forward」を押さないと進まないので面倒です。
burp03.png

以上でBurpSuiteの設定は完了。


次にCPANの設定になります。

コマンドプロンプトからCPANを起動し、o confコマンドでプロキシを設定します。
C:\> o conf http_proxy http://127.0.0.1:8080/
proxy_user、proxy_passが設定されていたら下記を参考に消してください。
C:\> o conf http_user ""


これでCPANコマンドを実行すれば、ローカルPCのプロキシを経由して社内Proxy→インターネットと接続できる…はず。

うまくいかない場合は、webブラウザの設定でProxyをlocalhostにしてインターネット接続できるかどうか確認しましょう。ブラウザからインターネット接続できない場合は、BurpSuiteの設定に問題があります。
ブラウザからインターネット接続できた場合は、cpanの設定に問題があります。

まっとうな解決策じゃないけど、長く悩むよりベターかと。

《補足》
うちの環境だけかもしれないけど、一度ブラウザを使ってBurpSuite経由でアクセスしないと、CPANでの認証が通らなかった。Proxy側にセッション情報が残っていないとダメなのか?

タグ:Perl CPAN
posted by まきすけ at 20:12 | Comment(0) | TrackBack(0) | Linuxとか