2012-03-13 15 views
5

Quiero preguntar algo sobre la firma digital, no estoy muy seguro. En lugar de crear un certificado autofirmado para usarlo para firmar algunos archivos (PDF), quería tomar mi certificado SSL que ya tenía mis datos verificados.¿Se puede usar el certificado SSL para firmar digitalmente los archivos?

Pero la pregunta es: ¿se puede usar un certificado SSL para firmar digitalmente o es incompatible de alguna manera?

EDITAR: Para aclarar, esta pregunta no se trata de cómo firmar PDF, solo se trata de si un certificado SSL se puede utilizar (o convertir de cualquier manera) para firmar archivos.

Respuesta

4

Para apoyar certificado de firma digital debe tener en digitalSignature opción es keyUsage campo (y codeSigning opción es extendedKeyUsage campo si desea firmar su programas con él).

de firma se puede hacer con las herramientas existentes o manualmente (ejemplo de Java, que no está solicitando para ello, pero este fragmento de código podría ser útil en cualquier 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(); 

para hacer su propio certificado no autofirmado con openssl ver this SO answer.

¿También le interesan las firmas de PDF? ¿No son suficientes las sumas de hash separadas de estos archivos en su caso?

edición: si quieres cualquier signo, no exactamente signo X.509 por las herramientas existentes, se puede extraer la clave RSA de su certificado y qué firmar sin preocuparse de keyUsage campo.

+0

Estoy hablando de facturas en formato PDF, y se requiere que estén firmadas digitalmente para que tengan validez legal. Entonces, una suma simple no es suficiente en este caso. – StormByte

+0

Ya sé que puedo hacer fácilmente una clave autofirmada para este propósito, pero quería evitar cualquier advertencia que recibirían mis clientes si lo hiciera. – StormByte

1

En esencia, el certificado es solo una clave pública normal de RSA que ha sido firmada por varias autoridades.

Así que sí, definitivamente posible.

Aunque no conozco ninguna herramienta extendida fácil de usar para el usuario final para esto.

+0

Gracias, eso es lo que quería saber. Porque si puede ser manejado por openssl para firmar cosas, entonces funcionará. – StormByte

+1

Consulte la respuesta alx3apps para obtener más información. Puede hacerlo, pero a menos que tenga la opción de firma digital en KeyUsage, (o codeSigning para firmar el código), la firma podría ser rechazada por otras implementaciones. – mfanto

1

Sí, puede firmar y verificar la firma de archivos utilizando certificados SSL

He aquí un ejemplo:

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} 
Cuestiones relacionadas