Saltar al contenido
Integración

El certificado WWDR de Apple: el intermedio que viaja dentro de cada .pkpass

El WWDR es el intermedio público de Apple que va dentro de la firma de cada .pkpass. Qué generación usar (G4), cuándo vence y cómo falla cuando falta.

Por Magdi Khalifah9 min de lectura

El certificado WWDR —Apple Worldwide Developer Relations— es el certificado intermedio público de Apple que enlaza tu certificado de firma de pases con la raíz de Apple, y tiene que viajar dentro de la firma de cada .pkpass, junto al certificado de firma. Si falta, el dispositivo no puede validar la cadena y el pase no se agrega a Wallet. A agosto de 2026, los certificados de Pass Type ID cuelgan del WWDR G4, que Apple publica en su sitio PKI y que expira el 10 de diciembre de 2030.

Eso es lo que dice la documentación de Apple —la viva para generaciones y fechas; la guía de PassKit archivada (2018) y las propias herramientas de firma para la exigencia de incluirlo en la firma—. Lo que no dice es qué generación es la tuya, cómo comprobarlo con un comando, por qué la firma «funciona» en local aunque el intermedio esté mal, y qué mirar cuando un pase que compila perfecto no se instala. Este artículo es la continuación natural de la guía del CSR al PEM: allí se emite el certificado de firma; aquí se explica el que lo acompaña.

Qué es exactamente el WWDR

Apple exige que los pases de Wallet —igual que las apps, las extensiones de Safari y los recibos de compra— estén firmados por una autoridad certificadora en la que confía. Esa autoridad es la Apple Worldwide Developer Relations Certificate Authority: es quien emite, a partir del CSR que subes al portal, el certificado con el que firmas tus pases. La cadena queda así:

  1. La raíz de Apple (Apple Root CA), el ancla de confianza de la que cuelga todo lo demás.
  2. El intermedio WWDR, emitido por esa raíz y publicado en la página PKI de Apple. Hay varias generaciones —de la G2 a la G7— segmentadas por propósito.
  3. Tu certificado de firma del Pass Type ID, emitido por el WWDR y asociado a la clave privada que nació en tu máquina junto al CSR.

El WWDR no es un secreto: es un certificado público idéntico para todos los desarrolladores del mundo, y se descarga de apple.com/certificateauthority. Lo que sí es secreto —y lo único que lo es— es la clave privada de tu certificado de firma.

Por qué tiene que ir dentro del .pkpass

Porque el dispositivo tiene que reconstruir la cadena completa —de tu certificado al WWDR y del WWDR a la raíz— para aceptar el pase, y el eslabón intermedio viaja dentro del paquete. Un .pkpass es un ZIP con pass.json, las imágenes, un manifest.json con el hash de cada archivo y un archivo signature: una firma PKCS #7 detached del manifiesto, hecha con la clave privada del certificado de firma. La guía de PassKit de Apple —archivada en 2018, pero vigente en la práctica— pide dos cosas más al construir esa firma: incluir el certificado intermedio WWDR como parte de la firma y añadir el atributo S/MIME signing-time con la fecha y hora en que se firmó.

Esa misma guía lista explícitamente las «firmas que omiten el certificado intermedio WWDR» entre los errores más comunes al crear pases, junto al JSON malformado y a las claves mal escritas.

Un detalle que confunde a quien lee solo la documentación vigente: la página actual sobre cómo construir un pase describe el PKCS #7 detached sin nombrar el WWDR; la exigencia de incluirlo vive en la guía de PassKit archivada (2018) y la imponen las herramientas de firma. passkit-generator, la librería que usamos en producción, exige el WWDR como campo obligatorio y lo agrega al bloque firmado junto al certificado de firma. El requisito sigue vivo aunque la página moderna no lo repita.

Generaciones G2 a G7: cuál es el tuyo

Para pases, el intermedio es el G4 — a agosto de 2026, según la tabla oficial de Apple. La historia explica por qué hay varios: el intermedio WWDR original expiró el 7 de febrero de 2023 y su renovación vence el 20 de febrero de 2030; en esa rotación Apple emitió intermedios adicionales para mejorar el rendimiento de las listas de revocación (CRL) y segmentar propósitos por generación. La tabla oficial asigna:

  • G2 — firma ECDSA para Apple Pay (procesamiento de pagos).
  • G3 — firma de software y servicios (certificados de desarrollo y distribución, Merchant Identity).
  • G4funciones soportadas por APNs: Pass Type ID, Pass Type ID con NFC, APNs SSL, Order Type ID, Website Push ID, WatchKit y VoIP.
  • G5 y G7 — certificados gestionados por Apple (firma de App Store y recibos).
  • G6 — firma ECDSA de software y servicios (Swift).

La página PKI de Apple publica, a agosto de 2026, las fechas de vencimiento: G2 el 6 de mayo de 2029, G3 el 20 de febrero de 2030, G4 y G5 el 10 de diciembre de 2030, G6 el 19 de marzo de 2036. El G4 que trae nuestra plataforma está fijado por prueba automática contra el .cer oficial —huella SHA-256 y fecha de expiración— para que nadie pueda sustituirlo por un archivo parecido sin que una prueba lo note.

Comprueba cuál WWDR emitió tu certificado

No lo adivines: el emisor está escrito en tu propio certificado de firma.

openssl x509 -in signerCert.pem -noout -issuer
# issuer=CN=Apple Worldwide Developer Relations Certification Authority, OU=G4, O=Apple Inc., C=US

Ese OU=G4 es el WWDR que debe ir en la firma. Si descargas el intermedio del sitio PKI viene en DER; conviértelo a PEM igual que hiciste con el certificado de firma:

openssl x509 -inform DER -in AppleWWDRCAG4.cer -out wwdr.pem
openssl x509 -in wwdr.pem -noout -subject -enddate

La segunda línea debe mostrar OU=G4 y notAfter=Dec 10 00:00:00 2030 GMT. Un WWDR cuyo subject no coincide con el issuer de tu certificado de firma rompe la cadena aunque ambos sean certificados de Apple perfectamente válidos.

Expiración y rotación: qué cambia y qué no

La rotación del WWDR es rarísima comparada con la del certificado de firma, que en la práctica vence cada año —Apple no publica la duración; léela en el tuyo— (cómo renovarlo sin romper la flota instalada es tema aparte): solo ocurre cuando Apple publica una nueva generación para el propósito «Pass Type ID». Dos consecuencias prácticas:

  • Los pases que firmes después de una rotación deben llevar el intermedio que emitió tu certificado de firma vigente. Si renuevas el certificado y Apple ya lo emite bajo un WWDR nuevo, el intermedio de tu pipeline cambia con él — manda el issuer del certificado, no la costumbre.
  • El WWDR no necesita tratamiento de secreto: puedes versionarlo en tu repositorio o en tu configuración. Nosotros lo traemos precargado (el G4), y el campo para pegar uno propio existe solo para el día en que Apple publique la siguiente generación antes de que la incorporemos.

La cicatriz que nos llevó ahí: en nuestra primera versión cada operación tenía que conseguir y pegar el WWDR por su cuenta. La página PKI de Apple lista una veintena de certificados en DER y no dice cuál aplica a pases ni cómo convertirlo a PEM; el resultado era la misma consulta de soporte repetida por un archivo público idéntico para todos. Precargarlo eliminó la pregunta.

Síntomas cuando falta o no sirve

Tres lugares donde se manifiesta, en orden de aparición:

  1. En la herramienta de firma. passkit-generator rechaza el juego de certificados si el WWDR falta, con un mensaje que pide «valid WWDR certificates and developer signer certificate and key». Nuestra plataforma lo ataja en dos puntos: al guardar, el formulario rechaza un WWDR sin el encabezado -----BEGIN CERTIFICATE----- y rellena el vacío con el G4 precargado; y antes de firmar, la generación del pase vuelve a comprobar el encabezado de los tres certificados. Un juego inválido que pase ambos filtros lo rechaza la propia passkit-generator.
  2. En el dispositivo, al instalar. Si el pase se firmó con un WWDR equivocado o sin él, Wallet no muestra el diálogo de agregar. La guía archivada de Apple indica que los errores se registran en la consola del dispositivo (visible desde Xcode) y nombra entre los comunes las firmas sin el intermedio WWDR y el passTypeIdentifier que no coincide con el certificado; la página vigente añade el teamIdentifier que no coincide y el certificado vencido.
  3. El verde que miente. La firma local funciona aunque la cadena esté rota: ni openssl ni las librerías de firma validan que el intermedio corresponda al certificado, ni que las fechas estén vigentes — esa comprobación la hace el dispositivo. Una compilación exitosa del .pkpass no es evidencia de que el pase se instale; la evidencia es soltarlo en un iPhone o en el simulador y ver el diálogo de agregar. Lo aprendimos con credenciales mal tipeadas que firmaban sin queja y fallaban en la instalación.

Lo que no vamos a afirmar: qué hace iOS con un pase ya instalado cuando el intermedio de su firma vence. Apple no lo documenta, y el escenario queda lejos (2030 para el G4). Lo documentado alcanza para operar: incluye el intermedio correcto, renueva el certificado de firma a tiempo y prueba en dispositivo.

Qué monitorear

  • El certificado de firma, cada año en la práctica: es el que expira y el que de verdad pone en riesgo la emisión. Nuestra verificación de credenciales muestra su vencimiento y avisa de forma progresiva desde 60 días antes.
  • El WWDR, una vez: anota la fecha de expiración del G4 (10 de diciembre de 2030) y la página PKI de Apple, y revisa el issuer de tu certificado de firma cada vez que lo renueves. El día que diga OU=G5 o superior, el intermedio de tu pipeline cambia ese mismo día.

Preguntas frecuentes

¿El WWDR es un secreto?

No. Es un certificado público idéntico para todos los desarrolladores; cualquiera lo descarga de la página PKI de Apple y puedes versionarlo en tu repositorio sin riesgo. Lo único secreto de la cadena es la clave privada de tu certificado de firma, la que nació en tu máquina junto al CSR — el paso a paso del CSR al PEM cubre esa parte.

¿Qué generación de WWDR necesito para pases: G3, G4 o G5?

A agosto de 2026, el G4: la tabla oficial de Apple asocia los certificados de Pass Type ID —con y sin NFC— al intermedio G4, que expira el 10 de diciembre de 2030. Confírmalo en tu propio certificado de firma con openssl: el issuer debe decir OU=G4.

¿Por qué mi pase se firma bien en local y el iPhone lo rechaza?

Porque la firma local no valida la cadena: openssl y las librerías de firma aceptan cualquier juego de certificados, incluso uno autofirmado, y la comprobación de que el intermedio WWDR está presente y coincide la hace el dispositivo al instalar. Una compilación exitosa no es evidencia; la evidencia es el diálogo de agregar de Wallet.

¿Qué pasa con los pases ya instalados cuando el WWDR expire?

Apple no documenta ese escenario y no vamos a inventarlo. Lo que sí está claro es la disciplina: cada pase que firmes debe llevar el intermedio que emitió tu certificado de firma vigente, el certificado de firma se renueva en la práctica cada año, y el G4 actual alcanza hasta diciembre de 2030.

Sigue leyendo

Todas las guías