2008-08-25 97 views
2

我正在嘗試使用現有的CAS服務器來驗證Perl CGI Web腳本的登錄,並且正在使用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); 
} 

在哪裏衝突可能是任何想法?


該錯誤是從線路來直接在片段上方Cebjyre引述即

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

即套接字創建。所有的輸入參數都是正確的。我編輯了模塊來輸入調試語句,並在調用之前打印出所有參數,它們都很好。看起來我將不得不深入IO :: Socket :: SSL模塊。

回答

3

通常當我發佈這樣的問題時,我發現了這個問題。事實證明,Crypt::SSLeay模塊未安裝或至少不是最新的。當然,錯誤信息並沒有給我任何線索。更新它,所有的問題消失,現在事情正常。

-1

那麼從module source它看起來像IO ::插座誤差從get_https2

[...] 
unless ($ssl_socket) { 
    $errors = sprintf "error %s unable to connect https://%s:%s/\n",&IO::Socket::SSL::errstr,$host,$port; 
    return undef; 
} 
[...] 

這是由callCAS,這是由validateST稱爲所謂的到來。

其中一種方法是臨時編輯模塊文件以放入一些調試語句(如果可以的話),但如果我不得不猜測,我會說您提供的casUrl與_parse_url正則表達式不匹配 - 也許你在https後有三個斜線?

+0

請勿編輯原始模塊源。將該文件複製到新目錄,將該目錄置於@INC的前面,然後執行調試。這樣你就不會打擾原來的,可能會打破依賴於模塊的其他東西。 – 2008-09-30 06:27:11

相關問題