Crear una firma PKCS7, firmada por X.509 CA, que incrusta un archivo XML

2

Tengo que crear un archivo de firma PKCS7 firmado por un certificado X.509 y tengo que incrustar un archivo XML dentro.

¿Cómo hacer eso con OpenSSL o cualquier otra herramienta?

    
pregunta Hakim 25.06.2015 - 10:59
fuente

1 respuesta

2

Para ser claros, los datos a firmar son exactamente los contenidos de un archivo, XML o de otro tipo.

No puedes firmar solo con un certificado. Debe firmar con una clave privada y luego proporcionar el certificado coincidente para permitir que los destinatarios verifiquen el mensaje cuando lo reciban. Al utilizar un certificado emitido por una CA conocida (por ejemplo, Verisign), generalmente debe proporcionar una cadena de certificado , no solo el certificado único. Algunas interfaces de usuario (especialmente Windows y al menos algunos otros navegadores) usan confusamente el término "certificado" para significar solo un único certificado, o una combinación de una clave privada más Un certificado o una cadena de certificados.

OpenSSL en realidad admite CMS (Sintaxis de mensajes criptográficos) , que es la versión actualizada de IETF de PKCS # 7, como TLS es la versión actualizada de IETF de SSL. Si las diferencias técnicas muy pequeñas entre la versión anterior PKCS # 7 y la versión actual de CMS son importantes para usted o sus destinatarios, es probable que tenga que escribir un programa personalizado, que pueda usar la biblioteca OpenSSL. OpenSSL también admite S / MIME , que es básicamente solo CMS adaptado al formato MIME (utilizado en Internet, correo electrónico y HTTP) . Para confundir un poco las cosas, la línea de comandos actual de OpenSSL tiene dos subcomandos:

  • openssl smime ... una utilidad anterior que en realidad admite S / MIME y CMS

  • openssl cms ... una utilidad más reciente que también en realidad admite tanto CMS como S / MIME

Consulte enlace y enlace .

El caso más simple de firmar con datos incrustados (no "separados") es si tiene el certificado X.509 y la clave privada (ambos) en formato PEM en un archivo:

openssl cms -in datafile -sign -signer keyandcertfile -nodetach -outform pem|der

Seleccione -outform pem o der según el formato de salida que desee, pero no lo omita; el formato predeterminado es S / MIME, que no es lo que pediste. La salida es normalmente en la salida estándar, que puede redirigir o canalizar a otra cosa según corresponda; agregue -out outputfile para escribir directamente en un archivo.

Variaciones: si tiene la clave y el certificado en diferentes archivos, pero ambos PEM, puede concatenarlos en un solo archivo o usar -signer certfile -inkey keyfile . Si necesita suministrar un certificado de cadena (o varios) y lo tiene (o ellos) en formato PEM en un archivo o archivos, agregue -certfile chaincertfile una o tantas veces como sea necesario. Si el "certificado" (y la clave privada) que tiene está en cualquier otra forma, OpenSSL puede convertir muchas otras formas (aunque no todas) a los archivos PEM que prefiera; Proporcionar detalles más exactos. (Edite su pregunta haciendo clic en la palabra "editar" en la parte inferior; para aclarar qué datos se agregan o modifican). Si sus datos no son exactamente un archivo, pero pueden ser seleccionados o producidos por otro programa, omita -in inputfile y en su lugar canalice la entrada de openssl de ese otro programa.

Todo esto supone que OpenSSL está disponible en el sistema que usa, o de manera equivalente usa un sistema donde OpenSSL está disponible. Si necesita obtener OpenSSL , especifique su sistema operativo.

    
respondido por el dave_thompson_085 26.06.2015 - 07:57
fuente

Lea otras preguntas en las etiquetas