Sistema de Gestión de Negocios "Hexa"

Base de datos de conocimiento.

Doc. Ref. 9794
Título: Envío seguro de documentos por EMail
Autor: Hexa
Última actualización: 07/08/2015


documentos\Cliente-3223-HEXA-Envío seguro de docs por email-Doc.9794.htm

Envío seguro de documentos por EMail

El script que se presenta en este documento permite enviar de forma segura documentos a través de EMail. Las condiciones que se han considerado son las siguientes:

  1. El documento no debe viajar en el mensaje de EMail ya que algunos filtros o servidores o aplicaciones de correo del destinatario podrían detenerlo debido a condiciones como su tamaño o posibilidad de contener código ejecutable malicioso.
  2. El documento debe estar encriptado de forma segura y la correspondiente clave o contraseña no debe viajar con el mensaje
  3. El envío debe quedar registrado en la base de datos de hexa con su referencia y contraseña.

El proceso que realiza el script es el siguiente

  1. Se solicita el nombre del archivo, la clave a utilizar y la dirección de correo del destinatario
  2. Se encripta el archov utilizando winrar (AES-256 in CBC mode, Key derivation function is based on PBKDF2 using HMAC-SHA256)
  3. El archivo se sube a un servidor mediante protocolo SSH utilizando la utilidad pscp y putty. Se guarda en una carpeta nueva con un nombre aleatorio.
  4. Se genera y envía un EMail con un texto (fácilmente modificable en el propio script) y un link a la ruta de descarga. La clave se archiva en el registra en el campo "Referencia" del registro crorrespondiente de la tabla "EmailEnviado"

El link de descarga generado es público, pero los caracteres aleatorios de la carpeta que se crea son imposibles de adivinar. Aún así, si alguien lo hiciera, el archivo que se descarga está encriptado de forma segura.

Sería interesante crear un script que eliminase de forma automática los archivos y carpetas del servidor tras un plazo prefijado.

Todos los parámetros de funcionamiento del sistema (servidor de archivos, rutas, claves, etc...) son fácilmente adaptables en el propio script.

Sub Main (Criterio, Orden, Opciones)
    If Not Interact.Aceptado Then
        Interact.Reinicia "Datos", "Envío de documento de forma segura"
        Interact.NuevoValor "Clave", "Clave", "", 0, "" 'Clave para la encriptación
        Interact.NuevoValor "Archivo", "Archivo", "Fichero", 0, "" 'Nombre del archivo a enviar
        Interact.NuevoValor "EMail", "EMail", "Texto", 0, "" 'Email de la persona que lo tiene que recibir
    Else
        NombreArchivo = Fpc.Fil (Interact.Valor ("Archivo")) 'Nombre sin la ruta
        RutaArchivo = Fpc.Pth (Interact.Valor ("Archivo")) 'Ruta sin el nombre
        NombreSE = Fpc.Nse (NombreArchivo) 'Nombre del archivo sin la extensión
        NombreSE = Replace (NombreSE, " ", "_") 'Cambiar espacios (que pueden dar problemas) por guiones bajos
        
        'Comprimir y encriptar el archivo SFX (Self Extracting) escogido en nombre_del_archivo.exe en la misma carpeta
        Frm.Ejecutar ("""c:\archivos de programa\winrar\winrar"" a -sfx -dh -ep -p3178o8g48 """ & RutaArchivo & "\" & NombreSE & ".exe"" """ & Interact.Valor ("Archivo") & """")
        
        'Nombre aleatorio del directorio que vamos a crear en el servidor
        Direct = Encr.GenCla() & Encr.GenCla()
        
        'Script Linux que crea el directorio. Hay que guardarlo en un archivo porque putty en linea de comandos solo puede ejecutar cosas guardadas en un archivo
        Script = "cd /var/www/stc/transsegdoc" & VbCrLf & "mkdir " & Direct
        Fpc.WFil "P:\philippe\Putty SSH\script.txt", Script
        
        'Ejecución del script que crea el directorio
        Frm.Ejecutar ("""P:\philippe\Putty SSH\putty.exe"" -ssh -l ubuntu -i ""P:\philippe\Putty SSH\keysrvphil.ppk"" -m ""P:\philippe\Putty SSH\script.txt"" soltecbcn.net")
        
        'Transferencia del archivo al servidor
        frm.Ejecutar ("""P:\philippe\Putty SSH\pscp"" -l ubuntu -i ""P:\philippe\Putty SSH\keysrvphil.ppk"" """ & RutaArchivo & "\" & NombreSE & ".exe"" soltecbcn.net:/var/www/stc/transsegdoc/" & Direct)
        
        'Borrar el archivo
        Fpc.BorF (RutaArchivo & "\" & NombreSE & ".exe")
        
        'Envio de EMail con un link al archivo que hemos subido
        Contenido="Remitimos documento de su interés. Utilice este link para descargarlo: http://www.soltecbcn.net/transsegdoc/" & Direct & "/" & NombreSE & ".exe'" & VbCrLf & "Nota: Para asegurar la confidencialidad de sus datos personales, el fichero enviado está encriptado. Rogamos se ponga en contacto con nostros para que le demos las instrucciones correspondientes para que lo pueda desencriptar."
        Resultado = Com.EMlC9("", "", "NombreRemitente='Philippe Calvó' EMailRemitente='philippe.calvo@soltecbcn.net' EMailDestinatario=" & Fpc.SQLT (Interact.Valor ("EMail")) & " Asunto='Archivo de su interés' Contenido=" & Fpc.SQLT (Contenido) & " Referencia=" & Fpc.SQLT (Interact.Valor ("Clave")))
        
        'Fin del proceso; información al usuario
        Interact.Reinicia "MensajeFinal", "Resultado del proceso: " & VbCrLf  & Resultado
    End If
End Sub

Volver a la búsqueda anterior