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.