Ayer instalé mi primer certificado oficial. Se trata de un Positive SSL de Comodo, de unos 4 euros al año. Comprado en DonDominio para más detalles: Comodo Positive SSL
Llevaba unos cuantos días usando un certificado casero o «self-signed certificate» (Creating a Self-Signed SSL Certificate) porque aun no tenía comprado el dominio. Pero ayer ya me decidí así que voy a explicar cuáles fueron los pasos, ya que en realidad es mucho más sencillo de lo que pudiera parecer, claro que la primera vez es más complicado. Además para Node.js no es que haya muchos tutoriales, así que creo que merece la pena.
Bueno, primer paso, comprar el certificado. Para ello hay que rellenar un formulario, el CSR (Certificate Signing Request) con los siguientes datos:
- Dominio/Subdominio
- Empresa/Organización
- Sección/Departamento
- País, provincia y localidad
Esto está muy bien, claro que cuando no eres una empresa pueden surgir dudas ¿verdad? Al menos ese fue mi caso, ¿qué pongo en «empresa»? ¿es importante o puedo poner cualquier cosa? Tras consultar con el soporte técnico de DonDominio (muy majos dicho sea de paso) me informan de que al tratarse de un certificado de validación de dominio (y no de validación de empresa) se puede poner el dominio. Y en la sección o departamento pues… otro tanto de lo mismo. Así que el CSR quedaría tal que:
- Dominio: www.midominio.com (Sí, con el www. No pasa nada porque este certificado en concreto funcionará también para el dominio sin www)
- Empresa: MiDominio.com
- Sección: MiDominio
Vale, con esto se genera el CSR y DonDominio nos proporciona la que será nuestra clave privada. Debemos guardar esto en un archivo, que llamaremos midominio.com.key para más adelante, y tendrá un aspecto tal que así:
-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC3hD6pqd7yWwd4 PatD050n805m5WBs1YkCksMtC6kN7Dq7J0DO7V9y1HvOD0/evAYjhRPNFhPpK3R6 +ycq3di4/EXbLJgViyGzREwKdj7OFe4+kUeatA6V2V86BGJNKgyo4GscLPl+8Xa5 Yv69YX1KQLslwRvf9lm1J5aQOh1Xrl5HPLBwDn59GeXor4l4GyLjdpUPWv/I92av 66y53TJ2baNKAQKHjopsRM0c0Tt7i+OVIz5WHx++TWmIOqEQ4gWEWj/IslPciY6i +sa9nNE0UkmDLpII5aqy3E20jFgF+OHopmCMN+qmkLTG7Pk7fL5+pht/ZmCZVyDc hq0NYkHpAgMBAAECggEAeBP99IIEMUxCzPh9EbprQGhJKqa3uz7VkWt6bgUNLuD9 ZOxASaWkKMH/+EqoljMtSRyQYkcp7A3U/4tKi4/xeMkI5Gp/cMlC2cu8fbP1UF+l LiddVOqwCHjdCFdKAveapP2C2ELNVbSlXJRb3orlsio8ym1a0eaduB0ZNXHxNSb0 EoiPJ3NrTlqvynMgYbeedUYCLNB125IiNlzK7SNIKXpDCuZmKdyClxsPgl47u4EG GEy4TEYUC6I3IhRl8jVsU6a7dZtJGleo2xUxyZ2LkAFl01k5b5XGre2ulhZiugTJ AP7zk67kXtv2W4YDgEiNSW3WwfEogMN1nI7QKWaxCQKBgQDtYmsGP3sHN8HcpIb/ 9on94CB00kksBJnm4O/sctFvd1eVb9mbN+uDWpYrJtAFVXIFeA0X6SuD0YU56XT5 rgptAgRqgscBwQaEalxuYj7hDZe/CVZrDwBRAgjnbsXxDluIVsQM+BnHt7izhzva iGHo4mdGC1nzUpEkhESh4iN3KwKBgQDF6Gi6cI7E4WuUp+vdyKHfAUeuoIMPSVaT U7k0BZQ/wx9K2Gn/QTKZrfCMXYkoJSQvmzyqBP1yDdFTyK7xvkGwZ/Q+MpKIVwnz rKwqig4opZLtBaoVg/KpXctuwEt6S5b62msUszrZ6TfZkG0a45qOcAmtTSAf8XbS r9hrnevhOwKBgCAmcDBMcLEskAf+EHqiPVYxALRRtq9LgDyQwm3Xrx3Vn/sRRvuK u07y+dumSg4u4F51P/C5F7emrNCHGdynAap513dFdwZ5yhQtA4+/ppx8ZszsytN9 GKHgEKyniA95zlPMzIilIXi3HUDTU/vo9LnB0BLgfrJBwH6dm14BbqQ5AoGAORw4 HJUenfHu+Zb7maSsEY5tAReQuniPYzRl3X0+qqfD//UzoVVPJMntAJR9X/hX2OUT PHz0JlWWcncXBOvCSQW2lbxCGNXRKWBKznvIWmit3Xgk/NB21ika63rSTRhDGWCu RerysK98Tmw/D+NeVnw+TqRTAOTNRT85VNTdnMECgYBSvHAqF6munuANKHjdzWDI RRVEczDsdAooVIV2PSvM6JaOeL4kBU7ckDnarf+sM1dx5sBl9K0TeiRJGRZgfI9X Ixd+YfQL9ENXBLMrWDqvZdVbduen3bVl5MUFKUJZJo0CkG2OKoReOiAeCcIDbpIq BP3E82f9L/a3Bm5ACIefag== -----END PRIVATE KEY-----
Completado el proceso de compra ya solo falta esperar a que nos llegue el email de verificación, que es básicamente un link que debemos pulsar. En pocos minutos (muy pocos de hecho) Comodo nos enviará un email con un archivo .zip adjunto. Dentro de ese zip vienen tres ficheros:
- AddTrustExternalCARoot.crt (Root CA Certificate)
- PositiveSSLCA2.crt (Intermediate CA Certificate)
- www_midominio_com.crt (Your PositiveSSL Certificate)
Bien, DonDominio nos enviará también un email con estos mismos datos, pero más preparaditos. Concretamente nos adjunta dos archivos:
- certificate.crt: El certificado SSL
- certificate.ca-crt: Los certificados SSL intermediarios
ACTUALIZADO 20/06/14: he descubierto que lo que nos manda DonDominio no nos sirve tal cual. Resulta que en el navegador del ordenador sí que estaba funcionando, pero en el móvil daba una advertencia de seguridad diciendo que el certificado no era de confianza (tanto chrome como firefox). Así que vamos a utilizar los archivos que nos envía Comodo. Vamos a crear dos archivos:
- ca
- cert
Son los dos archivos que debemos pasarle a la configuración de Express.
El primero es justo el AddTrustExternalCARoot.crt. Listo.
El segundo es un poco más elaborado, hay que añadirle a www_midominio_com.crt el contenido de PositiveSSLCA2.crt. Tampoco era tan complicado. Resumiendo:
- ca = AddTrustExternalCARoot.crt
- cert = www_midominio_com.crt + PositiveSSLCA2.crt
El aspecto del ‘cert’ sería tal que así:
-----BEGIN CERTIFICATE----- MIIENjCCAz6gAwIBAgIBATANBgkqhkuG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs [ etc etc etc ] Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a mnkPIAou1Z5jJh5VkpTLghdae7C8x49OhgQ= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEPDCCAySgBwIBAgIQSEus7arH1xND0aJ0NUmXJTANBgkqhkiG9w0BAQUFADBv MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk [ etc etc etc ] NREU768A/l7qX46w2ZJZuvwTlqAYAVbO2vYoC7Gv3VxPXLLzj1pxz+0YrWOIHY6V 9+qV5x+tkLiECEeFfyIvGh1IMNZMCNg3GWcyK+tc0LL8blefBDVekAB+EcfeEyrN pG1FJseIVqDwavfY5/wnfmcI0L35tsNhAgFlubgvz1u= -----END CERTIFICATE-----
Y con esto ya lo tenemos todo, ahora vamos a montarlos en el servidor:
var express = require('express');
var app = express();
var fs = require('fs');
var https = require('https');
var credentials = {
ca: fs.readFileSync(__dirname+"/ssl/certificate.ca", 'utf8'), //la certification authority o CA
key: fs.readFileSync(__dirname+"/ssl/midominio.com.key", 'utf8'), //la clave SSL, que es el primer archivo que generamos ;)
cert: fs.readFileSync(__dirname+"/ssl/certificate.crt", 'utf8') //el certificado
};
app.configure(function() {
// set up your express application
});
var httpsServer = https.createServer(credentials, app);
httpsServer.listen(443);
Lógicamente deberás cambiar el:
__dirname + "/ssl/certificate.ca"
Por la ruta donde hayas metido los archivos. Pero hemos terminado, así de sencillo, todo en menos de 10 minutos.
como los articulos precedentes, este tmb muy interesante para mi. un saludo
Hola Salvatore:
Felicitarte por tu post, muy útil!!! Tengo un problema cuando meto el certificado intermedio, el Root CA Certificate me deja de funcionar. Y cuando quito el intermedio el CA me vuelve a funciionar. La códificación que utilizo es ANSI. pero no la indico en el código.
Te agradecería enormemente ayuda para resolver mi problema.
Gracias.
Hola:
Lo solucioné de la siguiente manera:
var certs = {
key: fs.readFileSync(‘cert/private.key’),
ca: [fs.readFileSync(‘cert/intermediate1.crt’),
fs.readFileSync(‘cert/intermediate2.crt’)],
cert: fs.readFileSync(‘cert/public.crt’)
}
https.createServer(certs, router).listen(443);
Pero tengo el problema que en Opera no me reconoce que está validado, os ha ocurrido?
Gracias.
Hola Yago, con el certificado que utilicé yo no he tenido ningún problema, en Opera tampoco. El tuyo parece algo distinto, pero la solución creo que es buena: http://stackoverflow.com/a/20444809/920173
Busca con el nombre de tu certificado a ver si es que no está reconocido por Opera y no es un problema de la configuración del servidor.
Hola, yo no tengo el documento .ca. tengo el .crt, .key y .csr. Como puedo hacer? porque el navegador me tira error.
Hola buenas mavi, pudiste solucionarlo ?