IXR Library und SSL

Sprint

Erfahrenes Mitglied
Hallo zusammen,

da wir sehr viel mit ausländischen Firmen zu tun haben, wurden deren UID Nummern immer über die XML-RPC Schnittstelle vom BZSt. abgefragt. Das geht aber seit heute nicht mehr. In einem Hinweis auf der Seite heißt es lapidar "Bitte stellen Sie Ihre Abfragen ab dem genannten Zeitpunkt nur noch über HTTPS (TLS1.2)".

Unsere Seite ist aber schon seit Jahren abgesichert und auch die Schnittstelle wurde über https:// Aufrufe angesprochen!?

In der SSL-bezogenen Funktion in der Lib kann man zwar separate Cert, CA und Key Files angeben und die bekäme ich auch, allerdings widerstrebt es mir, das Keyfile selbst auf den Server zu legen. Dann kann auch noch ein Kennwort zum Entsperren des privateKey angegeben werden. Nur wo kriege ich das her??? Und könnte das wirklich helfen?

Hat jemand damit schon Erfahrungen und kann mir sagen, wie ich die wieder zum Laufen kriege?

Vielen Dank schon mal im Voraus,
Sprint

Edit: Bei der Schnittstellenbeschreibung ist ein Beispiel für eine Abfrage über HTTP:

HTML:
https://evatr.bff-online.de/evatrRPC?UstId_1=DE123456789&UstId_2=AB1234567890 
&Firmenname=Firmenname einschl. Rechtsform&Ort=Ort der Firma&PLZ=12345&Strasse=Strasse der Firma 
&Druck=nein

Wenn ich das über den Browser abschicke, bekomme ich korrekt einen XML String als Antwort.

Wenn ich das ganze über PHP laufen lasse:
PHP:
$client = new IXR_Client('https://evatr.bff-online.de/');
if (!$client->query('evatrRPC',
                    $duid['uid'],
                    $uiddaten['uid'],
                    $sende_firmenname,
                    $uiddaten['ort'],
                    $uiddaten['plz'],
                    $uiddaten['strasse'],
                    'nein'))
    $antwort = $client->getErrorCode().":".$client->getErrorMessage();
else
    $antwort = $client->getResponse();

bekomme ich die Meldung "-32300:transport error - could not open socket".

Wenn es über HTTP geht, sollte das Problem doch eher in der Library zu finden sein, oder? Damit könnte ich mir den o.g. Weg über die Zertifikatdateien usw. wohl sparen, denn die sind ja bei einem Aufruf über den Browser ja definitiv nicht da.

Gibt es denn eine Möglichkeit, ohne die IXR Library den Aufruf zu erstellen und die Antwort abzufangen?
 
Zuletzt bearbeitet:
Code:
extension=php_openssl.dll
allow_url_fopen = On
stehen beide in der PHP.ini

Muss das openssl in der phpinfo ein eigener Absatz sein, oder wo kann ich sehen ob das passt?
 
Ok, das hätte ich bei der Fehlermeldung auch sehen können...

Was macht er bei dir eigentlich an der angegebenen Stelle in der Fehlermeldung?
C:\Apache24\htdocs\domain\klassen\Kundenstamm.klasse.php on line 3891

War der Teil in der php.ini bereits drin, oder hast du den eingetragen? Hast bei zweiterem auch den Server neugestartet?

Grüsse,
BK
 
In Zeile 3891 wird der Inhalt dieser Function ausgeführt:
Code:
private function urlRequest($url, $setUserAgent=false, $usePost=false, $additionalHeaders='', $content='') {
    return file_get_contents($url, false, stream_context_create(array('http' => array('method' => (($usePost) ? 'POST' : 'GET'), 'header' => "User-Agent: ".(($setUserAgent) ? $setUserAgent : $_SERVER['HTTP_USER_AGENT'])."\r\n"."Content-Type: application/x-www-form-urlencoded;charset=UTF-8\r\n".$additionalHeaders, 'content' => $content))));
}
Ich hab alles getrennt installiert. Apache 2.4, PHP 7.1.0 und MySQL.
Die zwei Zeilen standen in der PHP.ini schon drin. Ob sie zuvor auskommentiert waren weiß ich aber leider nicht mehr sicher.
Einen Neustart der Dienste hab ich immer durchgeführt.
 
Demnach wäre zumindest das Modul geladen:
1555058621307.png
Ein eigenes "Kapitel" zu OpenSSL wird in der phpinfo dennoch nicht aufgeführt falls das so sein sollte.

Gruß
Stefan
 
Danke für die Hilfe bis hier hin schon mal!

Asche auf mein Haupt....
In der php.ini hat für die extension der Pfad gefehlt. Den mußte ich noch ergänzen. Eine Fehlermeldung konnte ich keine erkennen, deshalb war mir das nicht gleich aufgefallen.
Jetzt wird auch der OpenSSL Absatz in der phpinfo angezeigt, und die oben genannten Fehlermeldungen sind auch verschwunden.

Jetzt kann ich mir von dem Code oben $antwort auf dem Bildschirm anzeigen lassen. Es ist aber ein String den ich noch zerlegen müsste:
UstId_1 DE12345678 ErrorCode 200 UstId_2 IT12345678 Druck nein Erg_PLZ A Ort San Miniato Basso Pisa Datum 12.04.2019 PLZ 55555 Erg_Ort A Uhrzeit 12:56:37 Erg_Name A Gueltig_ab Gueltig_bis Strasse Via Cascina Lari Firmenname Pizza Service S. r. l. Erg_Str
Gibt es dafür eine Möglichkeit? Ich nehme an das ist nicht so trivial?..

Gruß
Stefan
 
Ist es richtig dass, wenn ich "file_get_contents" durch "file" ersetze ein Array erhalten anstatt eines Strings? Könnte ich dann dieses Array einfacher zerlegen als den String?
Ich bin gerade schon dabei das zu versuchen, aber es gelingt mir nicht.
Vor PHP 7.1.0 hatte ich mit xmlrpc_decode() gearbeitet, aber diese Funktion ist in PHP 7.1.0 offensichtlich nicht mehr bekannt!?
"Call to undefined function xmlrpc_decode()"
 
Zuletzt bearbeitet:
Hi,
seit Kurzem bekomme ich wieder eine Fehlermeldung " PHP Warning: file_get_contents(https://evatr.bff-online.de/evatrRPC): failed to open stream: HTTP request failed!" (obwohl es lange funktioniert hatte. Verändert habe ich am Code nichts)

Auf der Seite hat sich auch einiges verändert. Einige URLs sind nicht mehr aufrufbar. Weiß jemand, ob man die Abfrage neu anpassen muss?

Gruß
 
Zurück