Necesito firmar la aplicación de Android ( .apk
).
Tengo .pfx
archivo. Lo convertí a un .cer
archivo a través de Internet Explorer y luego lo convertí .cer
para .keystore
usar keytool. Luego intenté firmar .apk
con jarsigner pero dice que .keystore no contiene una clave privada.
Que estoy haciendo mal
Respuestas:
Usando JDK 1.6 o posterior
Justin ha señalado en los comentarios a continuación que keytool solo es capaz de hacer esto usando el siguiente comando (aunque solo en JDK 1.6 y posteriores):
Usando JDK 1.5 o inferior
OpenSSL puede hacerlo todo. Esta respuesta en JGuru es el mejor método que he encontrado hasta ahora.
En primer lugar, asegúrese de tener OpenSSL instalado. Muchos sistemas operativos ya lo tienen instalado como encontré con Mac OS X.
Los dos comandos siguientes convierten el archivo pfx a un formato que se puede abrir como un almacén de claves Java PKCS12:
TENGA EN CUENTA que el nombre proporcionado en el segundo comando es el alias de su clave en el nuevo almacén de claves.
Puede verificar el contenido del almacén de claves utilizando la utilidad keytool de Java con el siguiente comando:
Finalmente, si lo necesita, puede convertir esto en un almacén de claves JKS importando el almacén de claves creado anteriormente en un nuevo almacén de claves:
fuente
jarsigner puede usar su archivo pfx como almacén de claves para firmar su jar. Asegúrese de que su archivo pfx tenga la clave privada y la cadena de certificados cuando lo exporte. No es necesario convertir a otros formatos. El truco consiste en obtener el alias de su archivo pfx:
Una vez que tenga su alias, firmar es fácil
Los dos comandos anteriores le pedirán la contraseña que especificó en pfx export. Si desea que su contraseña se cuelgue en texto sin cifrar, use el interruptor -storepass antes del interruptor -keystore
Una vez firmado, admire su trabajo:
fuente
Encontré esta página que le dice cómo importar un PFX a JKS (Java Key Store):
fuente
-srcstorepass
es mi problema. Este PFX es creado por un cliente LetsEncrypt para WindowsSu archivo PFX debe contener la clave privada dentro de él. Exporte la clave privada y el certificado directamente desde su archivo PFX (por ejemplo, usando OpenSSL) e impórtelos a su almacén de claves Java.
Editar
Más información:
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
keytool
.fuente
Justin (arriba) es exacto. Sin embargo, tenga en cuenta que dependiendo de quién obtenga el certificado (CA intermedia, CA raíz involucrada o no) o cómo se crea / exporta la pfx, a veces puede faltar la cadena de certificados. Después de la importación, tendría un certificado de tipo PrivateKeyEntry, pero con una cadena de longitud 1.
Para solucionar este problema, existen varias opciones. La opción más fácil en mi mente es importar y exportar el archivo pfx en IE (eligiendo la opción de Incluir todos los certificados en la cadena). El proceso de importación y exportación de certificados en IE debería ser muy fácil y estar bien documentado en otros lugares.
Una vez exportado, importe el almacén de claves como Justin señaló anteriormente. Ahora, tendría un almacén de claves con certificado de tipo PrivateKeyEntry y con una longitud de cadena de certificado de más de 1.
Ciertos clientes de servicios web basados en .Net fallan (no se puede establecer una relación de confianza), si no hace lo anterior.
fuente
Si trabaja con JDK 1.5 o inferior, la utilidad keytool no tendrá la
-importkeystore
opción (consulte la documentación de keytool de JDK 1.5 ) y la solución de MikeD estará disponible solo transfiriendo el.pfx
en una máquina con un JDK más nuevo (1.6 o superior).Otra opción en JDK 1.5 o inferior (si tiene un producto Oracle WebLogic) es seguir las instrucciones de este documento de Oracle: Uso de formatos de certificado PFX y PEM con almacenes de claves . Describe la conversión a
.pem
formato, cómo extraer información de certificados de este formato textual e importarla a.jks
formato con lajava utils.ImportPrivateKey
utilidad (esta es una utilidad incluida con el producto WebLogic).fuente