2012-03-13 14 views
5

Voglio chiedere una cosa sulla firma digitale non sono molto sicuro. Invece di creare un certificato autofirmato da utilizzare per firmare alcuni file (PDF), volevo prendere il mio certificato SSL che ha già verificato i miei dati.È possibile utilizzare il certificato SSL SSL per firmare digitalmente i file?

Ma la domanda è: un certificato SSL può essere utilizzato per i file di firma digitale o è incompatibile in qualche modo?

MODIFICA: per chiarire, questa domanda non riguarda come firmare i PDF, riguarda solo se un certificato SSL può essere utilizzato (o convertito in qualsiasi modo) per firmare i file.

risposta

4

A supporto certificato per la firma digitale deve avere digitalSignature opzione è keyUsage campo (e codeSigning opzione è extendedKeyUsage campo se la vostra voglia di firmare programmi con esso).

firma può essere fatto con gli strumenti esistenti o manualmente (ad esempio Java, non chiedono, ma questo frammento di codice potrebbe essere utile in ogni caso):

byte[] bytesToSign = loadMyData(); 
KeyStore ks = KeyStore.getInstance("pkcs12", "SunJSSE"); 
ks.load(new FileInputStream("cert.p12"), "passwd1".toCharArray()); 
PrivateKey privateKey = (PrivateKey) ks.getKey("myalias", "passwd2".toCharArray()); 
Signature sig = Signature.getInstance("SHA1withRSA", ks.getProvider()); 
sig.initSign(privateKey); 
sig.update(bytesToSign); 
byte[] signature = sig.sign(); 

per rendere il proprio certificato non auto-firmato con openssl vedi this SO answer.

Anche curioso di firmare PDF - non sono sufficienti somme hash separate di questi file nel tuo caso?

edit: se volete qualsiasi segno, non proprio segno X.509 da strumenti esistenti, è possibile estrarre chiave RSA dal CERT e fare firmare senza preoccuparsi keyUsage campo.

+0

Sto parlando di fatture come PDF e devono essere firmate digitalmente per avere validità legale. Quindi, una semplice somma non è sufficiente in questo caso. – StormByte

+0

So già che posso rendere facilmente una chiave autofirmata per questo scopo, ma volevo evitare qualsiasi avvertimento che i miei clienti otterrebbero se lo facessi. – StormByte

1

Al centro, il certificato è solo una normale chiave pubblica RSA che è stata firmata da diverse autorità.

Quindi sì, sicuramente possibile.

Anche se non conosco alcun strumento diffuso di facile utilizzo per l'utente finale.

+0

Grazie, questo è quello che volevo sapere. Perché se può essere gestito da openssl per firmare le cose, allora funzionerà. – StormByte

+1

Vedere la risposta alx3apps per ulteriori informazioni. Puoi farlo, ma se non hai l'opzione digitalSignature in keyUsage, (o codeSigning per firmare il codice), la firma potrebbe essere rifiutata da altre implementazioni. – mfanto

1

Sì, è possibile firmare e verificare la firma di file utilizzando certificati SSL

Ecco un esempio:

SSLCERT='/XXXX/ssl/certs/fqdn.pem' 
SSLKEY='/XXXX/ssl/private_keys/fqdn.pem' 
# You might not need to specify a CA 
CACERTFILE='/XXXX/ssl/certs/ca.pem' 
# File to sign 
FILE='YYYYYYY' 

# Signs, needs ${SSLKEY} and ${FILE} 
openssl dgst -sha512 -sign ${SSLKEY} -out ${FILE}.sha512 ${FILE} 

# Then transfer the following files to another server: 
# - ${CACERTFILE} 
# - ${SSLCERT} 
# - ${FILE} 
# - ${FILE}.sha512 

# Check the certificate is valid 
openssl verify -verbose -CAfile ${CACERTFILE} ${SSLCERT} 
# Extract the pub key from the cert 
openssl x509 -in ${SSLCERT} -pubkey -noout > ${SSLCERT}.pub 
# Check the signature 
openssl dgst -sha512 -verify ${SSLCERT}.pub -signature ${FILE}.sha512 ${FILE} 
Problemi correlati