¿Cómo produzco una clave pública firmada por CA?

6

Tengo la necesidad de que otra persona cifre datos secretos con mi clave pública que luego pueda descifrar con mi clave privada. He producido un par de claves privada / pública RSA con OpenSSL, les di la clave pública y tengo todo funcionando.

Más recientemente, alguien señaló que estamos sujetos a un posible ataque de hombre en el medio donde los malos aceptarían mi clave pública y pasarían su propia clave pública al otro lado. El otro lado luego cifraría debidamente los datos secretos, se los pasaría al MITM, quien los descifraría y los volvería a cifrar con mi clave pública antes de pasármela sin que yo sepa. La solución recomendada es tener una clave pública firmada por una CA que el otro lado confíe antes de pasarla.

Como experimento, produje una CSR que pude firmar con mi propia CA, pero el certificado resultante también contiene la clave privada (encriptada). Preferiría no pasar mi clave secreta a otra persona, encriptada o no.

¿Hay alguna forma de firmar mi clave pública?

    
pregunta user1683793 18.12.2015 - 19:47
fuente

2 respuestas

4

La firma de una clave pública es efectivamente un certificado. Estos son los pasos que tomo para producir un certificado de clave pública que puedo distribuir a otro para que puedan comunicarse de forma segura conmigo:

Configuración

  1. Genera las claves privadas:
      

    openssl genrsa -out private.pem 2048

  2. Genera las claves públicas:
      

    openssl rsa -in private.pem -outform PEM -pubout -out public.pem

  3. Crear una CSR (solicitud de firma de certificado)
      

    openssl req -new -key private.pem -out certificate.csr

  4. Crear un certificado autofirmado (puede compartir este certificado)
      

    openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt

Encriptación

  

openssl rsautl -encrypt -inkey private.pem -keyform PEM -in data > encrypted_data

Descifrado

  1. Extraer la clave pública de los certificados
      

    openssl x509 -pubkey -noout -in certificate.crt > certpubkey.pem

  2. descifrar los datos
      

    openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data > datos

Si tiene la intención de que su CA firme la clave, tendrá que enviar su archivo CSR (y algo de efectivo) a la CA que elija, le darán el certificado que puede usar en lugar del auto certificado firmado que mencioné en los pasos anteriores.

    
respondido por el Whome 18.12.2015 - 20:26
fuente
0

Saque la clave privada cifrada de la copia del certificado de CA que creó (cuando se la da a otros). La clave privada no necesita estar allí a menos que la vaya a utilizar para firmar un certificado que contenga otra clave pública.

Cuando está enviando su clave pública, en lugar de eso, envíe un certificado completo (excepto la clave privada), firmado con la clave privada de la CA asociada. Para verificar la validez de la clave pública dentro de ella, debe verificar el hash del certificado contra el hash cifrado (que se cifró con la clave privada de la CA). Esto se descifra utilizando la clave pública de la CA. Si el descifrado es exitoso y el hash coincide con el hash del certificado, entonces la información dentro del certificado puede ser confiable.

También hay más que solo cifrado, por ejemplo, un ataque de repetición en el que un atacante envía datos cifrados guardados previamente. TLS cubre mucho más de lo que la persona promedio pensaría, y no se recomienda implementar un sistema similar. Use TLS siempre que sea posible para cualquier cosa que sea privada.

    
respondido por el Jonathan Gray 18.12.2015 - 20:30
fuente