2009-05-01 21 views
8

Soy nuevo en php y estoy recibiendo este error al intentar cargar un CERTerror utilizando certificado SSL con PHP

jameys-macbookpro41:~ user$ php -f ~/Sites/providerService.php 

Advertencia: stream_socket_client(): No se puede establecer la cadena de archivos cert local de `cert.pem' ; Compruebe que las configuraciones de cafble/capath incluyen detalles de su certificado y su emisor en /Users/jamey/Sites/providerService.php en la línea 27

cert.pem está en la misma carpeta que el archivo php. cert.pem el archivo fue creado en la herramienta de Apple llavero

class pushNotifications { 
... 
    private $sslPem = 'cert.pem'; 
... 
    function connectToAPNS(){ 
      $streamContext = stream_context_create(); 
      stream_context_set_option($streamContext, 'ssl', 
      'local_cert', $this->sslPem); 

Gracias por cualquier ayuda!

Respuesta

15

Está recibiendo un error porque está tratando de encontrar su archivo cert.pem en el directorio desde el que está ejecutando el script, no en el directorio en el que está el script. En su ejemplo, es su directorio de usuario "~".

trate de cambiar su clase para esto, o algo similar:

class pushNotifications { 
... 
    private $sslPem = 'cert.pem'; 
... 
    function connectToAPNS(){ 
      $streamContext = stream_context_create(); 
      stream_context_set_option($streamContext, 'ssl', 'local_cert', dirname(__FILE__) . '/' . $this->sslPem); 
+0

Estoy pasando esa línea ahora, así que supongo que lo arregló, ¡Gracias! –

+0

resulta que no era (todo) ahora lo consigo. Advertencia: stream_socket_client(): no se puede establecer el archivo de cadena de cert local '/Users/jamey/Sites/cert.pem '; Verifique que su configuración cafble/capath incluya detalles de su certificado y su emisor en /Users/jamey/Sites/providerService.php en la línea 29 –

+0

¿Está utilizando un certificado autofirmado? –

10

que estaba teniendo este problema, así, resulta que por alguna razón mi clave privada no coincide con el que está asociado con el aps_developer_identity .cer tuve ...

Terminé borrando todos todos mis claves públicas y privadas de mi elemento de llavero 'inicio de sesión', luego comencé todo el proceso otra vez (Genere la solicitud) ... Envié el nuevo archivo de solicitud en el portal del programa y generó un nuevo certificado, descargado e instalado haciendo doble clic en él (developer_identity.cer). Luego, reinicié los perfiles de aprovisionamiento para usar los nuevos certificados SSL Push, los descargué y los instalé haciendo doble clic (aps_developer_identity.cer). Finalmente, restablecí el perfil de provisión y descargué el nuevo. Limpié el anterior en el Organizador de Xcode e instalé el nuevo. Por último, he exportado mi llave 'privado' como key.p12 y mi aps_developer_identity.cer como apsdi.p12, y encontré los siguientes comandos en contra de ellos:

openssl pkcs12 -clcerts -nokeys -out apsdi.pem -in apsdi.p12 
openssl pkcs12 -nocerts -out key.pem -in key.p12 

Si estás bien utilizando una frase de contraseña (recomendado para la producción):

cat apsdi.pem key.pem > cert.pem 

Si desea utilizar una frase de contraseña 'en blanco', que necesita para desencriptar la clave privada en primer lugar, utilizando la contraseña que especificó al convertir a formato PEM:

openssl rsa -in key.pem -out key.unencrypted.pem 

Y luego gato el certificado y la clave sin cifrar en apns.pem (o cualquier nombre de archivo que ha elegido):

cat apsdi.pem key.unencrypted.pem > apns.pem 

Es muy importante que exporte su certificado aps_developer_identity, no su certificado developer_identity como APSDI. pem.

Si puede expandir sus entradas de developer_identity.cer y aps_developer_identity.cer en Keychain Access, y verá una clave 'privada' cuando lo haga, todo debería funcionar.

+0

Muchas gracias hombre, genio –

+0

No hay problema :-) Me alegro de que al menos alguien lo encontró útil! – sluther

0

Notas para el futuro (después de un gran dolor de cabeza debido a todo esto): 1. si obtiene el error de handshake, es probable que el archivo de pem que creó sea incorrecto.

a. asegúrese de que el archivo esté en el mismo directorio que el php que está tratando de ejecutar. b. Exporte el archivo certifcate p12 Y la clave debajo de él en la utilidad de acceso de llavero. Ambos de estos archivos serán del MISMO tamaño, pero SON diferentes. c. realice los comandos "openssl" anteriores en el terminal de Macintosh.

  1. Actualmente, todo lo que puedo hacer es ejecutar el php como sudo, debido a la chmod 400 para ck.pem. algo tiene que dar ...

Por cierto, el mensaje "Falló la activación de la criptografía" desaparecerá cuando el sistema se ejecute correctamente.

2

Como una sugerencia complementaria, para cualquier persona que tenga el mismo problema: al exportar la clave privada del acceso de llavero de Apple, y la conversión a .pem, ESPECIFICAR UNA CONTRASEÑA.

Por alguna razón, parece que al dejar una contraseña en blanco en una de las exportaciones se elimina la clave privada, por lo que el .pem final no está completo.

Así que ponga una contraseña ficticia, incluso si luego la elimina usando openssl.

+0

Esto funcionó para mí. Al no usar una contraseña al exportar los certificados/claves, no se generaron archivos .pem operativos. –

0

Sólo cambiar el propietario a www-data Se trabajará :)

sudo chown www-ck.pem data.www-datos de usuario

deafult de Apache www-data

Cuestiones relacionadas