Implementación de JCEHYBRIDRACFKS KeyStore
El proveedor IBMJCEHYBRID contiene una implementación de KeyStore denominada JCEHYBRIDRACFKS. Este almacén de claves le permite cargar un único conjunto de claves SAF como representación de almacén de claves JCECCARACFKS (que implementa el proveedor IBMJCECCA) y una representación de almacén de claves JCERACFKS (que implementa el proveedor IBMZSecurity).
Tenga en cuenta que debe añadir el proveedor IBMZSecurity a la lista de proveedores de seguridad para utilizar el almacén de claves JCERACFKS. De lo contrario, JCEHYBRIDRACFKS no se ha configurado correctamente.
Durante la inicialización de JVM, Java™ Security Framework carga cada proveedor de seguridad que aparece en la lista de proveedores java.security. Cuando un proveedor se inicializa, se registra en el marco de seguridad de Java para cada operación de seguridad ( serviceType.algorithm) que puede realizar. Si una aplicación solicita servicios criptográficos sin especificar un proveedor de seguridad, la infraestructura de seguridad Java selecciona el primer proveedor de la lista de proveedores de seguridad que ha registrado el servicio solicitado.
Cuando se carga un conjunto de claves SAF como un almacén de claves JCEHYBRIDRACFKS, el conjunto de claves se cargará como un almacén de claves JCECCARACFKS y JCERACFKS. El material de claves de ambos almacenes de claves se combinará y representará mediante el almacén de claves JCEHYBRIDRACFKS. Las distintas partes que están disponibles por el usuario del almacén de claves JCEHYBRIDRACFKS se pueden describir mediante las tablas siguientes. Para cada conjunto de claves que se está cargando, la tabla relevante muestra los resultados de lo que estará disponible cuando ICSF esté activado y no se produzcan errores durante la carga del almacén de claves, y los resultados de lo que estará disponible cuando ICSF esté desactivado o se produzcan errores durante la carga del almacén de claves.
Tenga en cuenta que los certificados/claves de la tabla que terminan con el nombre CCA tienen su material de claves ubicado en ICSF. Adicionalmente, ' IBMZSecurity private key significa una clave derivada por IBMZSecurity por cualquiera de los proveedores SUN, SunRsaSign, y OpenJCEPlus.
- Conjunto de claves sin CCA
A continuación se muestra un ejemplo de un conjunto de claves cargado que no tiene CCA:
Las entradas de almacén de claves y el contenido del almacén de claves que estará disponible cuando ICSF esté activado o desactivado son los siguientes:Ring: >Keyring< Certificate Cert Owner USAGE DEFAULT ------------------------------------------------- JayCa ID(G910501) CERTAUTH NO JayEndUser ID(G910501) PERSONAL YESEntradas del almacén de claves Contenido de almacén de claves disponible-ICSF activado (durante la carga) Contenido de almacén de claves disponible-ICSF desactivado (durante la carga) Entrada JayCa - Certificado
- Certificado
Entrada JayEndUser - Certificado
- Cadena de certificados
- Clave privada IBMJCECCA
- Clave privada de IBMZSecurity
- Certificado
- Cadena de certificados
- Clave privada de IBMZSecurity
- Conjunto de claves con CCA
A continuación se muestra un ejemplo de un conjunto de claves cargado que tiene CCA:
Las entradas de almacén de claves y el contenido del almacén de claves que estará disponible cuando ICSF esté activado o desactivado son los siguientes:Ring: >KeyringCCA< Certificate Cert Owner USAGE DEFAULT ------------------------------------------------- JayCaCCA ID(G910501) CERTAUTH NO JayEndUserCCA ID(G910501) PERSONAL YESEntradas del almacén de claves Contenido de almacén de claves disponible-ICSF activado (durante la carga) Contenido de almacén de claves disponible-ICSF desactivado (durante la carga) Entrada JayCaCCA - Certificado
- Certificado
Entrada JayEndUserCCA - Certificado
- Cadena de certificados
- Clave privada IBMJCECCA
El alias no estará disponible porque ICSF está inactivo y la clave reside en ICSF
- Conjunto de claves mixto
A continuación se muestra un ejemplo de un conjunto de claves mixto cargado:
Las entradas de almacén de claves y el contenido del almacén de claves que estará disponible cuando ICSF esté activado o desactivado son los siguientes:Ring: >KeyringMix< Certificate Cert Owner USAGE DEFAULT ------------------------------------------------- JayCa ID(G910501) CERTAUTH NO JayEndUser ID(G910501) PERSONAL NO JayCaCCA ID(G910501) CERTAUTH NO JayEndUserCCA ID(G910501) PERSONAL YESEntradas del almacén de claves Contenido de almacén de claves disponible-ICSF activado (durante la carga) Contenido de almacén de claves disponible-ICSF desactivado (durante la carga) Entrada JayCa - Certificado
- Certificado
Entrada JayEndUser - Certificado
- Cadena de certificados
- Clave privada IBMJCECCA
- Clave privada de IBMZSecurity
- Certificado
- Cadena de certificados
- Clave privada de IBMZSecurity
Entrada JayCaCCA - Certificado
- Certificado
Entrada JayEndUserCCA - Certificado
- Cadena de certificados
- Clave privada IBMJCECCA
El alias no estará disponible porque ICSF está inactivo y la clave reside en ICSF.
Cuando se cargue, el nuevo JCEHYBRIDRACFKS contendrá una combinación de la clave y el material de certificado de las representaciones de almacén de claves JCECCARACFKS y JCERACFKS del mismo conjunto de claves SAF. Esta combinación se almacenará en un contenedor de claves que contiene todo el material de claves disponible de ambos almacenes de claves. Debe tenerse en cuenta que IBMZSecurity no genera claves por si mismo sino que las obtiene de los proveedores SUN, SunRsaSign, y OpenJCEPlus para los algoritmos DSA, RSA y EC respectivamente. Consulte la documentación de IBMJCECCA titulada z/OS® Unique Consideraciones para obtener más información sobre los almacenes de claves JCECCARACFKS y JCERACFKS.
Las operaciones KeyStore que crean entradas nuevas o actualizan entradas existentes aceptarán una clave derivada por el proveedor IBMZSecurity o una clave derivada del proveedor IBMJCECCA y las almacenarán en la instancia del almacén de claves JCEHYBRIDRACFKS junto con su inserción en el almacén de claves subyacente que elija. Las claves derivadas del proveedor IBMJCECCA se insertarán en el almacén de claves JCECCARACFKS subyacente, las claves derivadas por el proveedor IBMZSecurity se insertarán en el almacén de claves JCERACFKS subyacente. Tenga en cuenta que IBMZSecurity no genera claves por si mismo sino que las obtiene de los proveedores SUN, SunRsaSign, y OpenJCEPlus para los algoritmos DSA, RSA y EC respectivamente.
Las operaciones KeyStore que devuelven entradas de claves devolverán una nueva clave privada llamada HybridRACFPrivateKey. Las operaciones KeyStore que devuelven objetos de certificado genéricos devolverán certificados. Esto significa que no siempre es necesario que la aplicación conozca la naturaleza exacta de la clave o el certificado devuelto por las API de KeyStoregetKey(), getCertificate() y getCertificateChain()). La HybridRACFPrivateKey o el certificado pueden recuperarse y pasarse a una instancia de la crypto API como un objeto Key o Certificate genérico. Dicho esto, sólo las instancias de cifrado y firma derivadas del proveedor IBMJCEHYBRID podrán hacer uso del nuevo objeto HybridRACFPrivateKey para las operaciones de firma y cifrado RSA.
Una alternativa a utilizar las operaciones de cifrado y firma en el proveedor IBMJCEHYBRID es extraer implementaciones de software JCE o IBMJCECCA de HybridRACFPrivateKey y utilizar dichas implementaciones con los proveedores de software JCE o IBMJCECCA. Las implementaciones de claves HybridRACFPrivateKey que se devuelven del almacén de claves JCEHYBRIDRACFKS pueden contener potencialmente las representaciones de software JCE e IBMJCECCA de la misma clave. Puede decidir captar una u otra representación para utilizarla con los proveedores de software JCE o IBMJCECCA. Por ejemplo, el siguiente fragmento de código extrae la representación JCE de software del HybridRACFPrivateKey y utiliza la API SunRsaSign para cifrar y descifrar un fragmento de datos. Tenga en cuenta que también puede utilizar el proveedor OpenJCEPlus o SUN como proveedor para crear una instancia del objeto de cifrado en este ejemplo.
HybridRACFInputStream his = new HybridRACFInputStream(userid, keyring, passwordChars);
KeyStore ks = KeyStore.getInstance("JCEHYBRIDRACFKS","IBMJCEHYBRID");
ks.load(his,passwordChars);
HybridRACFPrivateKey privKey = (HybridRACFPrivateKey)ks.getKey(alias,passwordChars);
PublicKey pubKey = (PublicKey)ks.getCertificate(alias).getPublicKey();
//Encrypt with SunRsaSign
Cipher cipher = Cipher.getInstance("RSA", "SunRsaSign");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherText = cipher.doFinal(plainText);
//Decrypt with SunRsaSign
cipher.init(Cipher.DECRYPT_MODE, privKey.getSoftwareJCEPrivateKey());
byte[] decipheredText = cipher.doFinal(cipherText);
Cuando llama al método store() del almacén de claves JCEHYBRIDRACFKS, el código intenta volver a escribir todas las entradas en el conjunto de claves SAF especificado. Todas las entradas con claves derivadas de proveedores JCE de software se almacenan como si se hubieran insertado desde un JCERACFKS KeyStore. Todas las entradas con claves derivadas del proveedor IBMJCECCA se almacenan como si se hubieran insertado desde un JCECCARACFKS KeyStore.
Existe un controlador de URL para permitir que la clase URL abra el almacén de claves JCEHYBRIDRACFKS.
safkeyringCuando utilice esta URL, deberá especificar también la propiedad del sistema
java.protocol.handler.pkgs. Esta propiedad permite a la clase URLStreamHandler crear un objeto RACFInputStream . La URLsafkeyringy las clases asociadas acceden a los datos almacenados en un llavero SAF RACF® ).El valor de la propiedad del sistema es el proveedor que está utilizando para el soporte criptográfico. Por ejemplo, si está utilizando el proveedor IBMJCECCA, establezca la propiedad del sistema tal como se muestra en este ejemplo:
java.protocol.handler.pkgs=com.ibm.crypto.hdwrCCA.providerTambién puede establecer esta propiedad en una aplicación Java, utilizando el método java.lang.System.setProperty :System.setProperty("java.protocol.handler.pkgs", "com.ibm.crypto.hdwrCCA.provider");Si utiliza la URLsafkeyringpero no establece la propiedad de sistemajava.protocol.handler.pkgs, se produce el siguiente error:java.net.MalformedURLException: unknown protocol: safkeyringUtilice la sintaxis siguiente para especificar el conjunto de claves y el ID de usuario:"safkeyring://userid/keyring"safkeyringjce|safkeyringjcehybrid|safkeyringjceccaEl soporte para estos URL se ha añadido en la versión 11, pero está en desuso y podría eliminarse en futuros releases.
Utilice la URL que corresponda al tipo de almacén de claves RACF al que desee acceder, como se muestra en la tabla siguiente. No es necesario especificar la propiedad del sistemajava.protocol.handler.pkgs.Tabla 1. URL de conjunto de claves SAF para distintos tipos de almacén de claves Tipo de almacén de claves URL JCECCARACFKSsafkeyringjceccaJCERACFKSsafkeyringjceJCEHYBRIDRACFKSsafkeyringjcehybridUtilice la sintaxis siguiente para especificar el conjunto de claves y el ID de usuario para un almacén de claves de tipo JCECCARACFKS:"safkeyringjcecca://userid/keyring"Si ejecuta una aplicación que utiliza estos URL con un gestor de seguridad habilitado, se produce un error de carga circular. Para obtener más información, consulte Problemas conocidos y limitaciones.
- com.ibm.crypto.ibmjcehybrid.provider.HybridRACFInputStream
- com.ibm.crypto.ibmjcehybrid.provider.HybridRACFKeyStore
- com.ibm.crypto.ibmjcehybrid.provider.HybridRACFOutputStream
- com.ibm.crypto.ibmjcehybrid.provider.HybridRACFPrivateKey
- com.ibm.crypto.ibmjcehybrid.provider.safkeyring.Handler