Expresso V3 y firmas electrónicas
En el siguiente enlace se encuentra información respecto al uso de certificados electrónicos en Expresso V3:
http://comunidadeexpresso.serpro.gov.br/mediawiki/index.php/Admins/Certificados
Otro enlace más:
https://www.serpro.gov.br/linhas-negocio/certificacao-digital
Tutorial de certificados digitales en Expresso:
https://demonstra.serpro.gov.br/tutoriais/autenticacao_token_linux/html/index.html?mod=3
Es posible utilizar certificados en soporte de software (archivos .p12) y hardware a través de tarjeta inteligente o token USB configurado en el navegador web.
La funcionalidad de "criptografía de correo" utiliza un APPLET de Java, ver el siguiente enlace:
Descargué el código fuente Expresso V3 del siguiente enlace:
http://comunidadeexpresso.serpro.gov.br/portal/downloads/kristina.20150223.06.tar.bz2
Al descomprimir el archivo se obtiene la siguiente estructura:
aaraujo@moe:~/desarrollo/2015/correo/kristina.20150223.06$ ls -l total 25204 drwxr-xr-x 11 aaraujo aaraujo 4096 abr 8 16:21 ActiveSync drwxr-xr-x 15 aaraujo aaraujo 4096 abr 8 16:21 Addressbook drwxr-xr-x 13 aaraujo aaraujo 4096 abr 8 16:21 Admin drwxr-xr-x 10 aaraujo aaraujo 4096 abr 8 16:21 AppLauncher -rw-r--r-- 1 aaraujo aaraujo 1382 abr 8 16:21 bootstrap.php drwxr-xr-x 16 aaraujo aaraujo 4096 abr 8 16:21 Calendar -rw-r--r-- 1 aaraujo aaraujo 690 abr 8 16:21 config.inc.php.dist -rw-r--r-- 1 aaraujo aaraujo 938 abr 8 16:21 CREDITS drwxr-xr-x 2 aaraujo aaraujo 4096 abr 8 16:21 docs drwxr-xr-x 3 aaraujo aaraujo 4096 abr 8 16:21 domains drwxr-xr-x 18 aaraujo aaraujo 4096 abr 27 09:15 Expressomail drwxr-xr-x 2 aaraujo aaraujo 4096 abr 8 16:21 fonts drwxr-xr-x 6 aaraujo aaraujo 4096 abr 8 16:21 images -rwxr-xr-x 1 aaraujo aaraujo 981 abr 8 16:21 index.php -rw-r--r-- 1 aaraujo aaraujo 1516 abr 8 16:21 init_plugins.php -rw-r--r-- 1 aaraujo aaraujo 25509982 abr 27 07:47 kristina.20150223.06.tar.bz2 -rwxr-xr-x 1 aaraujo aaraujo 24405 abr 8 16:21 langHelper.php drwxr-xr-x 22 aaraujo aaraujo 4096 abr 8 16:21 library -rw-r--r-- 1 aaraujo aaraujo 132767 abr 8 16:21 LICENSE drwxr-xr-x 12 aaraujo aaraujo 4096 abr 8 16:21 Messenger -rw-r--r-- 1 aaraujo aaraujo 3583 abr 8 16:21 plugin.php -rw-r--r-- 1 aaraujo aaraujo 9254 abr 8 16:21 PRIVACY -rw-r--r-- 1 aaraujo aaraujo 1282 abr 8 16:21 README -rw-r--r-- 1 aaraujo aaraujo 1164 abr 8 16:21 RELEASENOTES drwxr-xr-x 12 aaraujo aaraujo 4096 abr 8 16:21 Setup -rwxr-xr-x 1 aaraujo aaraujo 373 abr 8 16:21 setup.php drwxr-xr-x 13 aaraujo aaraujo 4096 abr 8 16:21 Tasks drwxr-xr-x 5 aaraujo aaraujo 4096 abr 8 16:21 themes -rw-r--r-- 1 aaraujo aaraujo 2426 abr 8 16:21 tine20.php drwxr-xr-x 49 aaraujo aaraujo 4096 abr 8 16:21 Tinebase drwxr-xr-x 8 aaraujo aaraujo 4096 abr 8 16:21 vendor drwxr-xr-x 13 aaraujo aaraujo 4096 abr 8 16:21 Webconference -rw-r--r-- 1 aaraujo aaraujo 485 abr 8 16:21 worker.php drwxr-xr-x 19 aaraujo aaraujo 4096 abr 8 16:21 Zend
Luego en el directorio Expressomail se encuentra el archivo:
-rw-r--r-- 1 aaraujo aaraujo 10895 abr 8 16:21 Smime.php
En el archivo Smime.php se implementa todo el proceso de verificación de un correo electrónico firmado.
Se está utilizando el estándar SMIME (https://es.wikipedia.org/wiki/S/MIME) a través de llamadas a funciones de PHP. La verificación de un correo electrónico firmado se realiza a través de:
openssl_pkcs7_verify — Verifica la firma de un mensaje S/MIME firmado (https://php.net/manual/es/function.openssl-pkcs7-verify.php)
En algunos casos se hacen llamadas a sistemas en PHP para ejecutar el comando openssl como en el siguiente caso:
... $w = exec('cat ' . $msgTempFile . ' | openssl smime -pk7out | openssl pkcs7 -print_certs',$output); ...
Para la firma electrónica se utiliza un applet de Java. Encontré un repositorio de github con los códigos:
https://github.com/ComunidadeExpresso/expressolivre/tree/master/security/ExpressoCertMail
No estoy seguro si son los que se utilizan con Expresso V3.
En el archivo Expressomail/js/Expressomail-FAT.js descargado se hace una llamada
a la función signMessage:
... try{ document.getElementById("SignatureApplet").signMessage(Tine.Expressomail.fixIEUserAgent(),this.id,c) } ...
Se carga el applet de java para ejecutar la firma.
En un mensaje del foro de Expresso se describe la manera en que se realiza la firma electrónica en Expresso V3:
En general:
A aplicação web se comunica através da applet através dos métodos:
- signMessage
- encryptMessage
- decryptMessage
- verifyMessage
En el siguiente enlace Expresso V3 Segurança com Certificaçao Digital hay una descripción oficial sobre Expresso V3 y la certificación digital.