Ankündigung

Einklappen
Keine Ankündigung bisher.

Zertifikat basierte Cient-Authentifizierung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zertifikat basierte Cient-Authentifizierung

    Servus Leute!

    Ich stehe vor einem Problem, das mir unlösbar erscheint.
    Ich muss Daten von einem Webservice abrufen, der diese via HTTPS- und SOAP-Schnittstelle anbietet.
    Mit der SOAP-Schnittstelle gibt es derzeit wohl Probleme auf Seiten des Anbieters, sodass ich auf HTTPS zurückgreifen muss.

    Mein Problem: Der Webservice (Anbieter-Server) benötigt eine zertifikat-basierte Klienten-Authentication meinerseits. Hierzu wurde mir vom Anbieter ein Zertifikat im p12-Format zugestellt.
    Diese habe ich in das pem-Format formatiert, was unter Verwendung von "NuSoap" nicht funktionierte.
    Nach etwas Recherche habe ich dann den folgenden Artikel (aus 2005 ) gefunden: http://curl.haxx.se/mail/archive-2005-09/0138.html

    Ich habe also die Zertifikate und den Key aus der p12-Datei separat extrahiert:
    Code:
    openssl pkcs12 -in MULTICERT.p12 -out ca.pem -cacerts -nokeys
    openssl pkcs12 -in MULTICERT.p12 -out client.pem -clcerts -nokeys
    openssl pkcs12 -in MULTICERT.p12 -out key.pem -nocerts
    Unter Verwendung von "NuSoap" hat es funktioniert:

    PHP-Code:
    $client-cert 'pfad/client.pem';
    $private-key 'pfad/key.pem';
    $ca-cert 'pfad/ca.pem';
    $passphrase '*****';
    $client = new nusoap_client("https://foo.bar",array('soap_version' => SOAP_1_1));
    $client->authtype 'certificate';
    $client->decode_utf8 0;
    $client->soap_defencoding 'UTF-8';
    $client->certRequest['passphrase'] = $passphrase;
    $client->certRequest['sslcertfile'] = $client-cert;
    $client->certRequest['sslkeyfile'] = $private-key;
    $client->certRequest['cainfofile'] = $ca-cert
    hiermit kann ich eine Verbindung aufbauen (SOAP).
    Da ich nun aber eine "normale" HTTPS-Verbindung zu XML-Dateien auf dem Anbieter-Server benötige (fopen,file_get_contents,simplexml_load_file), weiß ich nicht, was ich tun muss, um mich "auszuweisen".

    Die Fehler-Meldungen sind logischer Weise immer die gleichen:

    Code:
    simplexml_load_file(): SSL operation failed with code 1. OpenSSL  Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert  handshake failure
    Code:
    file_get_contents(): SSL operation failed with code 1. OpenSSL Error  messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert  handshake failure
    Code:
    fopen(): SSL operation failed with code 1. OpenSSL Error messages:  error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake  failure
    Kann mir bitte jemand helfen?

  • #2
    http://www.binarytides.com/use-clien...cate-curl-php/

    spiel doch mal mit curl rum.
    die ssl version des servers bspw. ist nicht uniterssant.

    sonst mach halt mal mit openssl s_client rum

    https://bugs.launchpad.net/ubuntu/+s...l/+bug/1305175

    Kommentar


    • #3
      Zitat von moma Beitrag anzeigen
      spiel doch mal mit curl rum.
      Jawohl! Besten Dank!
      Die Verbindung klappt tadellos.

      Leider habe ich schon das nächste Problem. Das XML-Dokument, das ich aufrufe ist "gzipped" und die Daten liegen im Binär-Format vor.

      Das "GZIP" Problem habe ich mittels curl_setopt gelöst

      PHP-Code:
      curl_setopt($ch,CURLOPT_ENCODING "gzip"); 
      Mein jetziges Problem:
      Ich erzeuge ein XML-Dokument (meintest.php)

      PHP-Code:
      header ("Content-Type:text/xml");
      $url "https://webservice.foo/blabla";
      $ch curl_init();
      /*
      usw. usw.
      */
      $daten curl_exec($ch);
      echo 
      $daten 
      Wenn ich meintest.php nun im Browser aufrufe, wird mir das XML-Dokument angezeigt. Der Validator unter http://www.w3schools.com/xml/xml_validator.asp sagt mir auch, dass das XML-Dokument ok ist.

      Allerdings schlägt "loadXML" fehl.

      PHP-Code:
      $datei "meintest.php";
      $doc = new DOMDocument();
      $doc->loadXML($datei); 
      Ausgabe:

      Warning: DOMDocument::loadXML(): Start tag expected, '<' not found in Entity, line: 1

      EDIT:
      xml_simplexml_load_file funzt!

      Jetzt muss ich nur noch die base64-Codierung rausnehmen, aber ich hoffe, dass mir da base64_decode helefen wird.

      Kommentar


      • #4
        ich nehme mal an, du bist durch?

        das "DOMDocument::loadXML()"-problem kann ich leider ohne code nicht ansaztweise verstehen. ne lösung wäre jedenfalls gut, falls jemand den thread findet.

        Kommentar

        Lädt...
        X