我正在嘗試使用現有的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)
症狀/測試:
- 如果我將生成的身份驗證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);
}
在哪裏衝突可能是任何想法?
該錯誤是從線路來直接在片段上方Cebjyre引述即
$ssl_socket = new IO::Socket::SSL(%ssl_options);
即套接字創建。所有的輸入參數都是正確的。我編輯了模塊來輸入調試語句,並在調用之前打印出所有參數,它們都很好。看起來我將不得不深入IO :: Socket :: SSL模塊。
請勿編輯原始模塊源。將該文件複製到新目錄,將該目錄置於@INC的前面,然後執行調試。這樣你就不會打擾原來的,可能會打破依賴於模塊的其他東西。 – 2008-09-30 06:27:11