Te recomendamos que revises esta solución en un ambiente controlado antes de pasarlo a producción, saludos.
Solución:
Me las arreglé para hacer que esto funcione, pero hay algunas rarezas sobre las que me pregunto. Específicamente la necesidad de combinar el certificado de cliente y privado key en un solo archivo para enviar junto con la solicitud de Soap, así como la frase de contraseña del certificado, estaba rompiendo la solicitud, aunque la documentación de PHP Soap la incluye explícitamente como una opción. Si alguien tiene información sobre cómo mejorar esto, me encantaría escucharla.
1) Cree los certificados de servidor y cliente OpenSsl y fírmelos con la autoridad de certificación. Al crear el certificado, no les asigne una frase de contraseña, simplemente presione el botón Intro en ese punto.
2) Importe el archivo de la autoridad de certificación del servidor en el almacén de certificados de la máquina en la raíz de confianza. Puede llegar a esto usando el comando MMC en el símbolo del sistema y luego agregando el complemento Certificados.
3) Importe el certificado del servidor en el almacén de máquinas Almacén de certificados personales
4) Importe el certificado del cliente en el almacén personal de la cuenta local. Puede hacerlo escribiendo certmgr.msc en el símbolo del sistema.
5) Asegúrese de tener Apache con una versión SSL de PHP ejecutándose. Si ya tenía instalada una versión de PHP que no es php, puede seguir estos pasos para configurar su servidor Apache para que se ejecute con SSL.
En el interior httpd.conff
a) Remove the comment ‘#’ at line : LoadModule ssl_module modules/mod_ssl.so
b) Remove the comment ‘#’ at the line inside ``: Include /extra/httpd-ssl.conf
and move this line after the block `…. `
En el interior php.ini
c) Remove the comment ‘;’ at the line which says: extension=php_openssl.dll
6) Configure IIS para usar un certificado y SSL siguiendo los siguientes pasos:
a) Right click the 'Default Website' node choose 'Properties'
b) 'Directory Security' tab 'Server Certificate' button. Follow the wizard to select the certificate you imported into the store then complete the wizard and return to the 'Directory Security' tab.
c) Under 'Secure Communications' select the 'Edit' button.
d) Check the 'Require Secure Channel (SSL) checkbox.
7) Crear la solicitud PHP SOAP (el método test() debería ser un método válido en su servicio web):
$wsdl = "https://localhost/MyService/myservices.asmx?wsdl";
$local_cert = "C:\SoapCertsClientKeyAndCer.pem";
$soapClient = new SoapClient($wsdl, array('local_cert' => $local_cert));
$theResponse = $soapClient->test();
8) Coloque este archivo en su directorio de Apache. Por defecto: ‘C:Archivos de programaApache GroupApache2htdocs’
9) Necesitará acceso al certificado de cliente. En los pasos que siguió para producir los certificados de cliente y servidor, también produjo el privado key archivos Abra client_prv.pem (el cliente privado key archivo) y copie el contenido en un nuevo documento con un editor de texto. Probablemente sea más seguro usar algo como Textpad que, con suerte, no agregará un montón de caracteres especiales, los analizadores de certificados son muy exigentes. Inmediatamente después del privado key En parte, coloque el contenido del certificado del cliente (client_cer.pem) para que el archivo resultante sea una copia sin escape del certificado privado del cliente. key y cliente
certificado. Guarde el archivo resultante en un directorio al que pueda acceder desde el archivo php. En el ejemplo anterior, el archivo resultante es el
Archivo ‘C:SoapCertsClientKeyAndCer.pem’.
9) Navegue hasta localhost/nameOfYourFile.php. Debería ver una conexión exitosa al servicio con una respuesta que coincida con los resultados esperados de su
Método de servicio web.
valoraciones y comentarios
Si haces scroll puedes encontrar las críticas de otros creadores, tú incluso tienes la opción de dejar el tuyo si dominas el tema.