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

Nota: Los pasos opcionales siguientes son para dar soporte a los programas de utilidad de la línea de mandatos. Si el proveedor tiene previsto dar soporte solo al entorno de tiempo de ejecución de servidores, estos pasos se pueden omitir.
EL proveedor customPassworedEncryption consta de los tres archivos siguientes:
  • 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

  1. 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) {}
    
    }
  2. 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>
  3. 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 
  4. 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.

  5. 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 Un diagrama de flujo que describe la relación de los archivos y sus directorios.
  6. 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.


Icono que indica el tipo de tema Tema de tarea



Icono de indicación de fecha y hora Última actualización: Tuesday, 6 December 2016
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