En este documento, se proporciona información esencial sobre el proceso de rotación de claves para una app web aislada (IWA), incluido cuándo es necesario y los pasos que deben seguir los desarrolladores si se pierde o se vulnera una clave.
Rotación de claves para IWA
La rotación de claves es un mecanismo que permite reemplazar las claves privadas que se usan para firmar tu IWA en caso de filtración o pérdida. Este proceso mantiene la funcionalidad de la app y conserva un ID de paquete y un origen estables, lo que garantiza la continuidad de la distribución y las actualizaciones de la app.
El proceso de rotación de claves no requiere ningún cambio por parte del administrador o del usuario y, si se realiza correctamente, no será perceptible para ellos. Los canales de contacto de confianza establecidos durante el proceso inicial de inclusión en la lista de entidades permitidas son fundamentales para habilitar la rotación de claves.
La necesidad de rotar las claves
La rotación de claves es estrictamente necesaria en dos situaciones principales:
- Vulneración o filtración de la clave: Si tu clave de firma privada se vulnera o se filtra potencialmente, debes iniciar de inmediato el proceso de rotación de la clave para proteger tu aplicación. Una clave filtrada se puede usar para suplantar tu identidad, dañar a los usuarios de tu app y poner en peligro la reputación de tu empresa.
- Pérdida de la clave: Si pierdes el acceso a tu clave de firma privada y no puedes firmar actualizaciones nuevas, se requiere la rotación de claves para restablecer tu capacidad de distribuir tu aplicación.
Requisitos para desarrolladores
Antes de iniciar una rotación de claves, debes cumplir con los siguientes criterios:
- App incluida en la lista de entidades permitidas: Solo las apps incluidas en la lista de entidades permitidas pueden estar sujetas a una rotación de claves.
- Correo electrónico de confianza: Debes usar la dirección de correo electrónico de confianza que se proporcionó durante el proceso de inclusión en la lista de entidades permitidas para solicitar una rotación de claves.
Cómo volver a firmar apps alojadas y lanzar versiones nuevas
Después de rotar una clave, se bloquean todas las instancias de la app instaladas que no estén firmadas con una clave válida. Para evitar interrupciones a los usuarios, debes entregar una app firmada con la clave nueva (o con ambas claves). Los detalles técnicos para volver a firmar paquetes se encuentran en la sección Cómo firmar un paquete con varias claves. Según tu situación específica, existen diferentes situaciones:
Situación A: La clave no se perdió (por ejemplo, rotación proactiva o filtración)
Debes firmar la app con ambas claves (la anterior y la nueva) y entregárselas a los usuarios de una de las siguientes maneras:
- Lanzar una nueva versión de la app (agregar la nueva versión a los manifiestos de actualización)
- Actualiza tus archivos
.swbnalojados (vinculados en tus manifiestos de actualización) para que se firmen con ambas claves. La herramienta de CLI te permite agregar otra firma al paqueteswbnexistente.
Esto debe hacerse antes de que Google procese la rotación de claves para garantizar que los usuarios no noten el cambio.
Situación B: Se perdió la llave
Dado que la app no se puede firmar con la clave perdida, este caso es más complejo. Solicita la rotación de claves y pídele a tu contacto de Google que te indique los próximos pasos. Es posible que se te solicite que agregues las firmas nuevas a tus paquetes alojados siguiendo estas instrucciones.
Proceso de rotación de claves
El proceso de rotación de claves implica los siguientes pasos:
| Paso | Acción | Detalles | Responsabilidad |
|---|---|---|---|
| 1 | Solicita la rotación de la clave | El socio o desarrollador se comunica con su contacto de Google (Ingeniería de socios o cualquier otro punto de contacto) a través del correo electrónico de confianza proporcionado en el proceso de inclusión en la lista de entidades permitidas y solicita las instrucciones de rotación de claves explicando el motivo. En el caso de que se haya vulnerado la clave, recomendamos adjuntar el manifiesto de actualización con los paquetes firmados con las claves anteriores y nuevas para acelerar el proceso. | Desarrollador o socio |
| 2 | Respuesta al solicitante | El contacto de Google proporciona más instrucciones y preguntas al solicitante. Este paso puede implicar algunos intercambios. | Contacto de Google |
| 3 | Proporcionar datos | El socio o desarrollador sigue las instrucciones, que, entre otras, pueden incluir lo siguiente:
|
Desarrollador o socio |
| 4 | Procesamiento de solicitudes y proporcionar comentarios |
Google revisa la solicitud de rotación de claves y responde en el plazo de una semana hábil, ya sea aprobándola o rechazándola, o bien comunicándose con el desarrollador para hacerle más preguntas. Una vez que se aprueba la solicitud, Google rota la clave y proporciona comentarios. | Contacto de Google |
Actualización del canal y la fijación de versiones
A veces, los administradores usan canales de actualización personalizados o fijación de versiones, lo que les permite administrar las versiones de las apps en sus dispositivos cliente. Después de una rotación de claves, todas las apps instaladas con claves no válidas se vuelven no válidas y se bloquean. Para evitar esto, las versiones anteriores de las apps alojadas en los vínculos proporcionados en update_manifest.json también deben actualizarse y firmarse con dos firmas antes de la rotación de claves. Si pierdes la clave anterior y la app no se puede firmar con dos claves, notifica a tu contacto de Google de inmediato. Trabajaremos contigo para mitigar la situación, de modo que la app se pueda actualizar sin interrumpir los flujos de trabajo de los usuarios.
Cómo firmar un paquete con varias claves
En esta sección, se describe cómo puedes firmar tus paquetes web con una o dos claves a través de herramientas de la CLI o la configuración de complementos de Webpack, Rollup o Vite. Las herramientas de la CLI también permiten agregar una firma más a los paquetes swbn existentes, lo que puede ser útil en casos de pérdida de claves o para actualizar los paquetes alojados anteriores.
Herramientas de la CLI
Primero, asegúrate de tener instalado el paquete wbn-sign con npm:
$ npm i wbn-sign
Agrega -g para instalar el paquete de forma global en lugar de hacerlo solo en la carpeta actual.
Cómo firmar con una clave
$ wbn-sign -i unsigned.wbn -o signed.swbn -k private.pem
Firma con dos claves
$ wbn-sign sign webbundle.wbn old_key.pem new_key.pem -o signed.swbn --web-bundle-id <your-id-from-old-private>
Se puede omitir el argumento --web-bundle-id <id> si old_key es la primera clave con la que se firmó la versión inicial de la app. En ese caso, el ID del paquete se derivará de la clave. Puedes verificar el ID del paquete con el comando wbn-sign info signed.swbn.
Cómo agregar una firma al paquete existente
$ wbn-sign add-signature signed.swbn key3.pem --in-place
Usa -o si no quieres anular el paquete, sino crear uno nuevo con doble firma.
Más información sobre la herramienta de CLI
Para obtener más información sobre el uso de la herramienta de CLI, consulta la página de npm wbn-sign. Como alternativa, usa: wnb-sign
help.
Complemento de Webpack
Cómo firmar con una clave
Para configurar el complemento de Webpack para firmar tu IWA con una sola clave privada, haz lo siguiente:
- Configura
WebBundlePluginpara derivar automáticamente la URL base requerida directamente desde esta clave. - Usa un solo
NodeCryptoSigningStrategypara generar tu archivo.swbnfirmado.
// key is parsePemKey(private.pem)
plugins.push(
new WebBundlePlugin({
baseURL: new WebBundleId(key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public' },
output: 'signed.swbn',
integrityBlockSign: {
strategy: new NodeCryptoSigningStrategy(key)
}
})
)
Firma con dos claves
Cuando necesites firmar tu aplicación dos veces durante una rotación de claves, haz lo siguiente:
- Define el
webBundleIdy la URL base según tu original (old_key) para garantizar que la identidad de la app siga siendo estable para tus usuarios. - Usa un array de estrategias de firma para aplicar tus claves privadas antiguas y nuevas.
// old_key is parsePemKey(old_private.pem)
// new_key is parsePemKey(new_private.pem)
plugins.push(
new WebBundlePlugin({
baseURL: new WebBundleId(old_key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public') },
output: 'signed.swbn',
integrityBlockSign: {
strategies: [
new NodeCryptoSigningStrategy(old_key),
new NodeCryptoSigningStrategy(new_key)
],
webBundleId: new WebBundleId(old_key).serialize()
}
})
)
Complemento de Rollup o Vite
Cómo firmar con una clave
Para usar el complemento Rollup o Vite para firmar tu aplicación con una sola clave privada, de manera similar a la configuración de Webpack, el complemento usa una sola estrategia de firma y controla la derivación de la URL base a partir de la clave proporcionada para generar tu resultado firmado.
// key is parsePemKey(private.pem)
plugins.push({
...wbn({
baseURL: new WebBundleId(key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public' },
output: 'signed.swbn',
integrityBlockSign: {
strategy: new NodeCryptoSigningStrategy(key)
}
}),
enforce: 'post'
})
Firma con dos claves
Para firmar tu aplicación dos veces con Rollup o Vite, debes configurar el complemento para que acepte varias claves. Este fragmento aplica las claves privadas antiguas y nuevas con el array de estrategias. Garantiza una transición sin inconvenientes, ya que mantiene de forma explícita la URL base y webBundleId derivadas de tu clave original existente.
// old_key is parsePemKey(old_private.pem)
// new_key is parsePemKey(new_private.pem)
plugins.push({
...wbn({
baseURL: new WebBundleId(old_key).serializeWithIsolatedWebAppOrigin(),
static: { dir: 'public' },
output: 'signed.swbn',
integrityBlockSign: {
strategies: [
new NodeCryptoSigningStrategy(old_key),
new NodeCryptoSigningStrategy(new_key)
],
webBundleId: new WebBundleId(old_key).serialize()
}
}),
enforce: 'post'
})
Conclusión
Administrar correctamente la rotación de claves de tu IWA es fundamental para mantener la seguridad y la continuidad de la distribución de tu aplicación. Independientemente de tu situación específica (por ejemplo, si se perdió la llave o no), seguir los pasos descritos garantiza que tus usuarios experimenten la menor interrupción posible. Si utilizas las herramientas de CLI o las configuraciones de complementos proporcionadas para Webpack, Rollup o Vite, puedes administrar de manera eficiente las firmas de tu app y navegar por el proceso de rotación de claves sin problemas. En situaciones de emergencia, recuerda comunicarte de inmediato con tu contacto de Google a través de tu correo electrónico de confianza designado.