Perl CGI web komut dosyasının giriş kimliğini doğrulamak için mevcut bir CAS sunucusunu kullanmaya çalışıyorum ve AuthCAS Perl modülünü kullanıyorum (v 1.3.1). Hizmetin bilet almak için CAS sunucusuna bağlanabilir ama çalışırken komut IO::Socket::SSL modülünden aşağıdaki hata ile döner bilet doğrulamak bağlanmak için:Neden CAS sunucusuna Perl's AuthCAS ile bağlanamıyorum?
500 Can't connect to [CAS Server]:443 (Bad hostname '[CAS Server]')
([CAS Server] substituted for real server name)
Belirtileri/Testler:
- Kimlik doğrulaması için oluşturulan URL'yi web tarayıcısının konum çubuğuna yazıyorsa, beklenen XML snippet'i ile birlikte yalnızca iyi bir şekilde döner. Yani kötü bir ana bilgisayar adı değil.
- AuthCAS modülünü kullanmadan bir komut dosyası oluşturur ancak oluşturulan hizmet biletinde doğrulama için CAS sunucusunu doğrudan sorgulamak için IO :: Socket :: SSL modülünü kullanırsam Perl betiği komut satırından düzgün çalışır ancak tarayıcı
- AuthCAS modülünü 2. maddede betiğe eklerseniz, komut artık komut satırında çalışmayabilir ve yine de tarayıcıda çalışmaz. Çatışma nerede olabileceği üzerinde
#!/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); }
Herhangi bir fikir: Burada
hata üretir çıplak kemikleri script?
hata Cebjyre yani yani
$ssl_socket = new IO::Socket::SSL(%ssl_options);
Soket oluşturma
alıntı ile doğrudan parçacığını yukarıdaki satır geliyor. Tüm giriş parametreleri doğru. Modülü, hata ayıklama ifadeleri koymak ve tüm parametreler bu çağrıdan hemen önce yazdırmak için düzenledim ve hepsi iyi. Görünüşe göre IO :: Soket :: SSL modülüne daha derine dalmak zorunda kalacağım. IO :: Yuva hatası validateST tarafından çağrılan callCAS, tarafından çağrılan get_https2[...]
unless ($ssl_socket) {
$errors = sprintf "error %s unable to connect https://%s:%s/\n",&IO::Socket::SSL::errstr,$host,$port;
return undef;
}
[...]
geliyor gibi
Orijinal modül kaynağını düzenlemeyin. Dosyayı yeni bir dizine kopyalayın, bu dizini @INC'nin önüne koyun ve hata ayıklama işlemini yapın. Bu şekilde orijinali rahatsız etmiyorsunuz, muhtemelen modüle bağlı diğer şeyleri kırıyorsunuz. –