2008-11-18 8 views
8

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.Cómo enviar correos electrónicos encriptados mediante programación (desde un proceso automatizado)

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 de direcciones globales (GALÓN).

Así que estoy pensando que necesito una forma de conectarme al Servidor Exchange que el GAL está en 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 CLAVE PRIVADA leyera el correo electrónico ¿verdad? Luego 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.

¿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 necesitan más detalles para obtener una respuesta razonable?

Gracias

Respuesta

4

En el caso general: para enviar un mensaje cifrado a alguien, sólo 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 echarle un vistazo a JavaMail-Crypto (no lo he usado). Supuestamente hay una interfaz JNI para GnuPG en algún lugar ... Y siempre se puede ejecutar PGP o GnuPG desde cualquier idioma ...

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

2

Debe enviar el 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 las 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!

+0

Gracias por las respuestas. Definitivamente tengo mucho que aprender en el lado de la encriptación. Al menos ahora tendré un lugar para empezar a trabajar. –

1

La advertencia anterior no es que el GAL no está 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.

5

Tienes lógica, está bien.

cifrado PKI típico es:

cryptoAlgorithm(plaintext, public key) = ciphertext 

cryptoAlgorithm(ciphertext, private key) = plaintext 

Para algunos algoritmos, la cryptoAlgorithm es el mismo procedimiento, el envío y recepción.

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

Certificado GAL almacenamiento

yo creo que sería posible configurar el 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 & PGP

Estoy de acuerdo con el puesto que S/MIME es lo que quiere 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 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 manera especial de hacer las cosas (no es broma ...). Son no 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 Herramientas

Secundo la recomendación para BouncyCastle - No he utilizado, pero la gente que confío confían en él. Personalmente me encantó el conjunto de herramientas 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.

Cuestiones relacionadas