Cómo codificar un post utilizando el file SSL smime.p7s de alguien

Necesito enviar un file de key privada a alguien (un administrador de sistemas de confianza) de forma segura. Sugerí un par de opciones, pero él respondió lo siguiente:

Hola, no tengo ni LastPass ni GnuPGP, pero estoy usando certificates ssl, este post está firmado para poder enviarme un post y encriptarlo con mi key pública.

Usé openssl para get su certificate:

openssl pkcs7 -in smime.p7s -inform DER -print_certs 

El certificate es emitido por:

 issuer=/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org 

(Firefox no tiene un certificate raíz de cacert.org).

Ahora, ¿cómo cifro el file de key que deseo enviarle? Prefiero usar una herramienta de command-line disponible en Ubuntu.

@lgeorget:

 $ openssl pkcs7 -inform DER -outform PEM -in smime.p7s -out smime.pem $ openssl smime -encrypt -text -in /home/myuser/.ssh/mykeyfile smime.pem unable to load certificate 139709295335072:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE 

y

 $ openssl pkcs7 -in smime.p7s -inform DER -print_certs subject=/CN=Wojciech Kapcia/emailAddress=someone@example.com/emailAddress=someone@example.com issuer=/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org -----BEGIN CERTIFICATE----- MIIFzjCCA7agAwIBAgIDDR9oMA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jv b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ dEBjYWNlcnQub3JnMB4XDTEzMDQxODA3NDEzNFoXDTE1MDQxODA3NDEzNFowcDEY MBYGA1UEAxMPV29qY2llY2ggS2FwY2lhMSkwJwYJKoZIhvcNAQkBFhp3b2pjaWVj [snip] N1lNLq5jrGhqMzA2ge57cW2eDgCL941kMmIPDUyx+pKAYj1I7IibN3wcP1orOys3 amWMrFRa30LBu6jPYy2TeeoQetKnabefMNE3Jv81gn41mPOs3ToPXEUmYU18VZ75 Efd/qu4SV/3SMdySSNmPAVQdXYAxBEXoN5b5FpUW7KeZnjoX4fkEUPeBnNwcptTC d1w= -----END CERTIFICATE----- 

Tu puedes hacer

 openssl smime -encrypt -text -in <file> smime.p7s 

donde <file> es el file que desea encriptar. Si el file smime.p7s está en formatting DER en lugar de PEM, deberá convertirlo con:

 openssl pkcs7 -inform DER -outform PEM -in smime.p7s -out smime.pem 

Obtiene un file que puede enviar a su administrador de sistemas. Si eres lo suficientemente valiente, puedes eliminar -text y jugar con la opción -subject , -subject , etc. para get un file de correo electrónico válido que puedes enviar directamente a un server SMTP.

Si el certificate raíz del certificate que usa para encriptar no es reconocido por su sistema operativo pero USTED confía en él, puede agregarlo a la base de certificates.

 cp smime.pem /usr/local/share/ca-certificates/certificate.crt sudo update-ca-certificates 

El certificate debe tener la extensión .crt . Detalles aquí .

Sí, extraer el cert FROM pkcs7 con -print_certs es correcto, y si quieres confiar en la raíz del destinatario, utiliza el de cacert.org, no el cert de pkcs7.

Algunas explicaciones / notas:

Las líneas adicionales antes del bloque cert no son un problema. openssl permite text de 'comentario' en files PEM antes de la línea '—– BEGIN' (y después de '—– END') aunque esto no es estándar y otros progtwigs a menudo no lo hacen.

El post de error sobre 'CERTIFICADO DE CONFIANZA' es un poco engañoso. openssl en realidad permite dos variantes en un file PEM de certificate: '[X.509] CERTIFICADO' y 'CERTIFICADO DE CONFIANZA'. El primero es estándar, el último solo se usa dentro de openssl y solo en raras ocasiones. openssl los busca en ese order, de modo que si no encuentra alguno de los dos posts de error, dice TRUSTED not found. Este formatting permite ciertos attributes de confianza en el file cert y es diferente de la presencia del certificate en el directory (o file) del almacén de confianza de openssl.

openssl sime -encrypt NO verifica que el openssl sime -encrypt del destinatario valide contra el almacén de confianza, aunque tal vez debería. Si hay alguna posibilidad de que el p7s / cert que recibió haya sido alterado o falsificado, debe openssl verify manualmente el certificate antes de usarlo, porque si ese certificate tiene realmente la key de un tipo malo en vez de la del tipo bueno, sus datos pueden ser desencryptions por el mal chico.