Desarrollo de un proveedor de customPasswordEncryption
Puede desarrollar un proveedor de customPasswordEncryption para que tenga decisiones de autorización personalizadas para aplicaciones Java™ Platform, Enterprise Edition (J2EE) implementando la interfaz com.ibm.wsspi.security.crypto.CustomPasswordEncryption que se proporciona en el servidor de Liberty.
Acerca de esta tarea
- El archivo de paquete OSGi, que contiene el ejecutable.
- El archivo de manifiesto de característica, que define la característica de usuario del proveedor customPasswordEncryption. Este archivo contiene la ubicación de los paquetes y atributos necesarios de la característica y el archivo de manifiesto de extensión, si está empaquetado. Esta información es consumida por el tiempo de ejecución del servidor.
- EL archivo de manifiesto de extensión, que define los archivos de paquete necesarios y el nombre de la clase de implementación del proveedor customPasswordEncryption. Este archivo es opcional y es necesario para dar soporte a los programas de utilidad de la línea de mandatos.
Procedimiento
- Cree un componente OSGi que proporcione un servicio que implemente la interfaz
com.ibm.wsspi.security.crypto.CustomPasswordEncryption.
La interfaz CustomPasswordEncryption define tres métodos, decrypt, que el tiempo de ejecución de servidor de Liberty invoca para descifrar la serie, encrypt, que el tiempo de ejecución de servidor de Liberty invoca para cifrar la serie e initialize, que está reservado para uso futuro.
En el ejemplo siguiente, se utilizan anotaciones de servicios declarativos de OSGi:package com.mycompany.custom; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.ConfigurationPolicy; import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Modified; import com.ibm.wsspi.security.crypto.CustomPasswordEncryption; import com.ibm.wsspi.security.crypto.EncryptedInfo; import com.ibm.wsspi.security.crypto.PasswordDecryptException; import com.ibm.wsspi.security.crypto.PasswordEncryptException; /** */ @Component(service = CustomPasswordEncryption.class, immediate = true, name = "com.mycompany.CustomPasswordEncryptionImpl", configurationPolicy = ConfigurationPolicy.OPTIONAL, property = { "someKey=someValue" }) public class CustomPasswordEncryptionImpl implements CustomPasswordEncryption { @Activate protected synchronized void activate(ComponentContext cc, Map<String, Object> props) { } @Modified protected synchronized void modify(Map<String, Object> props) { } @Deactivate protected void deactivate(ComponentContext cc) {} /** * La operación de cifrado toma una serie con codificación UTF-8 en forma de un byte[]. * El byte[] se genera a partir de String.getBytes("UTF-8"). Se devuelve un byte[] * cifrado de la implementación en el objeto EncryptedInfo. * Además, se devuelve un alias de clave lógica en EncryptedInfo que * se vuelve a pasar al método de descifrado para determinar qué clave se ha utilizado para * cifrar esta contraseña. El tiempo de ejecución de WebSphere Application Server no * conoce el algoritmo o la clave que se ha utilizado para cifrar los datos. * * @param decrypted_bytes * @return com.ibm.wsspi.security.crypto.EncryptedInfo * @throws com.ibm.wsspi.security.crypto.PasswordEncryptException **/ @Override public EncryptedInfo encrypt(byte[] input) throws PasswordEncryptException { byte[] output = null; String key = null; try { : <do some encryption> : return new EncryptedInfo(output, key); } catch (Exception e) { throw new PasswordEncryptException("Exception is caught", e); } } /** * La operación de descifrado toma el objeto EncryptedInfo que contiene un byte[] * y el alias de clave lógico y lo convierte al byte[] descifrado. El * tiempo de ejecución de WebSphere Application Server convertirá el byte[] en una serie * utilizando una nueva serie (byte[], "UTF-8"); * * @param info * @return byte[] * @throws PasswordEncryptException * @throws com.ibm.wsspi.security.crypto.PasswordDecryptException **/ @Override public byte[] decrypt(EncryptedInfo info) throws PasswordDecryptException { byte[] input = info.getEncryptedBytes(); String key = info.getKeyAlias(); byte[] output = null; try { : <do some decryption> : return output; } catch (Exception e) { throw new PasswordEncryptException("Exception is caught", e); } } /** * Esto está reservado para uso futuro y actualmente el * tiempo de ejecución de WebSphere Application Server no lo llama. * * @param initialization_data **/ @SuppressWarnings("rawtypes") @Override public void initialize(Map initialization_data) {} }
- Empaquete el componente en un paquete OSGi que forme parte de la característica de usuario. Asegúrese de
que el paquete incluye el manifiesto de servicio OSGi. El ejemplo siguiente muestra el contenido del manifiesto de servicio OSGi:
<?xml version="1.0" encoding="UTF-8"?> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="com.mycompany.custom.CustomPasswordEncryptionImpl" configuration-policy="optional" immediate="true" activate="activate" deactivate="deactivate" modified="modify"> <implementation class="com.mycompany.custom.CusomPasswordEncryptionImpl"/> <service> <provide interface="com.ibm.wsspi.security.crypto.CustomPasswordEncryption"/> </service> <property name="<someKey>" type="String" value="<someValue>"/> </scr:component>
- Asegúrese de que el archivo de manifiesto de característica
incluye contenido del subsistema OSGi con start-phase:="SERVICE_EARLY". Si
el paso opcional se ha completado, la ubicación del archivo de
manifiesto de extensión está en la cabecera
Subsystem-Content. Por ejemplo:
Manifest-Version: 1.0 IBM-Feature-Version: 2 IBM-ShortName: customPasswordEncryption-1.0 Subsystem-Type: osgi.subsystem.feature Subsystem-Version: 1.0.0 Subsystem-ManifestVersion: 1.0 Subsystem-SymbolicName: customPasswordEncryption-1.0;visibility:=public Subsystem-Content: com.mycompany.custom; version="[1,1.0.100)"; start-phase:="SERVICE_EARLY", customEncryption.jar; type=file; \ location:="bin/tools/extensions/ws-customPasswordEncryption/customEncryption.jar” Subsystem-Description: Cifrado de la contraseña personalizada MyCompany
- Una vez instalada la característica en la ubicación de la extensión del producto de usuario, configure el archivo server.xml con el nombre de la característica.
<featureManager> ... <feature>usr:customPasswordEncryption-1.0</feature> </featureManager>
Para verificar que la instalación se ha realizado correctamente para el entorno de tiempo de ejecución del servidor, verifique que el mensaje CWWKS1850I se ha registrado en el archivo message.log.
- Opcional: Cree el archivo de manifiesto de extensión, que es
necesario para conectar el proveedor
customPasswordEncryption a los programas de
utilidad de la línea de mandatos como, por ejemplo, SecurityUtility. El
archivo de manifiesto de extensión es un archivo JAR, que contiene el
archivo MANIFEST.MF. Las cabeceras necesarias
del manifiesto de la extensión son:
- Require-Bundle: Define la lista de pauqetes, que se deben cargar. El formato es el mismo que para el archivo de manifiesto de paquete OSGi.
- IBM-ImplementationClass: Define la clase de implementación, que implementa la interfaz com.ibm.wsspi.security.crypto.CustomPasswordEncryption.
A continuación aparece un archivo MANIFEST.MF de ejemplo
Require-Bundle: com.mycompany.custom; version="[1,1.0.100)"; location="usr/extension/lib" IBM-ImplementationClass: com.mycompany.custom.CusomPasswordEncryptionImpl
Utilice el mandato jar para empaquetar el archivo de manifiesto de extensión. Por ejemplo:jar cfm customEncryption.jar MANIFEST.MF
Coloque el archivo JAR en wlp/bin/tools/extensions/ws-customPasswordEncryption. Asegúrese de que la ubicación del archivo de manifiesto de extensión está en la sección de la cabecera Subsystem-Content del archivo de manifiesto de característica.
Estos archivos deben estar en directorios específicos. A continuación se describe la relación de los archivos:Figura 1. Archivos del proveedor customPassworedEncryption - Opcional: Si el paso 5 se ha completado, puede verificar que la
instalación se ha realizado correctamente utilizando el mandato
siguiente de los programas de utilidad de la línea de mandatos
wlp/bin/securityUtility encode --listCustom
El resultado previsto es la información de customPasswordEncryption. Por ejemplo:[{"name":"custom","featurename":"usr:customPasswordEncryption-1.0","description":"Cifrado de contraseña personalizada MyCompany"}]
Asegúrese de que existen todos los archivos necesarios y que el contenido de los archivos es preciso.


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_developing_custom_passwd_encrypt
Nombre de archivo:twlp_developing_custom_passwd_encrypt.html