PHP SOAP client avec des certificats SSL
Je suis en train de configurer un client Soap avec le code suivant:
<?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);
}
M'a donné un .p12 fichier-clé avec un .crt de certification de fichier. À l'aide d'openssl j'ai converti le .p12-fichier .pem-fichier, puis a fusionné avec la .crt-fichier. Le CertWithKey.pem me semble bon, deux certificats de blocs dans le fichier.
Peu importe ce que j'essaie de faire, je reçois une exception avec le message SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://domain.com/?wsdl' : failed to load external entity "https://domain.com/?wsdl"
.
Après avoir téléphoné avec la télécommande du parti qu'ils acknowlegde qu'une demande est à venir dans mais ils sont la journalisation de cette erreur: ssl handshake interrupted by system [hint: stop button pressed in browser?!]
.
Puisque je n'ai pas trouver toutes les informations utiles sur le net jusqu'à présent, j'ai pensé à demander à vous les gars pour un aperçu sur la question.
Toutes les suggestions que peut-être essayé? Je suis en cours d'exécution PHP 5.3.8 et l'adresse IP du serveur est en liste blanche dans le pare-feu à la partie à distance.
OriginalL'auteur Ben | 2014-11-21
Vous devez vous connecter pour publier un commentaire.
J'ai corrigé ce problème. Je pense que, en raison du nombre de questions au sujet de cette question et le nombre de solutions différentes, d'autres profiteront de la solution. Va ici:
J'ai utilisé le
openssl
programme en ligne de commande pour convertir le .p12 fichier-clé à un .pem clé de fichier. Le truc, c'est le chemin de la conversion.J'ai d'abord converti avec cette commande et j'ai eu la question, telle que décrite dans la question:
openssl pkcs12 -in key.p12 -out key.pem -nodes -clcerts
Alors que la commande ci-dessous fait la réelle astuce:
openssl pkcs12 -in key.p12 -out key.pem -clcerts
Pour plus d'informations s'il vous plaît voir la source que j'ai utilisé: https://community.qualys.com/docs/DOC-3273
Si vous avez suivi ma réponse et la clé et crt fichiers sont fusionnés avec l'hôte distant peut avoir un pare-feu activé et est le blocage de votre adresse IP. Sinon, je peux pas dire pour l'instant, peut-être que vous devriez ouvrir une question alors.
J'ai eu le même problème. Et j'ai suivi les étapes exactes à suivre @Ben a fourni. Le p12 devaient être convertis .pem en utilisant le lien fourni.Mais j'ai toujours l'erreur: curl: (58) Impossible de charger le client cert -8018 Étrangement, j'ai pensé que notre que le mot de passe que je fournissais était de 3 chiffres '123', au lieu de cela j'ai dû fournir certains valide phrase de passe de 6 caractères alphabétiques. Donc, je crois, il devrait y avoir une certaine bonne longueur de mot de passe (Ne sais pas la longueur minimale).La prochaine ce qui manquait, c'était 'local_cert', 'phrase' options qui doivent être fournies dans le SoapClient l'initialisation de l'objet.
OriginalL'auteur Ben
Même des suggestions:
- Je utiliser SoapClient pour se connecter avec le protocole SSL services, et tout fonctionne très bien sans spécifier "point final" de l'URL. Alors je vous recommande d'essayer sans cette option;
Le php SoapClient a une option nommée "ssl_method", où vous pouvez modifier certains variation du présent protocole. Essayez de modifier/spécifier ce paramètre si vous savez ce protocole est utilisé;
Spécifier "verifypeer => false" et "verifyhost => false", params liste;
1:
Je l'ai essayé sans le point de terminaison; avec pas de chance.2:
À cause de ma version de PHP, je suis incapable d'utiliser ssl_method.3:
Ai-je tort ou sont verifypeer et verifyhost sans-papiers paramètres (ou au moins ils ne sont pas dans la doc: php.net/manual/en/soapclient.soapclient.php). Pas de différence dans la fourniture.Specify "verifypeer => false" and "verifyhost => false" on params list;
Cela signifie désactiver la sécurité. toujours une mauvaise idéeOriginalL'auteur rcsalvador