Implementaciones de proveedores de clave para la clave del comerciante

La solución más segura es almacenar la clave del comerciante en un dispositivo de hardware. Una solución de hardware se ocupa del almacenamiento seguro y de dividir el conocimiento de la clave del comerciante. No obstante, también es posible almacenar una clave de cifrado en un archivo, siempre que se tomen las precauciones apropiadas. Dichas precauciones incluyen el uso de permisos de archivo, supervisión de integridad de archivos y auditoría de acceso de archivos.

De forma predeterminada hay disponibles dos proveedores de claves de cifrado para la clave de comerciante. El primero, WCMerchantKeyImpl, sirve para recuperar la clave de comerciante del archivo XML de la instancia. El segundo, WCExternalFileMerchantKeyImpl, sirve para recuperar la clave de comerciante de un archivo externo.

WCMerchantKeyImpl

La implementación predeterminada, com.ibm.commerce.security.keys.WCMerchantKeyImpl, continúa leyendo la clave del comerciante del archivo instance.xml. La implementación no se puede utilizar para establecer la clave de comerciante en el archivo XML de la instancia. Por lo tanto, no se puede utilizar WCMerchantKeyImpl como el "nuevo" proveedor de claves cuando se ejecuta MigrateEncryptedInfo. Se puede utilizar como el proveedor de claves "actual" cuando se cambia a un proveedor de claves diferente.

Esta es la especificación de este proveedor de claves en workspace_dir/WC/xml/config/WCKeys.xml:


<?xml version="1.0" encoding="UTF-8"?>
<keys>
<key name="MerchantKey" 
providerName="WC" 
status="current"
className="com.ibm.commerce.security.keys.WCMerchantKeyImpl"> 
</key>
</keys>

Tenga en cuenta que la definición no especifica la vía de acceso de clases del HCL Commercearchivo de configuración de . Esto no es un problema cuando se utiliza en tiempo de ejecución porque se conoce la instancia actual y, por lo tanto, se puede acceder al archivo de configuración de la instancia apropiada. Sin embargo, cuando se utiliza Key Locator Framework desde un script de línea de mandatos, por ejemplo MigrateEncryptedInfo, el entorno de tiempo de ejecución no se inicializa. Por lo tanto, en un escenario de varias instancias, no se podría encontrar el archivo de configuración de la instancia correcta según la definición anterior. Por consiguiente, se necesita un parámetro de configuración adicional, instanceName, siempre que se va a utilizar WCMerchantKeyImpl en la línea de mandatos para especificar el nombre de la instancia. Utilizando el nombre de la instancia, podemos encontrar el archivo de configuración de HCL Commerce correcto para recuperar la clave de comerciante.

Por ejemplo, el archivo de configuración de claves de una instancia denominada "demo":


<?xml version="1.0" encoding="UTF-8"?>
<keys>
<key name="MerchantKey" 
providerName="WC" 
status="current"
className="com.ibm.commerce.security.keys.WCMerchantKeyImpl">
<config name="instanceName" value="demo"/> 
</key>
</keys>

WCExternalFileMerchantKeyImpl

Se utiliza una implementación que permite habilitar la compatibilidad con PCI, com.ibm.commerce.security.keys.WCExternalFileMerchantKeyImpl se utiliza para leer y almacenar la clave de comerciante desde un archivo externo. Dado que el archivo XML de la instancia contiene mucha más información además de la clave de comerciante, resulta difícil controlar el acceso al archivo. Para cumplir con los estándares de PCI, esta implementación de proveedor de claves lee la clave de comerciante en un archivo externo.

Cuando se requiere una clave de comerciante nueva, dos administradores entran cada uno la mitad de la clave de comerciante en dos archivos externos temporales. Esto se hace para satisfacer los criterios de división de conocimientos. El nombre y la ubicación de estos archivos temporales se especifican en el archivo de configuración de claves. Las claves de estos archivos externos se almacenan en texto sin formato.

Cuando sea el momento de actualizar el archivo de claves de comerciante, se llamará a WCKey.updateValue() para actualizar el archivo externo con el nuevo valor de clave de comerciante cifrado y también para borrar el contenido de los dos archivos externos temporales. Como medida de seguridad añadida, este proveedor permite al cliente especificar una clave de cifrado de claves opcional. Esta clave de cifrado de claves se utiliza para cifrar la clave de comerciante al almacenar la clave de comerciante en el archivo externo. Si no se especifica esta clave de cifrado de claves, se utiliza la clave de cifrado interna.

A continuación, se muestra el archivo de configuración de claves que registra el proveedor WCExternalFileMerchantKeyImpl.


<?xml version="1.0" encoding="UTF-8"?>
<keys>
<key name="MerchantKey" 
providerName="WC" status="new"
className="com.ibm.commerce.security.keys.WCExternalFileMerchantKeyImpl">
<config name="keyFile" 
value="merchantKey.xml"
/>
<config name="keyEncryptionKeyFile" 
value="KeyEncryptionKey.xml"/>
<config name="newKeyFile1" value="newMerchantKey1.xml"/>
<config name="newKeyFile2" value="newMerchantKey2.xml"/>
</key>
</keys>
Donde:
keyFile
El keyFile es el lugar donde se almacena la clave de comerciante actual, cifrada utilizando la clave de cifrado de claves. Para una nueva clave, se debe crear keyFile (por ejemplo, merchantKey.xml) manualmente, con un valor de clave vacío: <key value="" />. Cuando se ejecuta MigrateEncryptedInfo, los valores de clave de texto plano de newKeyFile1 y newKeyFile2 se fusionan, cifran y luego se almacenan en merchantKey.xml.
keyEncryptionKeyFile
Opcional: Especifica el archivo donde se almacena la clave de cifrado de claves, en texto sin formato. Si no se especifica este atributo, se utiliza la clave de cifrado de claves predeterminada. La clave de cifrado de claves debe ser tan sólida como la clave de comerciante (32 caracteres hexadecimales).
newKeyFile1
Es necesario cuando el estado del proveedor de claves del archivo de configuración de claves es "nuevo". Este valor es el nombre del archivo donde la primera mitad de la clave de comerciante se almacena en texto sin formato. El contenido del archivo se borra una vez que la herramienta se ha completado y se suprimen todos los archivos temporales.
newKeyFile2
Es necesario cuando el estado del proveedor de claves del archivo de configuración de claves es "nuevo". Este valor es el nombre del archivo donde la segunda mitad de la clave de comerciante se almacena en texto sin formato. El contenido del archivo se borra una vez que la herramienta se ha completado y se suprimen todos los archivos temporales.
Nota:
  • El keyFile, keyEncryptionKey y los 2 nuevos KeyFiles están en el formato siguiente:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <keys xmlns="http://www.ibm.com/xmlns/prod/WebSphereCommerce"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.ibm.com/xmlns/prod/WebSphereCommerce
    
    C:\WebSphere\CommerceServer\wc.ear\xml\config\xsd\key.xsd">
    <key value="1234567890abcdef" />
    </keys>
    
  • Se pueden utilizar vías de acceso absolutas o relativas para todos estos atributos de configuración. Si se utiliza la vía de acceso relativa, es relativa a la ubicación del archivo de configuración de claves personalizado, CustomKeys.xml. En el entorno de tiempo de ejecución, la ubicación de CustomKeys.xml se define en el apartado <Instance> del archivo XML de la instancia. Para los programas de utilidad de línea de mandatos, la ubicación de CustomKeys.xml se pasa como argumentos de línea de mandatos.
estado
Indica si el proveedor de claves está activo. Los valores posibles son current y new.
Un valor current indica que el proveedor de claves está en uso y activo. Los datos cifrados en la base de datos se cifran con la clave de este proveedor.
Un valor new indica el proveedor de claves al que se migrará. Este proveedor lo utiliza MigrateEncryptedInfo para migrar los datos cifrados a esta clave nueva.