¿Crear un archivo .pem para APNS?

177

¿Cómo creo un archivo .pem para almacenarlo en el servidor de alojamiento de datos de carga útil de APN?

Biranchi
fuente
1
¿Puedo usar .p12 para apns en lugar de .pem?
Gajendra K Chauhan
Para su información, .pem: serverfault.com/a/21158/193377 PEM por sí solo no es un certificado, es solo una forma de codificar datos. .... es seguro pegarlo en el cuerpo de un mensaje de correo electrónico porque tiene líneas de anclaje y está limpio de 7 bits.
AnneTheAgile

Respuestas:

365

Esto es lo que hice, desde: blog.boxedice.com y "iPhone Advanced Projects" capítulo 10 por Joe Pezzillo.

Con aps_developer_identity.cer en el llavero:

  1. Inicie Keychain Access desde su Mac local y desde el llavero de inicio de sesión, filtre por la categoría Certificados. Verá una opción expandible llamada "Servicios de desarrollo de Apple Push"
  2. Haga clic derecho en "Apple Development Push Services"> Exportar "Apple Development Push Services ID123". Guarde esto como apns-dev-cert.p12archivo en algún lugar donde pueda acceder. No es necesario ingresar una contraseña.
  3. El siguiente comando genera el certificado en la Terminal de Mac para formato PEM (Certificado de seguridad de correo con privacidad mejorada):

    openssl pkcs12 -in apns-dev-cert.p12 -out apns-dev-cert.pem -nodes -clcerts

En el servidor, configure el permiso de archivo de esta clave no cifrada mediante el uso de chmod 400.

zaph
fuente
3
He seguido los pasos anteriores y ahora funciona. He mantenido el certificado y el script php en mi servidor web local (Xampp). Puedo obtener el token del dispositivo y lo estoy usando en el script php. El script php puede conectarse y enviar datos de carga útil. Pero aún así no puedo obtener la Notificación PUSH. Cuál es el problema ? ¿Las notificaciones tardan en llegar?
Biranchi
12
En el acceso de llavero de Mavericks (10.9), hay una opción para exportar como .pem. Simplemente haga clic con el botón derecho en el "Certificado de servicios de desarrollo iOS de Apple Development / Production dentro de Keychain Access y elija Exportarlo. Cambie el formato de archivo a .pem - hecho! También disponible como opciones de exportación: .p7b y .p12
tylerl
55
.pem está deshabilitado para mí, yosemite beta7. Tengo algunos problemas para crear el .pem, cuando lo abro dice que es para distribución en lugar de dev
Cristi Băluță
2
.pem no está deshabilitado para mí, pero no puedo guardarlo como p12. Así es como se ve: i.imgur.com/U2M40dU.png
FooBar
2
Para macOS 10.14 Mojave que utiliza la aplicación Keychain Access, puede elegir Exportar sus "Servicios Apple Push: com.yourBundleIdentifier Certificate" al Formato de archivo "Correo mejorado de privacidad (.pem)" y guardar cuando lo desee.
5uper_0leh
226

Fase de desarrollo:

Paso 1: Crear certificado .pem desde certificado .p12
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

Paso 2: Crear clave .pem a partir de clave .p12
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12

Paso 3 (Opcional): si desea eliminar la frase de contraseña solicitada en el segundo paso
openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem

Paso 4: ahora tenemos que fusionar Key .pem y Certificate .pem para obtener Development .pem necesario para las notificaciones push en la fase de desarrollo de la aplicación.

Si se realizó el tercer paso, ejecute:
cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

Si el tercer paso no fue realizó el , ejecute:
cat apns-dev-cert.pem apns-dev-key.pem > apns-dev.pem

Paso 5: Verifique la validez del certificado y la conectividad a APNS

Si se realizó el tercer paso, ejecute:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert.pem -key apns-dev-key-noenc.pem

Si no se realizó el tercer paso , ejecute:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert.pem -key apns-dev-key.pem

Fase de produccion:

Paso 1: Crear certificado .pem desde certificado .p12
openssl pkcs12 -clcerts -nokeys -out apns-pro-cert.pem -in apns-pro-cert.p12

Paso 2: Crear clave .pem a partir de clave .p12
openssl pkcs12 -nocerts -out apns-pro-key.pem -in apns-pro-key.p12

Paso 3 (Opcional): si desea eliminar la frase de contraseña solicitada en el segundo paso
openssl rsa -in apns-pro-key.pem -out apns-pro-key-noenc.pem

Paso 4: ahora tenemos que fusionar Key .pem y Certificate .pem para obtener Production .pem necesario para las notificaciones push en la fase de producción de la aplicación.

Si se realizó el tercer paso, ejecute:
cat apns-pro-cert.pem apns-pro-key-noenc.pem > apns-pro.pem

Si no se realizó el tercer paso , ejecute:
cat apns-pro-cert.pem apns-pro-key.pem > apns-pro.pem

Paso 5: Verifique la validez del certificado y la conectividad a APNS.

Si se realizó el tercer paso, ejecute:
openssl s_client -connect gateway.push.apple.com:2195 -cert apns-pro-cert.pem -key apns-pro-key-noenc.pem

Si no se realizó el tercer paso , ejecute:
openssl s_client -connect gateway.push.apple.com:2195 -cert apns-pro-cert.pem -key apns-pro-key.pem

Ashish Chhabra
fuente
55
Gracias, este es el único aquí que funcionó para mí.
Erik Villegas
66
¡Salvé esto en mi preciosa bóveda! : P ¡La mejor respuesta!
Ennegrecimiento
3
Eres un dios, esto funciona, gracias. UP VOTE. Esta debería ser la respuesta porque profundiza en cómo crearla paso a paso
MNM
2
Ciertamente, esta debería ser la respuesta aceptada porque la respuesta de @Rahul Sharma no produjo el resultado esperado, mientras que esta respuesta fue perfecta.
Nowdeen
Gracias, me ahorró horas para verificar la validez del certificado. Esta debería ser la respuesta aceptada @Biranchi
Sourabh Sharma
59

Pasos:

  1. Crear una CSR utilizando el acceso a la cadena clave
  2. Crear un P12 usando el acceso a la cadena de claves usando la clave privada
  3. ID de aplicación APNS y certificado

Esto te da tres archivos:

  • La RSE
  • La clave privada como un archivo p12 ( PushChatKey.p12)
  • El certificado SSL, aps_development.cer

Vaya a la carpeta donde descargó los archivos, en mi caso el Escritorio:

$ cd ~/Desktop/

Convierta el archivo .cer en un archivo .pem:

$ openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem

Convierta el archivo .p12 de la clave privada en un archivo .pem:

$ openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12

Ingrese la contraseña de importación:

MAC verified OK Enter PEM pass phrase: Verifying - Enter PEM pass phrase:

Primero debe ingresar la frase de contraseña para el archivo .p12 para que openssl pueda leerlo. Luego, debe ingresar una nueva frase de contraseña que se utilizará para cifrar el archivo PEM. Nuevamente para este tutorial utilicé "pushchat" como frase de contraseña PEM. Deberías elegir algo más seguro. Nota: si no ingresa una frase de contraseña PEM, openssl no mostrará un mensaje de error, pero el archivo .pem generado no tendrá la clave privada.

Finalmente, combine el certificado y la clave en un solo archivo .pem:

$ cat PushChatCert.pem PushChatKey.pem > ck.pem

sarit bahuguna
fuente
22

Inicie la aplicación Terminal e ingrese el siguiente comando después de la solicitud

  openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes
Durai Amuthan.H
fuente
1
Después de generar un p12, esta debería ser la respuesta.
Piedra
10

- >> Tutorial propio de Apple << - es el único conjunto de instrucciones que he encontrado. Es sencillo y puedo confirmar que funciona de manera brillante tanto en un servidor PHP de Linux como en un servidor PHP de Windows.

Puede encontrar su proceso de creación de pem de 5 pasos justo en la parte inferior de la página.

capikaw
fuente
¡Si! Solo sigue el sencillo tutorial. Solo un simple comando openssl. No sé si importa, pero ejecuté el comando por SSH'ing en el servidor que se conecta a APNS.
tylerl
1
@tylerl, el PEM se puede generar desde cualquier máquina, no tiene que ser el servidor en el que residirá.
capikaw
¿Necesito ejecutar este proceso en el servidor donde se implementa el código php? ¿o puedo usar el archivo .pem generado desde mi mac?
Jatin
44
Enlace roto a partir de septiembre de 2015
Nicolas Miari
4

NOTA: Debe tener el rol de Agente de equipo o Administrador en App Store Connect para realizar cualquiera de estas tareas. Si no eres parte de un equipo en App Store Connect, esto probablemente no te afecte.

El envío de notificaciones push a una aplicación iOS requiere la creación de claves de cifrado. En el pasado, este era un proceso engorroso que utilizaba claves y certificados SSL. Cada certificado SSL era específico para una sola aplicación iOS. En 2016, Apple introdujo un nuevo mecanismo de clave de autenticación que es más confiable y más fácil de usar. Las nuevas claves de autenticación son más flexibles, fáciles de mantener y aplicar a más aplicaciones que iOS.

Aunque han pasado años desde que se introdujeron las claves de autenticación, no todos los servicios las admiten. FireBase y Amazon Pinpoint admiten claves de autenticación. Amazon SNS, Urban Airship, Twilio y LeanPlum no lo hacen. Muchos paquetes de software de código abierto aún no admiten claves de autenticación.

Para crear el certificado SSL requerido y exportarlo como archivo PEM que contiene claves públicas y privadas:

  1. Vaya a Certificados, identificadores y perfiles.
  2. Cree o edite su ID de aplicación.
  3. Habilitar notificaciones push para la ID de la aplicación
  4. Agregar un certificado SSL a la ID de la aplicación
  5. Convierta el certificado a formato PEM

Si ya tiene el certificado SSL configurado para la aplicación en el sitio web del Centro de Desarrolladores de Apple, puede saltar para convertir el certificado al formato PEM. Tenga en cuenta que se encontrará con problemas si no tiene también la clave privada que se generó en la Mac que creó la solicitud de firma que se cargó en Apple.

Siga leyendo para ver cómo evitar perder el rastro de esa clave privada.

Vaya a Certificados, identificadores y perfiles.

Xcode no controla certificados o claves para notificaciones push. Para crear claves y habilitar notificaciones push para una aplicación, debe ir al sitio web del Centro de desarrolladores de Apple. La sección Certificados, identificadores y perfiles de su cuenta controla los ID y certificados de la aplicación.

Para acceder a los certificados y perfiles, debe tener una membresía paga del Programa de Desarrolladores de Apple o ser parte de un Equipo que lo tenga.

  1. Inicie sesión en el sitio web de Apple Developer ingrese la descripción de la imagen aquí
  2. Vaya a Cuenta , luego Certificados, identificadores y perfiles ingrese la descripción de la imagen aquí

Crear una ID de aplicación

Las aplicaciones que usan notificaciones push no pueden usar ID de aplicación comodín ni perfiles de aprovisionamiento. Cada aplicación requiere que configure un registro de ID de aplicación en el portal del Centro de desarrolladores de Apple para habilitar las notificaciones automáticas.

  1. Vaya a ID de aplicaciones en Identificadores
  2. Busque su aplicación usando el identificador de paquete. Puede que ya exista.
  3. Si no hay una ID de aplicación existente para la aplicación, haga clic en el botón (+) para crearla.
  4. Seleccione ID de aplicación explícita en la sección Sufijo de ID de aplicación . ingrese la descripción de la imagen aquí
  5. Ingrese el identificador de paquete para la aplicación.
  6. Desplácese hasta la parte inferior y habilite las notificaciones push . ingrese la descripción de la imagen aquí
  7. Haga clic en continuar .
  8. En la siguiente pantalla, haga clic en Registrarse para completar la creación de la ID de la aplicación. ingrese la descripción de la imagen aquí

Habilitar notificaciones push para la ID de la aplicación

  1. Vaya a ID de aplicaciones en Identificadores
  2. Haga clic en la ID de la aplicación para ver los detalles y desplácese hasta la parte inferior. ingrese la descripción de la imagen aquí
  3. Haz clic en Editar ingrese la descripción de la imagen aquí
  4. En la pantalla de configuración de ID de la aplicación, desplácese hacia abajo hasta Notificaciones push ingrese la descripción de la imagen aquí
  5. Seleccione la casilla de verificación para habilitar las notificaciones push. ingrese la descripción de la imagen aquí

Crear certificados SSL para notificaciones push es un proceso de varias tareas. Cada tarea tiene varios pasos. Todos estos son necesarios para exportar las claves en formato P12 o PEM. Revise los pasos antes de continuar.

Agregar un certificado SSL a la ID de la aplicación

  1. En Certificado SSL de desarrollo, haga clic en Crear certificado . Tendrá que hacer esto más tarde para la producción también.
  2. Apple le pedirá que cree una solicitud de firma de certificado ingrese la descripción de la imagen aquí

Para crear un certificado, deberá realizar una Solicitud de firma de certificado (CSR) en una Mac y subirla a Apple.

Más adelante, si necesita exportar este certificado como un archivo pkcs12 (también conocido como p12), deberá usar el llavero de la misma Mac . Cuando se crea la solicitud de firma, Keychain Access genera un conjunto de claves en el llavero predeterminado. Estas claves son necesarias para trabajar con el certificado que Apple creará a partir de la solicitud de firma.

Es una buena práctica tener un llavero separado específicamente para las credenciales utilizadas para el desarrollo. Si hace esto, asegúrese de que este llavero esté configurado como predeterminado antes de usar Certificate Assistant.

Crear un llavero para credenciales de desarrollo

  1. Abra Keychain Access en su Mac
  2. En el menú Archivo , seleccione Nuevo llavero ...
  3. Déle a su llavero un nombre descriptivo, como "Desarrollo compartido" o el nombre de su aplicación

Crear una solicitud de firma de certificado (CSR)

Al crear la Solicitud de firma de certificado, el Asistente de certificado genera dos claves de cifrado en el llavero predeterminado. Es importante hacer que el llavero de desarrollo sea el predeterminado para que las claves estén en el llavero correcto.

  1. Abra Keychain Access en su Mac.
  2. Control-clic en el llavero de desarrollo en la lista de llaveros
  3. Seleccione Hacer que el llavero "Desarrollo compartido" sea predeterminado ingrese la descripción de la imagen aquí
  4. En el menú Acceso al llavero , seleccione Asistente de certificado , luego Solicite un certificado de una autoridad de certificación ... en el submenú ingrese la descripción de la imagen aquí
  5. Cuando aparezca el Asistente de certificados, marque Guardado en disco . ingrese la descripción de la imagen aquí
  6. Ingrese la dirección de correo electrónico asociada con su membresía del Programa de Desarrolladores de Apple en la Dirección de correo electrónico del usuario campo .
  7. Ingrese un nombre para la clave en el campo Nombre común . Es una buena idea usar el ID de paquete de la aplicación como parte del nombre común. Esto facilita saber qué certificados y claves pertenecen a qué aplicación.
  8. Haz clic en continuar. El Asistente de certificados le pedirá que guarde la solicitud de firma en un archivo.
  9. En Keychain Access, haga que el llavero de "inicio de sesión" vuelva a ser el predeterminado.

La creación de la solicitud de firma generó un par de claves. Antes de cargar la solicitud de firma, verifique que el llavero de desarrollo tenga las claves. Sus nombres serán los mismos que el Nombre común utilizado en la solicitud de firma.

ingrese la descripción de la imagen aquí

Cargue la solicitud de firma de certificado (CSR)

Una vez que se crea la Solicitud de firma de certificado, cárguela al Centro de desarrolladores de Apple. Apple creará el certificado de notificación push a partir de la solicitud de firma.

  1. Cargue la solicitud de firma de certificado
  2. Descargue el certificado que Apple ha creado a partir de la Solicitud de firma de certificado ingrese la descripción de la imagen aquí
  3. En Keychain Access, seleccione el llavero de desarrollo de la lista de llaveros
  4. En el menú Archivo , seleccione Importar elementos ... ingrese la descripción de la imagen aquí
  5. Importe el archivo de certificado descargado de Apple

Su llavero de desarrollo ahora debe mostrar el certificado push con una clave privada en Mis certificados en Acceso a llaveros:

ingrese la descripción de la imagen aquí

En este punto, se debe hacer una copia de seguridad del llavero de desarrollo. Muchos equipos mantienen sus certificados push en unidades USB seguras, se comprometen a controlar la versión interna o usan una solución de respaldo como Time Machine. El llavero de desarrollo se puede compartir entre diferentes miembros del equipo porque no contiene ninguna credencial de firma de código personal.

Los archivos de llavero se encuentran en ~/Library/Keychains.

Algunos servicios push de terceros requieren certificados en formato Privacy Enhanced Mail (PEM), mientras que otros requieren estándares de criptografía de clave pública # 12 (PKCS12 o P12). El certificado descargado de Apple se puede usar para exportar certificados en estos formatos, pero solo si ha mantenido la clave privada.

Convierta el certificado a formato PEM

  1. En Keychain Access, seleccione el llavero de desarrollo creado anteriormente.
  2. Seleccione el certificado push en Mis certificados . Debería haber una clave privada con ella. ! [Descargar certificado push CER] (keychain / import complete.png)
  3. En el menú Archivo , seleccione Exportar elementos ... ingrese la descripción de la imagen aquí
  4. En el panel de guardado que se abre, seleccione Privacy Enhanced Mail (.pem) como formato de archivo.
  5. Guarda el archivo
sofocante
fuente
3

Sugeriría una solución mucho más simple. Solo usa Certifire .
Certifire es una aplicación de macOS que genera certificados de notificación push de Apple con solo un clic en un par de segundos.

Estos son los pasos:
1. Descargue la aplicación.
2. Inicie sesión con sus credenciales de cuenta de desarrollador de Apple.
3. Elija el ID de la aplicación
4. Haga clic en el botón "Generar"
5. ¡Ya está!

Obtendrá certificados APN en formato .pem y en formato .p12. ¡Aún más, también obtendrás .pem y .p12 combinados (clave + certificado)!
¡Mucho más, también obtendrá versiones sin contraseña de todos estos certificados!

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

arturdev
fuente
2

Así es como lo hice en Windows 7, después de instalar OpenSSL (el enlace va al instalador Win32, elija la última versión y no la versión ligera).

Con este método solo necesita el .cerarchivo descargado de Apple.

c:\OpenSSL-Win32\bin\openssl.exe x509 -in aps_development.cer -inform DER -out developer_identity.pem -outform PEM

esto creará un archivo que luego deberá agregar su clave privada también.

-----
COMIENCE LA CLAVE PRIVADA ----- MIIEuwIBADANBgkqhk .... etc
MIIEuwIBADANBgkqhk .... etc
MIIEuwIBADANBgkqhk .... etc
MIIEuwIBADANBgkqhk .... etc
----- FINALICE LA LLAVE PRIVADA -----
----- COMENZAR CERTIFICADO -----
AwIBAgwIBADAwIBADA .... etc
AwIBAgwIBADAwIBADA .... etc
AwIBAgwIBADAwIBADA .... etc
----- FINALIZAR CERTIFICADO -----

Eso es.

Podredumbre
fuente
2

Hay una manera más fácil de crear un archivo .Pem si ya tiene un archivo pns p12 en su acceso a la cadena de claves.

Abra la terminal e ingrese el siguiente comando:

Para Devlopment openssl pkcs12 -in apns-div-cert.p12 -out apns-div-cert.pem -nodes -clcerts

Para producción openssl pkcs12 -in apns-dist-cert.p12 -out apns-dist-cert.pem -nodes -clcerts

Cambie el nombre de su archivo P12 con este nombre: apns-div-cert.p12 de lo contrario, en lugar de esto, debe ingresar su nombre de archivo. ¡¡Gracias!!

Yash
fuente
1

Nunca recuerdo el opensslcomando necesario para crear un .pemarchivo, así que hice este script bash para simplificar el proceso:

#!/bin/bash
if [ $# -eq 2 ]
then
    echo "Signing $1..."

    if ! openssl pkcs12 -in $1 -out $2 -nodes -clcerts; then
        echo "Error signing certificate."
    else
        echo "Certificate created successfully: $2"
    fi
else
    if [ $# -gt 2 ]
    then
        echo "Too many arguments"
        echo "Syntax: $0 <input.p12> <output.pem>"
    else
        echo "Missing arguments"
        echo "Syntax: $0 <input.p12> <output.pem>"
    fi
fi

Póngale un nombre, por ejemplo, signpem.shy guárdelo en la carpeta de su usuario ( /Users/<username>?). Después de crear el archivo, haga un chmod +x signpem.shpara que sea ejecutable y luego puede ejecutar:

~/signpem myCertificate.p12 myCertificate.pem

Y myCertificate.pemserá creado.

Alejandro Iván
fuente