enviar encriptar correo autenticar archivo adjunto java email encryption

encriptar - enviar email java sin autenticar



Cómo enviar correos electrónicos cifrados mediante programación(desde un proceso automatizado) (4)

En el caso general: para enviar un mensaje encriptado a alguien, solo necesita su clave pública. No necesita tener una clave usted mismo. La regla con criptografía asimétrica es que todo lo que se cifra con una clave pública se puede descifrar con la clave privada correspondiente, y todo lo que se cifra con una clave privada se puede descifrar con la clave pública correspondiente.

Necesitará una clave para su servidor solo si desea firmar el mensaje.

Si desea realizar la implementación en Java, no creo que JavaMail sea compatible con el cifrado de fábrica, pero puede echar un vistazo a JavaMail-Crypto (no lo he usado yo mismo). Supuestamente hay una interfaz JNI para GnuPG en alguna parte ... Y siempre puedes ejecutar PGP o GnuPG desde cualquier idioma ...

No sé sobre el soporte para PGP en Outlook, ni nada más sobre Outlook.

Tengo un proceso que se ejecuta en un servidor UNIX (Solaris) que se ejecuta todas las noches y debe poder enviar correos electrónicos encriptados.

Solo necesito la parte de "cifrado", NO la parte de firma digital / repudio de PKI.

Utilizo MS Outlook en una configuración corporativa y asumo que cuando un usuario hace clic en "Publicar en GAL ..." en Herramientas -> Opciones -> Seguridad, esto publicará su CLAVE PÚBLICA en la Lista global de direcciones (GAL).

Así que estoy pensando que necesito una forma de conectarme al Servidor de Exchange en el que está el GAL desde mi servidor UNIX. Entonces necesitaría recuperar los destinatarios CLAVE PÚBLICA. Entonces podría encriptar el correo electrónico usando los destinatarios CLAVE PÚBLICA. Esto encriptaría el correo electrónico y solo permitiría que alguien con los destinatarios PRIVATE KEY lea el correo electrónico ¿verdad? Entonces enviaría el correo electrónico. Pero, de lo que no estoy seguro, es cómo cifrar el correo electrónico utilizando solo los destinatarios CLAVE PÚBLICA (sin LLAVES en el lado de UNIX) de forma que MS Outlook pueda leer el correo electrónico cuando el destinatario lo reciba.

¿Esto funcionaría? ¿Hay alguien que se encuentre con un problema similar y proponga una solución? Se prefiere el código Java, pero cualquier lenguaje debería ser el comienzo.

¿Se requieren detalles adicionales para obtener una respuesta razonable?

Gracias


Debe enviar correo cifrado a Outlook en formato s / mime. Outlook no es compatible con PGP.

Comience por intentar enviar un mensaje de texto plano desde Java y vea si puede obtenerlo en Outlook. Preocuparse por el cifrado más tarde. Use la biblioteca JavaMail para crear y enviar correos electrónicos.

No sé cómo extraer claves del GAL. Probablemente sea más fácil comenzar exportando manualmente una clave y ver si puede trabajar con ella.

Para crear correos cifrados en formato s / mime, recomiendo Bouncy Castle . Bouncy Castle es un proveedor de cifrado que también tiene soporte para s / mime. (Busque el paquete CMS / Smime). Debería haber algunos ejemplos en las fuentes descargadas. Lo he usado en el pasado para enviar correos electrónicos a una amplia gama de clientes de correo electrónico, incluido Outlook, y funciona bastante bien. Pero prepárate para la criptografía: ¡puede ser una curva de aprendizaje abrupta!


La advertencia anterior no es que el GAL no se encuentra necesariamente en el servidor de Exchange, y se encuentra con más frecuencia en el servidor de dominio, cuando no se ejecuta en un modo independiente. El certificado se encontrará en el atributo de usuario LDAP userCertificate o userSMIMECertificate.


Tu lógica es correcta

El cifrado típico de PKI es:

cryptoAlgorithm(plaintext, public key) = ciphertext cryptoAlgorithm(ciphertext, private key) = plaintext

Para algunos algoritmos, el algoritmo de cifrado es el mismo procedimiento, envío y recepción.

Entonces ... para cada destinatario necesita su certificado digital, que contendrá su clave pública.

Almacenamiento de certificado GAL

Creo que sería posible configurar GAL para permitir a los usuarios publicar certificados. Mi impresión general es que la forma en que se configura y usa el GAL varía de una compañía a otra.

S / MIME y PGP

Estoy de acuerdo con la publicación de que S / MIME es lo que quieres para Outlook.

También tenga en cuenta que si sus usuarios utilizan Outlook Web en lugar del cliente de Outlook, no podrán recibir correos electrónicos cifrados. Al menos desde 2000, pero sospecho que 2003 también. Es un gran problema de usabilidad y no tengo una buena solución.

General Microsoftyness

Microsoft tiene su propia forma especial de hacer las cosas (no es broma ...). No son diferentes en el mundo de PKI. Los certificados de usuario deben estar claramente marcados con una capacidad de encriptación. Sé que debe tener el campo KeyUsage KeyEncipherment. Y puede haber otra extensión requerida por Microsoft. Tener un certificado de usuario formateado incorrectamente podría significar que el destinatario no podrá leer el correo cuando llegue, ya que Outlook no aceptará el hecho de que el correo fue encriptado. Evite un tiempo de prueba de integración serio aquí y planee atacar a muchos grupos de usuarios sobre cómo hacer esto. Cada vez que mi equipo ha tenido que integrarse con un producto de Microsoft, ha habido sorpresas desagradables, particularmente con respecto a cómo se configura el certificado.

Bibliotecas y herramientas

En segundo lugar recomiendo BouncyCastle: no lo he usado, pero la gente en la que confío lo jura. Personalmente me encantó el conjunto de herramientas de Phaos cuando tuve que escribir estas cosas, pero no estoy actualizado. Sé que cuesta dinero serio, y puede ser demasiado por tu dinero.

OpenSSL es otra herramienta fabulosa y útil para mucho más que SSL. Es genial para generar certificados de prueba, pero no puedo recordar si también lo hace el cifrado de correo electrónico S / MIME.

Para la mayoría de las bibliotecas, debería poder tomar texto plano y el certificado, y poner ambos en una función que genere el mensaje S / MIME. También pueden requerir el algoritmo de encriptación.