Para solicitar un certificado, necesitamos crear la peticion y al mismo tiempo la llave que tendra nuestro certificado.
Creamos unas variables para el dominio
DOMAIN=midominio.com
Creamos Request (CSR)
openssl req -new -newkey rsa:2048 -sha256 -nodes -out $DOMAIN.csr -keyout $DOMAIN.key
Al crear el request, nos pedira informacion sobre el certificado.
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Tambien nos pedira unos extras. Que los podemos omitir.
A challenge password []:
An optional company name []:
Esto nos genera dos archivos, un .csr y un .key
Es importante no perder el .key ya que ese es la llave para cifrar el certificado y va configurado en el cervidor web.
Nuestor CSR lo enviamos a la certificadora de confianza. Puede ser:
Entre muchos otros.
Una vez que la certificadora nos devuelve el certificado firmado, vamos a configurar el servidor web, en este caso utilizaremos nginx
Basados en la certificadora Thawte, nos envia dos archivos.
- Certificado (ssl_certificate.crt)
- Intermediarios (IntermediateCA.crt)
Para configurar nginx, necesitamos dos archivos. El certificado y la llave.
Para tener el certificado tendremos que concatenar el certificado de nuestro dominio con el certificado de los intermediarios.
Antes concatenar, debemos asegurarnos que quede primero el certificado de nuestro dominio.
DOMAIN=midominio.com
cat ssl_certificate.crt > $DOMAIN.crt
cat IntermediateCA.crt >> $DOMAIN.crt
Con el certificado concatenado y la llave, vamos a copiar los archivos a nuestro servidor.
- dominio.com.crt
- dominio.com.key
Para cerciorarse de que los tres archivos pertencen al mismo request/dominio, hacemos lo siguiente:
openssl x509 -noout -modulus -in $DOMAIN.crt | openssl md5
openssl rsa -noout -modulus -in $DOMAIN.key | openssl md5
openssl req -noout -modulus -in $DOMAIN.csr | openssl md5
El hash debe de ser el mismo en los tres
Los movemos a su ruta respectiva
DOMAIN=midominio.com
mv $DOMAIN.key /etc/ssl/private/
chmod 400 /etc/ssl/private/$DOMAIN.key
mv $DOMAIN.crt /etc/ssl/certs/
chown root:root /etc/ssl/private/$DOMAIN.key
chown root:root /etc/ssl/certs/$DOMAIN.crt
Ahora editamos nuestro archivo de configuracion.
vim /etc/nginx/sites-available/dominio.com
Agregar o midificar lo siguiente:
# ...
server {
listen 443;
server_name dominio.com;
ssl on;
ssl_certificate /etc/ssl/certs/dominio.crt;
ssl_certificate_key /etc/ssl/private/dominio.key;
# ...
listo.
Podemos revisar aqui: