Frage

Ich bin versucht zu verwenden, eine vorhandene CAS-server für die Authentifizierung der Anmeldung für ein Perl-CGI-script und bin mit dem AuthCAS Perl-Modul (v 1.3.1).Ich kann eine Verbindung zum CAS-server erhalten Sie das service-ticket, aber wenn ich versuche, die Verbindung zu überprüfen Sie die Fahrkarte mein Skript gibt, mit dem folgenden Fehler aus der IO::Socket::SSL Modul:

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

Symptome/Tests:

  1. Wenn ich die erzeugte URL für die Authentifizierung in der web-browser die Adressleiste, gibt es nur gut mit der erwarteten XML-snippet.So ist es keine schlechte host-name.
  2. Wenn ich ein Skript generieren, ohne mit der AuthCAS Modul, aber mit der IO::Socket::SSL-Modul direkt für die Abfrage der CAS-server zur überprüfung auf die erzeugte service-ticket-das Perl-Skript ausgeführt wird, problemlos aus der Kommandozeile, aber nicht im browser.
  3. Wenn ich die AuthCAS-Modul in das Skript in Ziffer 2, wird das Skript nicht mehr funktioniert in der Befehlszeile, und noch immer funktioniert nicht im browser.

Hier ist die bare-bones-Skript, das den Fehler erzeugt:

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

Irgendwelche Ideen auf, wo der Konflikt sein könnte?


Der Fehler kommt von der Zeile direkt oberhalb der snippet Cebjyre zitiert, nämlich

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

nämlich die socket-Erstellung.Alle Eingabe-Parameter korrekt sind.Ich hatte bearbeitet das Modul zu setzen, debug-Anweisungen, und drucken Sie alle Parameter einfach vor, dass die Gesprächs-und Sie sind alle in Ordnung.Sieht aus wie ich bin zu haben, um tiefer in die IO::Socket::SSL-Modul.

War es hilfreich?

Lösung

Wie es gewöhnlich geschieht, wenn ich Fragen wie diese, fand ich das problem.Es stellt sich heraus, die Crypt::SSLeay Modul wurde nicht installiert oder zumindest nicht aktuell sind.Natürlich werden die Fehlermeldungen nicht geben Sie mir irgendwelche Hinweise.Aktualisieren Sie und alle die Probleme Weg und alles funktioniert jetzt gut.

Andere Tipps

Gut, von der Modul Quelle es sieht aus wie das IO::Socket error kommt, get_https2

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

das von callCAS, die aufgerufen wird, von validateST.

Eine option ist vorübergehend Bearbeiten Sie die Modul-Datei, um einige debug-Anweisungen, wenn Sie können, aber wenn ich raten müsste, würde ich sagen, dass die casUrl Sie liefert nicht passend bis zu den _parse_url regex richtig - vielleicht haben Sie drei Schrägstriche nach dem https?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top