2008-08-25 19 views
2

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:

  1. 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.
  2. 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ı
  3. 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

cevap

3

Genellikle bu gibi sorular yayınladığımda, sorunu buldum. Bu, Crypt::SSLeay modülünün yüklü olmadığı veya en azından güncel olmadığı ortaya çıkıyor. Tabii ki hata mesajları bana herhangi bir ipucu vermedi. Güncelleme ve tüm problemler ortadan kalkıyor ve işler iyi çalışıyor.

-1

Eh, module source dan görünüyor.

Bir seçenek, bazı hata ayıklama ifadelerini koymak için modül dosyasını geçici olarak düzenlemektir; ancak tahmin edersem, tedarik ettiğiniz casUrl'un _parse_url düzenli ifadeyle eşleşmediğini söyleyebilirim - Belki https sonra üç eğik çizgi var?

+0

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. –

İlgili konular