¿Puedo enviar correo electrónico encriptado usando Mail y certificados autofirmados?

Quiero poder enviar correos electrónicos firmados y encriptados entre una Mac que usa Mail y otra Mac que usa Thunderbird, usando certificados autofirmados en ambos extremos. Solía ​​​​poder hacerlo, pero con los años las cosas se han vuelto más difíciles en ambos extremos. Para hacer que Thunderbird funcione, ahora tengo que crear una autoridad de certificación autofirmada y luego usarla para crear un certificado de correo electrónico. Pero no puedo hacer que el cifrado funcione en el extremo del correo. (Creo que Apple lo rompió en Mountain Lion). En mi llavero en el extremo de Mail, tengo la CA del extremo de Thunderbird, que está marcada como confiable, y el certificado de correo electrónico creado por esa CA, que dice "Este certificado es válida". Pero cuando creo un correo electrónico que va a la otra Mac, el botón de encriptación está atenuado.

Leí en alguna parte que el secreto es agregar la extensión de "cifrado de clave" al crear el certificado, y lo hice, pero aún no funciona.

Respuestas (2)

Solo puedo responder la parte de Mac Mail de esta pregunta ya que no quiero probar la parte de Thunderbird.

Solo estoy escribiendo esta parte para las personas que no están familiarizadas con el cifrado asimétrico:

En esta forma de encriptación necesitas dos claves, una privada y otra pública. Un certificado en ese sentido no es más que la clave pública, pero tiene más información que solo una clave, dice quién es usted, su organización, etc. La privada nunca debe perderse y entregarse a otros. Si es así, debe comenzar de nuevo y la persona que lo robó puede descifrar todo, así que manténgalo guardado y protegido con contraseña. Por lo general, los certificados están firmados por las llamadas autoridades de certificación y, en la mayoría de los casos, cobran dinero por su servicio. Esta es la razón por la que algunas personas crean su propia CA y certificados autofirmados, que es más económico.

La forma en que funciona el cifrado de correo electrónico es que usted le envía a alguien su clave pública (certificado) firmando su correo electrónico con ella. Puede firmar cualquier correo electrónico, porque no se hace ningún daño al dar su clave pública. Luego, esta otra persona tiene su clave pública y encripta un correo electrónico con esta clave. A partir de este momento, nadie, excepto la NSA con una posible computadora Quantum, puede descifrar este mensaje en un período de tiempo razonable con la longitud de clave adecuada. O algunas personas se infiltran en las bibliotecas de cifrado reales como el error HEARTBLEED (latido del corazón), que podría haber sido intencional y quién sabe cuántas puertas traseras más hay. Los certificados suelen tener una vida útil limitada y deben renovarse de vez en cuando.

Entonces, cosas para llevar: necesita una clave pública y privada y solo entrega la pública.

Esto es lo que he hecho:

  1. Creé una CA raíz y una CA de firma (no es necesario, pero es lo que hice) y utilicé este muy buen tutorial para ello: CA de varios niveles en http://pages.cs.wisc.edu/~ zmiller/ca-howto/

  2. Luego cambié mi openssl.conf de tal manera que Mac Mail también me permite usar el certificado para el cifrado de correo electrónico.

    Lo importante es tener keyUsage y extKeyUsage

    [ v3_req ]
    
    # Extensions to add to a certificate request
    
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment,       dataEncipherment
    extKeyUsage = emailProtection, Apple .Mac email signing, Apple .mac email encryption
    

    Para las personas a las que les gustan las especificaciones, lea este https://www.ietf.org/rfc/rfc2459 , pero no encontrará las partes específicas de MacOS en él.

  3. Creó la clave privada y el certificado:

    openssl req -newkey rsa:4096 -keyout <e-mail>.key -config openssl.cnf -out <e-mail>.req -days 3650
    
    openssl ca -config openssl.cnf -out <e-mail>.crt -infiles <e-mail>.req
    

    Puede argumentar que diez años es demasiado tiempo para la vida útil de un certificado, pero quería tener algo que funcione ahora y dentro de 10 años o incluso menos, esta forma de encriptación no funcionará de todos modos. No quería renovar los certificados todo el tiempo ya que los creaba para toda mi familia.

    Si algo sale mal en este proceso, puede revocar el certificado de la siguiente manera:

    openssl ca -config openssl.cnf -revoke <e-mail>.crt
    

    Uno también debería crear crls, pero tampoco lo hice.

  4. Claves convertidas a un formato p12

    openssl pkcs12 -export -in <e-mail>.crt -inkey <e-mail>.key -out <e-mail>.p12
    
  5. Importado p12 a KeyChain en OS X 10.9.4 (13E28)

  6. Marcado como de confianza

  7. Certificado asociado con cuenta de correo en las preferencias de MacOS Mail en Información de cuenta en el campo Certificado TLS. Enviar correo a otra dirección de correo que también tenga un certificado y una clave y firmó el mensaje con mi clave pública, bueno, MacOS Mail hizo esto por mí.

  8. Recibí el correo y devolví mi primer correo cifrado.

Lo que me sucedió cuando probé el procedimiento con mi esposa fue que el símbolo del candado en mi correo de respuesta al primer correo firmado estaba atenuado y me desconcertó. Esto significaba que no podía cifrar los correos. La razón fue que recibí el correo firmado que me había enviado mi esposa, pero no marqué aquí la firma como confiable en el llavero de MacOS, ya que todas las firmas que uno recibe también terminan allí. Después de marcarlo como confiable y reiniciar Mail, todo funcionó bien.

Tal vez alguien o incluso la persona que pregunta pueda agregar la parte de Thunderbird a esta respuesta.

Creo que lo que realmente falta con respecto a la pregunta es esto: extKeyUsage = emailProtection, firma de correo electrónico Apple .Mac, cifrado de correo electrónico Apple .mac y posiblemente confiar en la firma recibida. Solo quería ser tan explícito para quitar parte del susto que, comprensiblemente, crea este proceso. El soporte de cifrado sigue siendo malo hoy en día y creo que la gente debería empezar a usar el cifrado y dejar de quejarse de que la gente los espíe, pero entiendo que el obstáculo para cifrar sigue siendo demasiado alto, nadie puede culparlos.
No necesitas esas extensiones. No parecen afectar nada. El correo de Apple seguía quejándose de no poder usar los certificados que generé para el cifrado. Creo que los bits críticos que me faltaban eran dataEncipherment en keyUsage y tener emailAddress=<foo> en la línea de asunto. Anteriormente los estaba moviendo a altSubjectName.
Curiosamente, aprendí que en realidad necesita Cifrado de clave en lugar de Cifrado de datos debido al hecho de que S/MIME usa una clave simétrica para el cifrado de datos, luego cifra esta clave simétrica usando la clave asimétrica del certificado. Encontré esta explicación aquí .

¿Hay alguna razón por la que estés intentando este enfoque en particular?

Si su verdadera pregunta es cómo enviar correos electrónicos firmados y encriptados, uso GPG (a través de GPGTools). Hay un complemento que funciona con Thunderbird, pero yo uso el correo de Apple.