2009-11-18 12 views
8

El proveedor de seguridad JCE PKCS11 de Sun carece de la funcionalidad que necesitamos.
Así que escribí una versión mejorada de la misma utilizando las fuentes originales.Cómo firmar un proveedor de seguridad JCE personalizado

Desafortunadamente la infraestructura JCE rechaza el nuevo proveedor
"JCE no puede autenticar el proveedor"
porque no está firmado correctamente.

javax.crypto.JceSecurity.verifyProviderJar(...) throws.
(que llama javax.crypto.JarVerifier.verify())

Alguna sugerencia de cómo firmar el nuevo proveedor para que sea trabajo con JCE?

+3

FYI: solicitamos un certificado de Sun y lo obtuvimos en 3 días hábiles, sin inconvenientes. El certificado se puede usar para firmar tantas versiones que necesitamos. Como este procedimiento puede depender de su ubicación, podría valer la pena mencionar que operamos desde Suiza, Europa. – 3dGrabber

Respuesta

7

El proceso se describe en el documento, "How to Implement a Provider."

se trata de correo electrónico Sun Oracle alguna información (incluyendo el CSR que ha generado para su clave de firma), a continuación, enviar por fax un documento de confirmación. Recuperar su certificado firmado puede tomar una semana o más, así que planee con anticipación.

Solo necesita firmar a su proveedor si proporciona servicios que están restringidos por algunos gobiernos (represivos). Por ejemplo, una implementación Cipher es un "servicio" restringido, mientras que MessageDigest es un servicio no restringido. Supongo que con el mensaje que está recibiendo, está tratando de proporcionar servicios restringidos.

Si proporciona alguno de estos servicios, no hay forma de evitarlo: Necesita un certificado de firma de código emitido por Sun. (También podría funcionar uno de IBM, si recuerdo correctamente, su CA con firma de código es compatible, pero no sé nada sobre su proceso de emisión.)

2

Tiene que firmar el JAR con "JCE Code Signing CA" ". En todas las distribuciones Java actuales, solo 2 CA (Sun e IBM) están incorporadas (codificadas) y no hay forma de agregar la suya propia. Intentamos trabajar con Sun para firmar a nuestro proveedor y es casi imposible. No emitirían certificados CA intermedios, lo que significa que debe pasar por el problema cada vez que realiza un cambio.

¿Por qué no solo utiliza su propia biblioteca? Utiliza la API estándar para la interoperabilidad entre diferentes JCE. Pero eso no es realista para las cosas de CryptoKi/SmartCard en este momento, casi siempre es necesario escribir algún código personalizado para interactuar con la API específica del proveedor. Incluso puede hacer que su código imite la API JCE para minimizar los cambios de código.

+0

He recibido dos certificados de Sun, sin ningún problema. Fueron muy serviciales y receptivos. – erickson

+1

¿Quiere decir que obtiene el "Certificado de firma de código JCE" de Sun? Usan una raíz CA especial para JCE "CA de firma de código JCE". Por lo tanto, el certificado de firma de código regular no funciona. –

+0

Sí, me refiero al certificado de que debe firmar un proveedor de JCE. – erickson

3

Una alternativa es diseñar su proveedor personalizado utilizando OpenJDK. Este es el proyecto de código abierto patrocinado por Sun/Oracle y proporciona el código base para su lanzamiento oficial. OpenJDK no requiere que los proveedores se firmen. OpenJDK está disponible (de forma predeterminada, ahora) en varias distribuciones de Linux. Desafortunadamente, no parece estar disponible en Windows o Macintosh. Si está ejecutando Windows o Macintosh, le recomiendo que instale Linux en una VM.

Si debe desarrollar en Windows o Mac, sin embargo, puede copiar el archivo jce.jar de una instalación de OpenJDK sobre jce.jar (en su directorio lib de Java) de una instalación oficial. Esto evitará efectivamente el proceso de autenticación Jar. Sin embargo, asegúrese de guardar el archivo jce.jar original cuando termine de desarrollar.

0

Sólo para información adicional, tengo esta misma excepción cuando construyo un JAR (Eclipse Juno) con la opción "bibliotecas extracto necesario en el tarro generada" en cambio las correctas "paquete de librerías requeridas en JAR generado"

Cuestiones relacionadas