J'ai reçu deux fichiers de certificat du fournisseur, un dans un format .cer et un dans un format .p7b. J'ai ensuite converti le certificat p7b en un certificat p12. Avec ce certificat, je suis capable de me connecter au wsdl depuis mon navigateur. Ensuite, j'ai procédé à la conversion de ce certificat au format .pem, en suivant les instructions que j'ai trouvées sur ce site.Problème de connexion au service Web crypté SSL avec PHP
openssl pkcs12 -clcerts -nokeys -out test.pem -in mycert.p12
openssl pkcs12 -nocerts -out key.pem -in mycert.p12
peignage alors le cert avec la clé en utilisant la commande suivante:
cat test.pem key.pem > cert.pem
Heres ma construction pour la classe de service Web:
public function __construct() {
$wsdl_url = 'https://url.to/web_service?wsdl';
$pass = 'passphrase';
$cert = 'cert.pem';
try {
$this->client = new SoapClient($wsdl_url, array('local_cert' => $cert, 'passphrase' => $pass));
} catch(SoapFault $e) {
print_r($e);
}
}
Et voici l'erreur:
SSL operation failed with code 1. OpenSSL Error messages: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca in /var/www/html/..
Essayer de vérifier le certificat en utilisant:
openssl verify cert.pem
me donne l'erreur suivante:
error 20 at 0 depth lookup:unable to get local issuer certificate
J'ai aussi essayé de créer le certificat .pem en utilisant la commande openssl suivante:
openssl pkcs12 -in mycert.p12 -out mycert.pem
Vérification cela me donne OK, mais PHP me donne l'erreur suivante:
Unable to set local cert chain file `mycert.pem'; Check that your cafile/capath settings include details of your certificate and its issuer
Je suppose qu'il devrait être possible de le faire fonctionner d'une manière ou d'une autre, étant donné que je peux accéder au wsdl via mon navigateur, en utilisant le certificat .p12. Mais je ne suis pas en mesure de trouver une solution quant à la façon dont je devrais procéder. Merci d'avance.