Domanda

Sto tentando di usare un CAS server per l'autenticazione di login per un Perl CGI script web e sto usando l' AuthCAS Modulo Perl (v 1.3.1).Ci si può collegare al server CAS per ottenere il servizio ticket, ma quando provo a collegarmi a convalidare il biglietto il mio script restituisce il seguente errore IO::Socket::SSL modulo:

 500 Can't connect to [CAS Server]:443 (Bad hostname '[CAS Server]') 
 ([CAS Server] substituted for real server name)

Sintomi/Test:

  1. Se digito l'URL generato per l'autenticazione nel browser web barra di posizione del restituisce bene con il previsto frammento di codice XML.Quindi non è un brutto nome host.
  2. Se ho generato uno script senza utilizzare il AuthCAS modulo, ma usando IO::Socket::SSL modulo direttamente per interrogare il server CAS per la convalida sulla generato servizio biglietteria Perl script verrà eseguito con la multa da riga di comando, ma non nel browser.
  3. Se posso aggiungere la AuthCAS modulo di script nel punto 2, lo script non funziona più la linea di comando, e ancora non funziona nel browser.

Qui è il bare-bones script che genera l'errore:

#!/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);
}

Tutte le idee su dove il conflitto potrebbe essere?


L'errore è in arrivo dalla linea, direttamente sopra il frammento Cebjyre citato e cioè

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

cioè della creazione del socket.Tutti i parametri di input sono corrette.Avevo modificato il modulo per mettere in istruzioni di debug e stampare tutti i parametri prima di quella chiamata e sono tutte belle.Sembra che io sono andando ad avere per scavare nell'IO::Socket::SSL modulo.

È stato utile?

Soluzione

Come di solito accade quando ho posto domande di questo tipo, ho trovato il problema.Si scopre che il Cripta::SSLeay il modulo non è stato installato o almeno non fino ad oggi.Naturalmente, i messaggi di errore non mi ha dato alcun indizio.L'aggiornamento e tutti i problemi vanno via e le cose stanno funzionando bene ora.

Altri suggerimenti

Bene, dal sorgente del modulo sembra che IO::Socket errore proviene da get_https2

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

che è chiamato da callCAS, che è chiamato da validateST.

Una possibilità è quella di modificare temporaneamente il file del modulo di mettere alcune istruzioni di debug, se si può, ma se dovessi indovinare, direi che il casUrl si parla di non corrispondenza fino al _parse_url regex correttamente - forse avete tre barre dopo l'https?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top