Contraseña / contraseña de SSLSocket en Python

He estado buscando hacer un servicio de notificaciones push de iOS para una de mis aplicaciones últimamente. Tiene un backend de Python 2.7, así que quería hacerlo en Python en lugar de PHP (o cualquier otra cosa).

Tengo un código que envía una notificación y el dispositivo lo recibe, sin embargo, cada vez que ejecuto el código me pide que ingrese manualmente una ‘frase de contraseña’ para el archivo PEM.

Esto no es ideal, ya que quiero que todo este automatizado en el servidor, cuando necesita enviar una notificación, solo debe enviarla. No puedo encontrar nada en la documentación de Python 2.7 que me permita configurar automáticamente la frase de paso de una variable al conectar.

Si alguien sabe cómo hacer esto en Python 2.7 o cualquier otra idea, estaría muy agradecido.

Aquí hay un fragmento de código:

certfile = 'devPEM.pem' apns_address = ('gateway.sandbox.push.apple.com', 2195) s = socket.socket() sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3, certfile=certfile) sock.connect(apns_address) 

Gracias por adelantado.

Así que la respuesta que BorrajaX sugirió fue no establecer una contraseña para la clave cuando se le solicite. Sin embargo, esto no es posible ya que (al menos en mi Mac) quiere que la contraseña tenga un mínimo de 4 caracteres.

Los pasos para solucionar esto son:

  1. Crea el certificado en el portal de desarrolladores.
  2. Descargue y abra el certificado localmente en Keychain Access
  3. Exporte la clave privada del certificado como un archivo .p12 desde Keychain Access (lo llamé aps_key.p12).
  4. Ejecute lo siguiente en la clave .p12:
    openssl pkcs12 -nocerts -out aps_key.pem -in aps_key.p12
  5. Introduzca una contraseña (la cual eliminaremos en un minuto).
  6. Ejecuta lo siguiente para quitar la contraseña:
    openssl rsa -in aps_key.pem -out new_aps_key.pem
  7. Convierta el archivo .cer descargado del Centro de desarrolladores a un archivo .pem:
    openssl x509 -in aps.cer -inform der -out aps.pem
  8. Combine la clave y los archivos .pem de certificado con lo siguiente:
    cat aps.pem new_aps_key.pem > final_aps.pem
  9. Ahora puede eliminar todos los demás archivos, excepto final_aps.pem .

El archivo final_aps.pem luego trabaja con el código anterior sin que se le solicite una contraseña / contraseña.

Este es un sitio web útil donde encontré el código para eliminar la contraseña del archivo .pem: http://www.sslshopper.com/article-most-common-openssl-commands.html

Editar: Si no necesita el certificado y la clave en el mismo archivo, puede ignorar el paso 8 y usar los archivos aps.pem y new_aps_key.pem .