Ich versuche, einen Soap-Client mit dem folgenden Code ein:PHP SOAP-Client mit Zertifikaten über SSL
<?php
$wsdl = 'https://domain.com/?wsdl';
$endpoint = 'https://domain.com';
$certificate = dirname(__FILE__) . '/CertWithKey.pem';
$password = 'pwd';
$options = array(
'location' => $endpoint,
'keep_alive' => true,
'trace' => true,
'local_cert' => $certificate,
'passphrase' => $password,
'cache_wsdl' => WSDL_CACHE_NONE
);
try {
$soapClient = new SoapClient($wsdl, $options);
} catch(Exception $e) {
var_dump($e);
}
ich eine P12-Schlüssel-Datei mit einer .crt Zertifizierungsdatei gegeben wurde. Mit openssl habe ich die .p12-Datei in eine .pem-Datei konvertiert und dann mit der .crt-Datei zusammengeführt. Das CertWithKey.pem sieht gut aus, zwei Zertifikatsblöcke sind in der Datei.
Egal was ich versuche zu tun, bekomme ich immer eine Ausnahme mit der Nachricht SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://domain.com/?wsdl' : failed to load external entity "https://domain.com/?wsdl"
.
Nach dem Telefonieren mit der Gegenstelle bestätigen sie, dass eine Anfrage eingeht, aber sie protokollieren diesen Fehler: ssl handshake interrupted by system [hint: stop button pressed in browser?!]
.
Da ich bis jetzt keine brauchbaren Informationen im Netz gefunden habe, habe ich mir vorgenommen, euch um einen Einblick zu bitten.
Irgendwelche Vorschläge, was versucht werden kann? Ich benutze PHP 5.3.8 und die IP-Adresse des Servers ist in der Firewall der Gegenseite weiß aufgeführt.
Ich versuche auch, SOAP-Anfrage an einen Server zu senden. Ich stehe vor einem ähnlichen Problem, bei dem ich nicht in der Lage bin, über meine PHP-Anwendung mit dem Server zu kommunizieren. funktioniert aber über SOAP GUI. Ich habe eine .p12-Datei, die ich versucht habe, indem ich in .pem-Datei umwandelte. Wenn ich das SOAP-Client-Objekt zu erstellen, erhalte ich die Fehlermeldung: SOAP-Fehler: Das Parsen WSDL: Kann nicht aus https laden: // wsdl: fehlgeschlagen externe Einheit https laden: // Wsdl Can erzählst du mir bitte, was hier schief läuft? –
Wenn Sie meine Antwort befolgt haben und die Schlüssel- und CRT-Dateien erfolgreich zusammengeführt wurden, ist auf dem Remote-Host möglicherweise eine Firewall aktiviert und blockiert Ihre IP-Adresse. Ansonsten kann ich noch nicht sagen, vielleicht solltest du dann eine Frage stellen. – Ben
Ich hatte das gleiche Problem. Und ich folgte genau den Schritten, die @Ben zur Verfügung gestellt hat. Der p12 musste in .pem konvertiert werden, indem der angegebene Link verwendet wurde. Aber ich bekam immer noch den Fehler: curl: (58) Client cert nicht laden -8018 Seltsamerweise dachte ich, dass die Passphrase, die ich zur Verfügung stellte, 3 war -Ziffern "123", stattdessen musste ich eine gültige Passphrase mit 6 Buchstaben angeben. Also ich glaube, es sollte eine einige gute Länge Passphrase (nicht wissen, die min-Länge) .Die nächste, die fehlte war 'local_cert', 'Passphrase' Optionen, die in der Initialisierung des SoapClient-Objekts angegeben werden sollte. –