Création d'une requête SOAP PHP avec un certificat
Je cherche à créer un PHP SAVON de connexion à un .NET Web Service qui a un certificat auto-signé pour verrouiller le service de communication via le protocole HTTPS. Je continue de recevoir des erreurs et je ne suis pas sûr si elle a quelque chose à voir avec la façon dont j'ai créer le certificat, mon Apache/PHP, la façon dont j'ai essayé d'établir la demande SOAP ou quelque chose d'autre. Si quelqu'un a des pointeurs ils seront grandement appréciés. Merci à l'avance.
De Génération De Certificat
C'est ainsi que je suis entrain de créer le certificat.
- Créer la confiance de la racine de la clé privée:
genrsa-out ca_authority_prv.pem 2048
- Créer de l'autorité racine de confiance cert:
req-new-key ca_authority_prv.pem -x509-out ca_authority_cert.pem
- Faire le cert de l'autorité de confiance:
x509-in ca_authority_cert.pem -out ca_authority_trust.pem -trustout
- Sortie d'OpenSSL et de créer une série de fichiers:
echo 1000 > ca_authority.srl
- Créer la clé privée du client:
genrsa-out Client_prv.pem 2048
- Créer à la demande du client:
req-new-key Client_prv.pem -out Client_req.pem
- Signer la demande du client avec le CA:
x509 -req -CA ca_authority_trust.pem -CAserial ca_authority.srl -CAkey ca_authority_prv.pem dans Client_req.pem -out Client_cert.pem
- Faire le pfx pour le client cert
pkcs12-export -dans Client_cert.pem -inkey Client_prv.pem -out Client_cert.pfx
Installation IIS
Une fois ce certificat est créé j'ai suivi les mêmes étapes que pour un certificat de serveur et:
- Ajouter l'autorité de certification racine de confiance à la Machine Magasin Racine de Confiance
- Ajouter le certificat de serveur pour le magasin de l'ordinateur
- Installation de IIS pour utiliser le certificat de serveur et de client certificats
PHP Requête SOAP
C'est le code que j'utilise établir le PHP requête SOAP (ci-dessous, le message d'erreur):
$wsdl = "https://localhost/MyService/MyService.asmx";
$local_cert = "C:\\Certs\client_cert.pem";
$passphrase = "openSaysMe";
$soapClient = new SoapClient($wsdl, array('local_cert'=> $local_cert,'passphrase'=>$passphrase));
$theResponse = $soapClient->test();
ERREUR
Warning: SoapClient::SoapClient() [soapclient.soapclient]: Unable to set private key file `C:\Certs\client_cert.pem' in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Warning: SoapClient::SoapClient() [soapclient.soapclient]: failed to create an SSL handle in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Warning: SoapClient::SoapClient() [soapclient.soapclient]: Failed to enable crypto in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Warning: SoapClient::SoapClient(https://localhost/MyService/MyService.asmx) [soapclient.soapclient]: failed to open stream: operation failed in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "https://localhost/MyService/MyService.asmx" in C:\Program Files\Apache Group\Apache2\htdocs\soapWithAuth.php on line 53
Error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://localhost/MyService/MyService.asmx'
JOURNAL DES ERREURS
PHP Warning: SoapClient::SoapClient() [<a href='soapclient.soapclient'>soapclient.soapclient</a>]: failed to create an SSL handle in C:\\Program Files\\Apache Group\\Apache2\\htdocs\\soapWithAuth.php on line 54
source d'informationauteur likestoski
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à le faire fonctionner mais il y a quelques bizarreries que je me le demande. Plus précisément, la nécessité de combiner le certificat du client et la clé privée dans un fichier unique à envoyer avec la Requête Soap ainsi que le certificat de mot de passe a été la rupture de la demande, même si le PHP Savon documentation inclut explicitement comme une option. Si quelqu'un a des suggestions sur la façon d'améliorer ce que j'aimerais entendre.
1) Créer la OpenSsl client et le serveur de certificats et de signer avec le certificat de l'autorité. Lors de la création du certificat ne pas attribuer un mot de passe, appuyez simplement sur le bouton enter.
2) Importez le certificat de serveur fichier d'autorité à la Machine dans le magasin de certificats en vertu de la racine de confiance. Vous pouvez obtenir ce à l'aide de la console MMC de commande à l'invite de commandes, puis en ajoutant le composant logiciel enfichable Certificats.
3) Importer le certificat de Serveur dans le magasin de l'ordinateur magasin de certificats Personnels
4) Importer le certificat du client dans le compte local de stockage Personnel. Vous pouvez le faire en tapant certmgr.msc à l'invite de commande.
5) assurez-vous d'avoir Apache avec SSL version de PHP en cours d'exécution. Si vous avez déjà eu un non-version de php de PHP installé, vous pouvez suivre ces étapes pour configurer votre serveur Apache à exécuter à l'aide de SSL.
À l'intérieur de httpd.conff
À l'intérieur de php.ini
6) Configurer IIS pour utiliser un certificat SSL en utilisant les étapes suivantes:
7) de la Création de l'PHP requête SOAP (la méthode test() doit être une méthode valable dans votre Web service):
8) Placez ce fichier dans votre répertoire d'Apache. Par Défaut: 'C:\Program Files\Apache Group\Apache2\htdocs'
9) Vous avez besoin d'accéder au certificat de client. Dans les étapes que vous avez pris pour produire le client et le serveur de certificats que vous avez également produit les fichiers de clés privées. Ouvrez le client_prv.pem (le client fichier de clé privée) et copier le contenu dans un nouveau document avec un éditeur de texte. Il est probablement plus sûr d'utiliser quelque chose comme Textpad qui nous l'espérons ne pas ajouter un tas de caractères spéciaux, d'un certificat analyseurs sont très pointilleux. Immédiatement après la clé privée de la partie placez le contenu du certificat client (client_cer.pem) de sorte que le fichier résultant est un non échappée copie de la clé privée du client et le client
certificat. Enregistrer le fichier dans un répertoire, vous pouvez obtenir à partir du fichier php. Dans l'exemple ci-dessus, le fichier résultant est le
'C:\SoapCerts\ClientKeyAndCer.pem' fichier.
9) Naviguez jusqu'à localhost/nameOfYourFile.php. Vous devriez voir un succès de la connexion au service, avec une réponse de correspondance les résultats attendus de votre
Méthode de service Web.