私は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)
症状/テストの:
- 認証用に生成されたURLをWebブラウザのロケーションバーに入力すると、予想されるXMLスニペットで正しく戻ります。したがって、悪いホスト名ではありません。
- AuthCASモジュールを使用せずにスクリプトを生成するが、IO :: Socket :: SSLモジュールを直接使用して生成されたサービスチケットの検証をCASサーバーに問い合わせると、Perlスクリプトはコマンドラインからうまく動作するが、ブラウザ。
- 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から
元のモジュールソースを編集しないでください。ファイルを新しいディレクトリにコピーし、そのディレクトリを@INCの前に置き、デバッグします。そうすれば、モジュールに依存する他のものを破壊する可能性があるので、オリジナルを妨げることはありません。 –