2017-05-03 2 views
11

Ich bin nicht in der Lage, eine verschlüsselte SOAP-Anfrage in PHP zu machen. Gemäß der Dokumentation habe ich jede Anfrage an das Payment Gateway verschlüsselt. Ich habe eine CSR generiert & schickte es an die Behörde für das Zertifikat. Sie haben mir das Domain-Zertifikat & CA-Zertifikat zurückgeschickt. Das größte Problem ist, dass die Dokumentation nicht für PHP gedacht ist. Gemäß dem Dokument:So verschlüsseln Sie jede Soap-Anfrage in PHP

The web service is protected with WS-Security Sign and encryption policy

Nach langer Suche fand ich eine helper class from Git aber wenn ich versuche ich folgende Fehlermeldung erhalten zu verbinden:

Allgemeine Sicherheitsfehler (Es wurden keine Zertifikate für die Entschlüsselung gefunden (KeyID)

FaultCode : wsse:InvalidSecurity

) habe ich versucht, SSL-Header wie folgt festgelegt:

$contextOptions = array(
    'ssl' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'cafile'  => '../../certs/CA.cer', 
     'local_cert'  => '../../certs/server.cer', 
     'local_pk'  => '../../certs/private_key.key', 
     'verify_depth' => 0, 
     'allow_self_signed'=>true, 
    ) 
); 

$sslContext = stream_context_create($contextOptions); 

aktualisieren

definiert ich die Schlüssel als:

define('PRIVATE_KEY', 'server_prvate_key.key'); 
define('CERT_FILE', 'domain_cert.cer'); 
define('SERVICE_CERT', 'CA.cer'); 

Alles falsch mit dieser Definition (bitte die oben GIT-Link)?

+0

Gibt es den 'cer' /' key' Dateien/Pfad? Hast du einen Blick darauf geworfen http://stackoverflow.com/questions/7147988/creating-a-php-soap-request-with-a-certificate –

+0

@GabrielHeming Ja. Die Dateien existieren – Shan

+0

Sie müssen den vollständigen Pfad zu Ihrem Schlüssel und Zertifikaten definieren, diese Hilfsklasse rät nicht, in welchem ​​Ordner sie sind – Capsule

Antwort

6

Sind Sie versucht, mit Curl?

Verwenden Sie die folgende Option, um Ihr Zertifikat zu setzen:

curl_setopt($ch,CURLOPT_CAINFO, 'CA.cer'); 
    curl_setopt($ch,CURLOPT_SSLCERT, 'domain_cert.cer'); 
    curl_setopt($ch,CURLOPT_SSLKEY, 'server_prvate_key.key'); 
    curl_setopt($ch,CURLOPT_SSLCERTPASSWD, 'certificate_password'); //if have 

ich eine verschlüsselte Verbindung zum Zahlungs-Gateways verwenden und andere Dienste locken mit und wirkt wie ein Zauber.

+0

Ich versuchte curl Aber ich werde falsch nach curl Ausführung, nach Überprüfung der Ausnahme fand ich den Fehler: "wsse: InvalidSecurityMissing wsse: Sicherheit Header in Anfrage", weiß ich nicht, wie Sie die Sicherheit Header hinzufügen! Ich habe eine Weile gesucht und einige Beispiele mit Benutzernamen und Passwörtern gefunden – Shan

Verwandte Themen