2011-06-02 175 views
11

¿Hay alguna manera de validar firmas en Node.JS (v0.4 +) con claves públicas?Uso de la clave pública para verificar la firma en Node.JS crypto

El módulo de cifrado actual permite esto con certificados pero no con claves públicas. Por ejemplo:

var crypto = require("crypto"); 

verifier = crypto.createVerifier("sha1"); 
verifier.update("signed data"); 
verifier.verify(CERT, signature); 

variable CERT debe ser firmado certificado (supongo que la clave pública se extrae de eso), pero todo lo que tengo es la clave pública y no un certificado.

manera Sólo sólida para lograr esto parece ser vertido el contenido de los datos, la clave pública y la firma en archivos y ejecutar openssl dgst

fs.writeFileSync("public.key", pubkey); 
fs.writeFileSync("sig.sha1", signature); 
fs.writeFileSync("data.txt", data); 
exec("openssl dgst -sha1 -verify public.key -signature sig.sha1 data.txt", ...) 

Pero la creación (y eliminar) los archivos cada vez que necesito para verificar una la firma parece un desperdicio total.

¿Alguna buena idea de cómo hacerlo mejor?

ACTUALIZACIÓN 2011-08-03

módulo de cifrado en Node.js v0.5 permite verificar both with certificates and public keys (RSA o X.509)

+0

Bueno, estoy bastante seguro de que openssl es el camino a seguir. ¿Te permitirá transmitir los valores o debe esa aplicación usar archivos? ¿Con qué frecuencia vas a hacer esto? – jcolebrand

+0

Regularmente, pero no muy a menudo. Puedo vivir con esta solución, pero se siente tan mal, especialmente cuando se compara con el cripto.verificador mucho más elegante. Preferiría no usar archivos. – Andris

+0

Quiero pasar una clave pública como primer argumento, pero no estoy seguro de si debería ser la cadena codificada en b64, la cadena envuelta con '---- BEGIN KEY ----' y '----- END KEY ---- 'o nuevo Buffer (the_string,' base64 '). Intenté todo, pero crypto todavía está buscando CERTIFICADO. ¿Cómo puedo decir que estoy pasando una clave pública directamente? –

Respuesta

1

¿Por qué no acaba de tomar su clave pública y ponerlo en un certificado autofirmado? Entonces el módulo de cifrado del nodo funcionará bien para usted.

http://www.akadia.com/services/ssh_test_certificate.html

Me gustaría pensar que haciendo esto sería mucho más eficiente que se bifurcan un subproceso OpenSSL.

+0

¿Es posible generar un certificado con una clave pública? Todos los ejemplos usan claves privadas no públicas. – Andris

+0

Todos los ejemplos implican un par de 2 claves, 1 privada, 1 pública. Cuando crea la CSR, la CSR contiene un certificado y un certificado contiene una clave pública. Aquí hay un documento que es más claro que el "genrsa" en realidad genera un par de claves conectadas, 1 público y 1 privado. http://www.openssl.org/docs/HOWTO/keys.txt. Primer párrafo: "Con OpenSSL, la clave privada contiene la información de la clave pública también, por lo que una clave pública no necesita ser generada por separado." –

Cuestiones relacionadas