나는 기존의 CAS 서버를 사용하여 Perl CGI 웹 스크립트에 대한 로그인을 인증하려고 시도 중이고 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을 웹 브라우저의 위치 표시 줄에 입력하면 예상되는 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 모듈에 대해 더 깊이 들어가야 할 것 같습니다. 그 IO :: 소켓 오류가 validateST에 의해 호출 callCAS에 의해 호출 get_https2[...]
unless ($ssl_socket) {
$errors = sprintf "error %s unable to connect https://%s:%s/\n",&IO::Socket::SSL::errstr,$host,$port;
return undef;
}
[...]
에서 오는 것처럼
원본 모듈 원본을 편집하지 마십시오. 파일을 새 디렉토리에 복사하고 해당 디렉토리를 @INC 앞에 놓은 다음 디버깅을 수행하십시오. 그렇게하면 원래 모듈을 방해하지 않고 모듈에 의존하는 다른 것들을 무력화 할 수 있습니다. –