Crea firma PKCS7, firmata da CA X.509, che incorpora un file XML

2

Devo creare un file di firma PKCS7 firmato da un certificato X.509 e devo incorporare un file XML all'interno.

Come farlo con OpenSSL o qualsiasi altro strumento?

    
posta Hakim 25.06.2015 - 10:59
fonte

1 risposta

2

Per essere chiari, i dati da firmare sono esattamente i contenuti di un file, XML o altro?

Non puoi firmare solo con un certificato. Devi firmare con una chiave privata e quindi fornire il certificato di corrispondenza per consentire ai destinatari di verificare il messaggio quando lo ricevono. Quando si utilizza un certificato emesso da una CA ben nota (ad esempio, Verisign), di solito è necessario fornire un certificato catena non solo il singolo certificato. Alcune UI (in particolare Windows e almeno alcuni altri browser) usano in modo confuso il termine "certificato" per indicare un solo cert da solo, o una combinazione di una chiave privata più un certificato o una catena di certificati.

OpenSSL in realtà supporta CMS (Cryptographic Message Syntax) che è la versione IETF aggiornata di PKCS # 7, come TLS è la versione IETF aggiornata di SSL. Se le differenze tecniche molto piccole tra la versione precedente PKCS # 7 e la versione corrente CMS sono importanti per te o per i tuoi destinatari, probabilmente dovrai scrivere un programma personalizzato, che può utilizzare la libreria OpenSSL. OpenSSL supporta anche S / MIME che è fondamentalmente solo CMS adattato al formato MIME (utilizzato in Internet-email e HTTP) . Per confondere un po 'le cose, la riga di comando attuale di OpenSSL ha due sottocomandi:

  • openssl smime ... una vecchia utility che supporta effettivamente sia S / MIME che CMS

  • openssl cms ... una nuova utility che anche supporta effettivamente sia CMS che S / MIME

Vedi link e link .

Il caso più semplice della firma con dati incorporati (non "distaccati") è se hai il cert X.509 e la chiave privata (entrambi) in formato PEM in un file:

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

Seleziona -outform pem o der a seconda del formato di output desiderato, ma non ometterlo; il formato predefinito è S / MIME, che non è quello che hai richiesto. L'output è normalmente su stdout, che è possibile reindirizzare o inviare a qualcos'altro come appropriato; aggiungi -out outputfile per scrivere direttamente in un file.

Variazioni: se hai la chiave e il certificato in diversi file, ma entrambi i PEM, puoi semplicemente concatenarli in un unico file o usare -signer certfile -inkey keyfile . Se devi fornire un certificato di catena (o più) e lo hai (o loro) in formato PEM in un file o file, aggiungi -certfile chaincertfile una volta o tutte le volte che è necessario. Se il "certificato" (e la chiave privata!) Che hai è in qualsiasi altra forma, OpenSSL può convertire molte altre forme (anche se non tutte) nei file PEM che preferisce; fornire più dettagli esatti. (Modifica la domanda facendo clic sulla parola "modifica" in fondo, per chiarezza quali dati vengono aggiunti o modificati). Se i tuoi dati non sono esattamente un file, ma possono essere selezionati o prodotti in altro modo da qualche altro programma, ometti -in inputfile e invece inserisci l'input di openssl da quell'altro programma.

Tutto ciò presuppone che OpenSSL sia disponibile sul sistema che si usa, o in modo equivalente si usi un sistema in cui OpenSSL è disponibile. Se hai bisogno di ottenere OpenSSL , specifica il tuo sistema operativo.

    
risposta data 26.06.2015 - 07:57
fonte

Leggi altre domande sui tag