2012-04-14 12 views
11

Estoy dividiendo pelos intentando que el servidor HTTPS se ejecute con el certificado de StartSSL. Tengo todos los archivos necesarios de ellos y los utilizo pasándolos en los createServer argumentos:Error al iniciar HTTPS en Node.js en Mac OSX usando StartSSL cert

var options = 
{ 
    ca:  FS.readFileSync('sub.class1.server.ca.pem'), 
    key: FS.readFileSync('ssl.key'), 
    cert: FS.readFileSync('ssl.crt') 
}; 

Y este es el error que tengo.

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line 
    at Object.createCredentials (crypto.js:87:31) 
    at HTTPSServer.Server (tls.js:914:28) 
    at HTTPSServer.Server (https.js:33:14) 
    at HTTPSServer.HTTPSServer (/Users/myUserName/node_modules/connect/lib/https.js:34:16) 
    at new HTTPSServer (/Users/myUserName/node_modules/express/lib/https.js:38:23) 
    at Object.createServer (/Users/myUserName/node_modules/express/lib/express.js:43:12) 
    at Object.<anonymous> (/Users/myUserName/Sites/node.js/https/app.js:12:36) 
    at Module._compile (module.js:441:26) 
    at Object..js (module.js:459:10) 
    at Module.load (module.js:348:31) 

Pensé que tal vez debería convertir el certificado a PEM. Pero correr:

openssl x509 -in ssl.crt -out ssl.der -outform DER 

... me da error similar

unable to load certificate 
67304:error:0906D06C:PEM routines:PEM_read_bio:no start line:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/pem/pem_lib.c:648:Expecting: TRUSTED CERTIFICATE 

Cualquier idea de por qué?

ACTUALIZACIÓN: Esto solo ocurre en OSX. Intenté ejecutar lo mismo en un servidor Ubuntu y funciona.

Respuesta

7

tuve el mismo problema. sin embargo, puedo confirmar que en mi máquina (macbook osx 10.7.3) el nodo https ahora se ejecuta sin error usando un certificado autofirmado.

que significa en particular de error que, o bien no puede encontrar los archivos, o no hay nada en los archivos (se puede confirmar esto pasando una cadena vacía o utilizando una ruta de archivo no válido.)

en primer lugar, tratar de usar rutas absolutas - p.ej FS.readFileSync (__ dirname + 'ssl.crt').

también abrir su certificado y los archivos de clave y confirmar que contienen datos en la forma: '----- BEGIN' ... etc.

Observe también que, mientras que sus archivos están .cert y .key archivos, la documentación se refiere a los archivos de certificado y clave con la extensión .pem.

http://nodejs.org/api/https.html

Por lo que entiendo, no hay mucha diferencia, el contenido aparece muy similar a mí, pero estas cosas pueden ser más incómoda.

aquí es un comando para convertir un archivo .csr a un archivo .pem:

openssl x509 -in -req certrequest.csr -signkey privatekey.pem salida privado certificate.pem

tomado de http://silas.sewell.org/blog/2010/06/03/node-js-https-ssl-server-example/

3

Creo que siguió este artículo https://tootallnate.net/setting-up-free-ssl-on-your-node-server como lo hice, y tuve el mismo problema que tenía. Pero después de revisar varias veces todos los archivos que obtuve de StartCom, descubrí que accidentalmente guardé una certificación y una clave privada como UTF8, no ANSI. Después de cambiar la codificación de los archivos a ANSI, node.js comenzó a funcionar como un encanto :)