utiliza recomienda propietario obtener migrar kit instalar implementar herramienta generar formato firma desarrollo crear claves certificados certificado almacén administración java ssl cryptography cryptoapi elliptic-curve

recomienda - ¿Cómo cargar certificados de la próxima generación desde el almacén de claves de Microsoft utilizando Java 8?



keytool java (3)

Estoy tratando de cargar certificados directamente desde la tienda de Microsoft para evitar tener que exportar certificados de la tienda de MS y luego importarlos a una tienda JKS.

Logré que se crearan certificados a partir de una plantilla de servidor web de AD CS típica usando criptografía heredada directamente de las tiendas de MS usando SunMSCAPI.

Sin embargo, SunMSCAPI no es compatible con los cifrados de CNG modernos que estoy usando, específicamente el cifrado asimétrico RSA-2048, el hashing SHA-384 y la firma digital ECDSA-384.

¿Es posible cargar certificados de Próxima Generación desde las tiendas de MS usando Java? Estoy en jdk1.8.0_45. ¿Existe una alternativa de proveedor de JCE disponible para SunMSCAPI que pueda manejar el GNC? Sospecho que tendría que usar JNI o ​​JNA para acceder a la API nativa de Windows CNG.

He intentado Pheox JCAPI sin éxito. Es compatible con RSA y DSA, pero no con ECDSA. No he probado Bouncy Castle, pero entiendo que no ofrece tal capacidad.

¿Hay otras alternativas de proveedores de JCE disponibles para SunMSCAPI que puedan manejar el GNC que podría probar?

Actualización: JCAPI v2 solo es compatible con RSA, ECDH planificada para v3 el próximo año.

Actualización: algunos han sugerido que la instalación de los Archivos de Política de Jurisdicción de Fuerza Ilimitada de Criptografía de Java (JCE) para Java 8 tal vez pueda resolver esto, pero no, eso no ayuda, ya que el problema es que SunMSCAPI solo admite cifrados RSA, como puede verse mirando el código fuente .



La api de la próxima generación no se implementa en el código sunmscapi c ++ (archivo security.cpp), que interactúa con la criptografía api de windows. EC no está implementado en el código java de sunmscapi también.

Puede ver la fuente desde openJDK aquí: http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/556b17038b5c/src/windows/native/sun/security/mscapi/security.cpp

Cuando llama a keystore.load (null, null) desde su código java, termina en la función de código c ++ Java_sun_security_mscapi_KeyStore_loadKeysOrCertificateChains eventualmente. la línea 383 CryptAcquireCertificatePrivateKey devuelve false, ya que no utiliza el indicador CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG. Incluso cuando arreglas esa línea, eventualmente se rompe. Ya que usa las antiguas funciones de crypto api.

Ponerlo en funcionamiento significa reescribir todos los sunmscapi por ti mismo, utilizando la nueva generación de api de cripto.


Los estados de specification

Debido a las regulaciones de importación en algunos países, la implementación de Oracle proporciona un archivo de políticas de jurisdicción criptográfica predeterminado que limita la fuerza de los algoritmos criptográficos.

Si se necesitan algoritmos más sólidos (por ejemplo, AES con claves de 256 bits), los Archivos de la Política de Jurisdicción de Fuerza Ilimitada de JCE se deben obtener e instalar en el JDK / JRE.

Es responsabilidad del usuario verificar que esta acción esté permitida por las regulaciones locales.

Descargue los archivos de política de jurisdicción de fuerza ilimitada de JCE y colóquelos en su carpeta de seguridad jre.