2008-08-25 12 views
2

私はPerl CGI Webスクリプトのログインを認証するために既存のCASサーバーを使用しようとしており、AuthCAS Perlモジュール(v 1.3.1)を使用しています。私は、サービスチケットを取得するためにCASサーバーに接続することができますが、私は私のスクリプトがIO::Socket::SSLモジュールから次のエラーで返されたチケットの検証に接続しようとすると:PerlのAuthCASでCASサーバーに接続できないのはなぜですか?

500 Can't connect to [CAS Server]:443 (Bad hostname '[CAS Server]') 
([CAS Server] substituted for real server name) 

症状/テストの:

  1. 認証用に生成されたURLをWebブラウザのロケーションバーに入力すると、予想されるXMLスニペットで正しく戻ります。したがって、悪いホスト名ではありません。
  2. AuthCASモジュールを使用せずにスクリプトを生成するが、IO :: Socket :: SSLモジュールを直接使用して生成されたサービスチケットの検証をCASサーバーに問い合わせると、Perlスクリプトはコマンドラインからうまく動作するが、ブラウザ。
  3. AuthCASモジュールを項目2のスクリプトに追加すると、スクリプトはコマンドラインでは機能しなくなり、ブラウザでは機能しなくなります。競合があるかもしれないところに

    #!/usr/bin/perl 
    use strict; 
    use warnings; 
    use CGI; 
    use AuthCAS; 
    use CGI::Carp qw(fatalsToBrowser); 
    
    my $id = $ENV{QUERY_STRING}; 
    my $q = new CGI; 
    my $target = "http://localhost/cgi-bin/testCAS.cgi"; 
    
    my $cas = new AuthCAS(casUrl => 'https://cas_server/cas'); 
    
    if ($id eq ""){ 
        my $login_url = $cas->getServerLoginURL($target); 
        printf "Location: $login_url\n\n"; 
        exit 0; 
    } else { 
        print $q->header(); 
        print "CAS TEST<br>\n"; 
    
        ## When coming back from the CAS server a ticket is provided in the QUERY_STRING 
        print "QUERY_STRING = " . $id . "</br>\n"; 
        ## $ST should contain the received Service Ticket 
        my $ST = $q->param('ticket'); 
        my $user = $cas->validateST($target, $ST); #### This is what fails 
    
        printf "Error: %s\n", &AuthCAS::get_errors() unless (defined $user); 
    } 
    

    任意のアイデア:ここ

はエラーを生成最低限スクリプトですか?


エラーが直接すなわち

$ssl_socket = new IO::Socket::SSL(%ssl_options); 

すなわちソケット作成引用スニペットCebjyre上方ラインから来ています。すべての入力パラメータが正しい。私はデバッグステートメントを入れ、その呼び出しの直前にすべてのパラメータを出力するようにモジュールを編集しましたが、それらはすべて問題ありません。私はIO :: Socket :: SSLモジュールをもっと深く掘り下げなければならないように見えます。そのIO ::ソケットエラーがget_https2

validateSTによって呼び出されcallCAS、によって呼び出され
[...] 
unless ($ssl_socket) { 
    $errors = sprintf "error %s unable to connect https://%s:%s/\n",&IO::Socket::SSL::errstr,$host,$port; 
    return undef; 
} 
[...] 

から来ているように見えるmodule sourceから

答えて

3

私はこのような質問を投稿するときに通常起こるように、問題を発見しました。 Crypt::SSLeayモジュールがインストールされていないか、少なくとも最新のものではないことが判明しました。もちろん、エラーメッセージは私に手がかりを与えませんでした。それを更新するとすべての問題がなくなり、今はうまくいきます。

-1

まあ、。

1つの選択肢は、可能であればデバッグ文を入れるためにモジュールファイルを一時的に編集することですが、私が推測しなければならないのは、あなたが提供しているcasUrlが_parse_url正規表現に正しくマッチしていない、おそらく、httpsの後に3つのスラッシュがありますか?

+0

元のモジュールソースを編集しないでください。ファイルを新しいディレクトリにコピーし、そのディレクトリを@INCの前に置き、デバッグします。そうすれば、モジュールに依存する他のものを破壊する可能性があるので、オリジナルを妨げることはありません。 –

関連する問題