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:

Ring: >Keyring<

Certificate   Cert Owner     USAGE       DEFAULT
-------------------------------------------------
JayCa         ID(G910501)   CERTAUTH     NO
JayEndUser    ID(G910501)   PERSONAL     YES
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:
Entradas 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:

Ring: >KeyringCCA<

Certificate   Cert Owner     USAGE       DEFAULT
-------------------------------------------------
JayCaCCA      ID(G910501)   CERTAUTH     NO
JayEndUserCCA ID(G910501)   PERSONAL     YES
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:
Entradas 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:

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     YES
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:
Entradas 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.

Se admiten las siguientes cadenas de URL.
safkeyring

Cuando 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 URL safkeyring y 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.provider
Tambié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 URL safkeyring pero no establece la propiedad de sistema java.protocol.handler.pkgs, se produce el siguiente error:
java.net.MalformedURLException: unknown protocol: safkeyring
Utilice la sintaxis siguiente para especificar el conjunto de claves y el ID de usuario:
"safkeyring://userid/keyring"
safkeyringjce | safkeyringjcehybrid | safkeyringjcecca

El 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 sistema java.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
JCECCARACFKS safkeyringjcecca
JCERACFKS safkeyringjce
JCEHYBRIDRACFKS safkeyringjcehybrid
Utilice 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.

Para obtener más información sobre el almacén de claves IBMJCEHYBRIDRACF y los objetos clave que se incluyen en el proveedor IBMJCEHYBRID, consulte la documentación de la API para las clases siguientes:
  • 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