Resumen
Hace poco tuve que habilitar el protocolo https en uno de mis servidores. En esta pequeña experienca les explicaré los pasos que tube que realizar para poder adquirir un certificado SSL e instalarlo en NGINX.
Temas:
- Generación del certificado CSR.
- HTTPS en NGINX
Generación del CSR
Al adquirir un licencia para un certificado SSL, para que me puedan dar el certificado se debe generar un Solicitud de Firma de Certificado (CSR), Para esto se debe generar una llave privada y la solicitud, podemos crear ambos con el siguiente comando:
openssl req -nodes -newkey rsa:2048 -keyout dominio.com.key -out dominio.com.csr
Ambos archivos generados (dominio.com.key y dominio.com.csr), deben ser enviados a la entidad certificadora. Finalmente te enviarán el certificado firmado por dicha entidad
HTTPS en NGINX
En mi caso, la entidad certificadora, me envió el certificado con el nombre dominio.crt, además de los siguientes certificados propios de la entidad:
- COMODORSADomainValidationSecureServerCA.crt
- AddTrustExternalCARoot.crt
- COMODORSAAddTrustCA.crt
Debemos unir todos los certificados en uno solo:
cat dominio.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt AddTrustExternalCARoot.crt > dominio_all.crt
Finalmente ubicamos la llave privada y el certificado en un directorio. En el archivo del dominio de NGINX /etc/nginx/sites-available/dominio:
server { listen 443; server_name dominio; root html; index index.html index.htm; ssl on; ssl_certificate <ruta archivo dominio_all.crt> ssl_certificate_key <ruta archivo dominio.key>; ........... }
Debes reemplazar:
<ruta archivo dominio_all.crt>: Ruta del archivo dominio_all.crt el cual se generó al unir los certificados enviados por la entidad certificadora.
<ruta archivo dominio.key>: Ruta al archivo dominio.key el cual se generó al generar la solicitud CSR.
Problemas:
Si en firefox aparece el siguiente error:
www.domain.com uses an invalid security certificate. The certificate is not trusted because no issuer chain was provided. (Error code: sec_error_unknown_issuer)
Esto sucede por que en la sección ssl_certificate de NGINX se colocó la ruta del certificado dominio.crt en vez de el concatenado dominio_all.crt.