Crear certificados para mis sitios web, con los nuevos registros SAN

Vamos a crearnos CERTIFICADOS, para configurar nuestro servidor con HTTPS. Todo esto lo vamos a realizar en debian, usando la linea de comandos. Se supone que esta correctamente instalado, y configurado

Hay que instalar un software, que permita crear, y manejar certificados

apt-get install openssl

Vamos a crearnos, nuestra AUTORIDAD DE CERTIFICACION. Para eso, nos vamos a la carpeta o directorio correcto

cd /etc/ssl/private

Tenemos que crearnos una CLAVE para nuestro certificado, y una vez que tengamos dicha clave, crear el CERTIFICADo, que usaremos como CA, para FIRMAR los certificados que usaremos en APACHE

openssl genrsa -out rootCA.key 2048 -des3

Una vez creada la KEY, queremos crear el certificado que sera realmente el certificado que firmara los dominios https, que le pidamos.

openssl req -x509 -new -nodes -key rootCA.key -days 365 -out rootCA.pem

Hasta aqui, tenemos creado un certificado para poder firmar certificados para nuestros dominios. Los archivos que tenemos que mantener bien guardados, y crearnos una copia de seguridad a ser posible, son

rootCA.key
rootCA.pem

Si queremos que nuestros navegadores, detecten nuestras conexiones https como seguras, deberiamos importar el archivo rootCA.pem en nuestro gestor de certificados raiz de confianza

**************************************

Vamos a ver como crear un certificado, que sera valido con la extension SAN, para nuestros sitios web, que responda tanto al dominio.com, como al www.dominio.com. Para mi ejemplo usare “david.com”

Sigo en el directorio /etc/ssl/private

Creo el archivo de configuracion david.com.cnf

nano david.com.cnf

Quedando asi…. sin los ——
—————————————————-
[ req ]
prompt = no
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Es
stateOrProvinceName = Zaragoza
localityName = Spain
organizationName = OrganizacionDavid
commonName = david.com
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = david.com
DNS.2 = www.david.com
—————————————————–

Usando esa configuracion genero la key y la peticion

openssl req -out david.com.csr -newkey rsa:2048 -nodes -keyout david.com.key -config david.com.cnf

Compruebo la peticion creada que sea correcta

openssl req -noout -text -in david.com.csr

Genero el certificado

openssl x509 -req -in david.com.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out david.com.crt -days 365 -extensions req_ext -extfile david.com.cnf

Solo tenemos que configurar apache, para usar los archivos

david.com.crt
david.com.key

Esto lo configuramos en nuestro virtualhost, con ssl activado

Reiniciamos APACHE

Como crear un certificado ssl de dominio para nuestra pagina web, usando cacert.org

Cacert.org, es una pagina web que nos permite de forma gratuita, darnos de alta y crear certificados de dominio que podemos utilizar para que nuestra página web tenga conexion ssl, y asi utilizar conexiones cifradas usando protocolo https.

Asi nuestros usuarios se sentiran mucho mas seguros. Eso si, al no tratarse de una entidad certificadora de pago, la mayoria de navegadores web, no vienen con cacert.org añadido a su lista de certificadoras oficiales, con lo que nuestros usuarios se deberian descargar la certificadora, e instalarla en sus equipos. Se puede descargar desde aqui: http://www.cacert.org/index.php?id=3

Requisitos:

  • Servidor bajo linux
  • Acceso a la linea de comandos como root
  • Conocimientos sobre la creación y modificación de virtualhost en apache

Vamos alla!! Lo primero es tener un dominio que nos lleve a nuestra página web, completamente accesible desde internet. Nos damos de alta en la pagina web cacert.org, y añadimos un dominio a nuestra lista de dominios de nuestra web. Yo lo he hecho añadiendo el dominio de una pagina que administro que es www.tuherenciadigital.com. (nota: con añadir el dominio tuherenciadigital.com es suficiente, no hacen falta las www)

Nos vamos a nuestro servidor linux, y desde la linea de comandos hacemos lo siguiente:

Vamos a nuestro directorio donde pondremos los certificados

cd /etc/ssl/cacert

nota: si no existe algun directorio, lo creamos

Creamos la peticion de certificado
openssl req -nodes -new -keyout private.key -out server.csr

IMPORTANTE: Cuando nos pregunte el FQDN, le ponemos el nombre completo de la direccion web. Yo en mi caso le puse: www.tuherenciadigital.com

Estando en el mismo directorio, nos descargamos el certificado raiz de cacert, y un certificado intermedio, que ya viene encadenado que podemos coger desde esta web:

http://wiki.cacert.org/SimpleApacheCert?action=AttachFile&do=view&target=CAcert_chain.pem

Con este comando lo descargamos directamente
wget http://wiki.cacert.org/SimpleApacheCert?action=AttachFile&do=get&target=CAcert_chain.pem

Siguiendo en el directorio /etc/ssl/cacert , tendremos 3 archivos:

La clave privada con el que se genero la peticion ->  private.key
El archivo de request de certificado -> server.csr
El archivo de la entidad cetificadora raiz -> CAcert_chain.pem

Abrimos el archivo server csr (con el comando nano o cat), y copiamos todo el texto, incluido las dos lineas superior y anterior.

Nos vamos a la web der cacert.org, vamos a “NUEVO” en certificados de servidor, y pegamos el codigo en el campo de texto.

Al darle a enviar, nos genera nuestro certificado de cominio.

Copiamos el codigo generado, y nos vamos a linux. Nos creamos un fichero llamado “certificado.crt”, dentro del directorio de linux /etc/ssl/cacert

Ya hemos terminado con la generación de certificados. Vamos a configurar nuestro virtualhost o sitio web.

Para eso, nos vamos a nuestro archivo de sitio:

por ejemplo:

/etc/apache2/sites-enabled/nuestrositio.vhost

En este fichero, tendremos un codigo que empezara por:
<virtualhost *80>

y terminara por
</virtualhost>

En principio, lo mas sencillo, es copiar todo lo que aparece, y pegarlo justo debajo, asi tendremos 2 bloques que empiezan por
<virtualhost *:80>

Vamos al segundo bloque, y cambiamos *:80, por *:443, quedando asi:

<virtualhost *:443>

Dentro de este bloque, añadimos la configuracion SSL, escribiendo lo siguiente:

<IfModule mod_ssl.c>
        SSLEngine on
        SSLCertificateFile /etc/ssl/cacert/certificado.crt
        SSLCertificateKeyFile /etc/ssl/cacert/private.key
        SSLCACertificateFile /etc/ssl/cacert/CAcert_chain.pem     
 </IfModule>

Guardamos todo, y reiniciamos apache con:
service apache2 restart

Y en principio ya esta!! espero que os funcione!

Yo lo he probado en debian7, y esta completamente en funcionamiento.

Un saludo!