Firma Digital Avanzada

Integración con HSM

El objetivo de este capitulo es describir como Simple realiza Firma Digital Avanzada a través de un HSM y como se puede extender para utilizarla con otros proveedores de HSM.

HSM son las siglas de "Hardware Security Module" (Módulo de Seguridad Hardware). Un HSM es un dispositivo criptográfico basado en hardware que genera, almacena y protege claves criptográficas y suele aportar aceleración hardware para operaciones criptográficas.

Este mecanismo permite que Simple pueda realizar operaciones de firma digital al vuelo, en forma automática a través de un servidor externo (HSM) el cual es el encargado de realizar las firmas.

Integración vía Webservice SOAP

La implementación actual de Simple se integra con un HSM a través de un Webservice. Vía SOAP se envía el documento al servidor HSM, y este retorna firmado devuelta a Simple.

Esta es la descripción de la API SOAP:

Metodo: IntercambiaDoc

Encabezado

Parametro Valor
User Nombre de usuario en el HSM
Password Contraseña del HSM
TipoIntercambio 'pdf' o 'xml'
NombreConfiguracion Identificador de la configuración con la que se quiere firmar en el HSM. Ej: Varios firmantes en el HSM, cada uno con una configuración distinta
FormatoDocumento 'b64' que corresponde a Base64

Parametro

Parametro Valor
Documento Documento codificado en Base64
NombreDocumento Nombre del documento. Generalmente es el filename

Si el proveedor del HSM genera un webservice SOAP para el HSM siguiendo este esquema, se puede integrar directamente en Simple sin ningún desarrollo adicional.

Solamente bastaría con editar el archivo:

application/config/config.php

y setear los parámetros:

/*
 * Configuracion del servidor HSM
 */
$config['hsm_url'] = ''         // URL del endpoint del webservice HSM
$config['hsm_user'] = ''        // Nombre de usuario
$config['hsm_password'] = ''    // Contraseña

Luego de eso, automáticamente quedara habilitado en el editor de documentos de Simple, un checkbox con la opción: "Firmar documento con HSM"

Integración vía otros métodos

Si se desea integrar con un HSM vía otro método, se debera reimplementar ciertas secciones de Simple. En particular, se debe editar el archivo:

application/models/documento.php

Dentro del método render($identifier, $key, $etapa_id=null ,$filename, $copia) se encuentra el código que hace la llamada al HSM para realizar la firma.

Estas son las líneas encargadas de ese llamado:

if (!$copia && $this->hsm_configuracion_id) {
                $client = new SoapClient($CI->config->item('hsm_url'));

                $result = $client->IntercambiaDoc(array(
                    'Encabezado' => array(
                        'User' => $CI->config->item('hsm_user'),
                        'Password' => $CI->config->item('hsm_password'),
                        'TipoIntercambio' => 'pdf',
                        'NombreConfiguracion' => $this->HsmConfiguracion->nombre,
                        'FormatoDocumento' => 'b64'
                    ),
                    'Parametro' => array(
                        'Documento' => base64_encode(file_get_contents($uploadDirectory . $filename)),
                        'NombreDocumento' => $filename
                    )
                ));

                file_put_contents($uploadDirectory . $filename, base64_decode($result->IntercambiaDocResult->Documento));
            }

Este código se ejecuta solamente cuando no se esta generando una copia del documento (Las copias no van firmadas) y cuando Simple esta configurado para funcionar con un HSM (En el config.php)

El código interior se debe reemplazar por el código custom que se necesite para conectarse con el HSM.