Anteriormente firmé archivos jar usando un almacén de claves instalado localmente como parte de una compilación automatizada. Ahora me enfrento a tener que usar un dispositivo basado en hardware, debido a cambios recientes en los requisitos mínimos de firma de código, y aunque descubrí cómo hacerlo, veo ralentizaciones extremas.
Solo como un ejemplo, un archivo jar con 180 clases en el que antes podía iniciar sesión en aproximadamente medio segundo ahora demora aproximadamente 30 segundos. A medida que avanza, veo que la luz de acceso de mi dispositivo token parpadea varias veces por segundo, presumiblemente una vez para cada clase en el archivo jar.
¿Hay alguna forma de acelerar esto, por ejemplo, alguna forma de reducir los accesos de token a un solo acceso para todo el archivo jar?
No fue una respuesta, pero es demasiado larga para un comentario:
Si su suposición de un acceso al token para cualquier archivo es correcta, significaría que el hash de los archivos también se calcula en el dispositivo, no solo la firma.
¿Su dispositivo PKCS11 tiene una opción de registro que podría mostrar qué llamadas pkcs11 está recibiendo el dispositivo (las operaciones hash se denominan C_Digest en PKCS11) para confirmar? Tal vez con la opción mencionada en java keytool con el proveedor de opensc pkcs#11 solo funciona con la opción de depuración habilitada (no lo he probado)
Como no sé si hay alguna manera de decirle a jarsigner que haga hash por software y firme por hardware, si no puede encontrar una mejor respuesta, tal vez pueda escribir su propio proveedor: ( http://docs.oracle. com/javase/7/docs/technotes/guides/security/crypto/HowToImplAProvider.html ):
Signature signature = Signature.getInstance("SHA1withRSA", "SunPKCS11") y así sucesivamente. Y analógico para KeyStoreSpi.Y luego llame a jarsigner con su proveedor como parámetro.