Pág. 2
......................................................................................................................
Pág. 3
La orden para poder crear esta entidad es:
openssl req -nodes -x509 -newkey rsa:2048 -days 3650 -keyout CA.key –
ou...
Pág. 4
En el paso final, firmamos la petición (CSR) con las claves de la entidad certificadora y
en este paso indicamos la...
Pág. 5
En el primer punto de este manual, se había habilitado el módulo SSL de Apache que
activaba el puerto 443 para pode...
Pág. 6
Listen 8000
<VirtualHost *:8000>
DocumentRoot /var/www/html
<Directory /var/www/html/Ubuntu>
Options Indexes Follow...
Certificados en Apache con OpenSSL
Próxima SlideShare
Cargando en…5
×

Certificados en Apache con OpenSSL

398 visualizaciones

Publicado el

En este manual se explica detalladamente cómo crear un certificado SSL para páginas web mediante la herramienta OpenSSL en el servidor web Apache.

Además se detalla cómo crear certificados ya caducados o futuros y como incluirlos en los servidores de Apache.

Publicado en: Internet
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
398
En SlideShare
0
De insertados
0
Número de insertados
5
Acciones
Compartido
0
Descargas
5
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Certificados en Apache con OpenSSL

  1. 1. Pág. 2 ...................................................................................................................................... 2 1. Instalación de Apache2 y OpenSSL ....................................................................................... 2 2. Creación de una entidad de confianza.................................................................................. 2 3. Creación de una petición de certificado ............................................................................... 4 4. Firmar el certificado .............................................................................................................. 5 5. Firmar Certificados caducados y futuros............................................................................... 5 6. Añadir virtual host con certificados en Apache .................................................................... 6 Instalación del servidor web Apache y OpenSSL en Linux (necesarios permisos de root): sudo apt-get install apache2 sudo apt-get install openssl A continuación, habilitamos el modulo SSL en Apache: sudo a2enmod ssl Ejecutado este comando podremos acceder a https://localhost y se mostrará la página principal de Apache (situada en )./var/www/html Una “entidad de confianza” o “autoridad de certificación” (a partir de ahora, “CA”) es la responsable de emitir y revocar los certificados. Esta entidad será la encargada de firmar todos los certificados que posteriormente crearemos. Este proceso nos solicitará introducir los datos informativos de la entidad certificadora, pero de todos estos, solo tiene interés para nosotros el campo “Common name”. Este campo indica el nombre de la entidad y será el que se muestre en los certificados una vez firmados por la misma. Una vez introducidos todos los datos nos generará dos archivos, la clave pública y la clave privada, con la extensión CRT y KEY respectivamente.
  2. 2. Pág. 3 La orden para poder crear esta entidad es: openssl req -nodes -x509 -newkey rsa:2048 -days 3650 -keyout CA.key – out CA.crt En este caso hemos llamado a ambos ficheros con el mismo nombre. Ca.key para la clave privada y CA.key para la clave privada, pero estos nombres pueden ser distintos entre sí, aunque no se recomienda. También es aconsejable que los nombres de ambos ficheros contengan información de la entidad, como por ejemplo, el “Common name”. A continuación, con la entidad CA ya creada, podemos generar y firmar certificados. El proceso para generar certificados es muy similar, con dos diferencias:  El proceso de generación de claves pública y privada son independientes.  La creación de la clave pública no se realiza directamente, pues necesita la firma de la CA, por lo que se va a crear una clave pública previa con extensión CSR y que contendrá toda la información del certificado final. Posteriormente será firmado por la CA y es entonces cuando adquirirá el formato CRT. En primer lugar vamos a crear la clave privada con una clave de 2048 bits y que llamaremos “Certificado”: openssl genrsa -out Certificado.key 2048 Y ahora, con la clave privada ya creada, vamos a crear la clave pública (CSR) a la creación del certificado. Es necesario indicar la clave privada, porque con ella cifra la pública. Aquí radica la eficacia del cifrado asimétrico. Es ahora cuando debemos introducir los datos que va a contener el certificado. openssl req -new -key Certificado.key -out Certificado.csr La salida nos generará el fichero Certificado.csr. [ ! ] – Digicert ha creado una herramienta que permite generar el CSR de manera online. Puedes encontrar esta herramienta y obtener más información en https://www.digicert.com/es/easy-csr/openssl.htm
  3. 3. Pág. 4 En el paso final, firmamos la petición (CSR) con las claves de la entidad certificadora y en este paso indicamos la validez del certificado y otras configuraciones. Al finalizar, se habrá creado un fichero con extensión CRT y que en este caso llamaremos Certificado. openssl x509 -CA CA.crt -CAkey CA.key -req -in Certificado.csr -days 3650 -CAcreateserial -sha1 -out Certificado.crt En la firma de la petición de certificado indicaremos opciones como: -CAcreateserial Si no existiese el fichero serial.txt -days XX Duración de la validez del certificado, siendo ‘XX’ los días que va a durar dicha validez, puesto en vigor desde el día que se firma el certificado. Ej.: “-days 365” -algoritmo Algoritmo de cifrado de clave pública, entre los que encontramos md5, sha, sha1, sha256…. Ej.: “-md5” Ya tendríamos entonces el certificado firmado (Certificado.crt) con su clave privada (Certificado.key) correspondiente, los cuales usaremos en nuestro servidor Apache. Es probable que en alguna ocasión tengas que firmar certificados caducados o futuros, es decir, firmar certificados para que la fecha de caducidad de este ya haya pasado, o firmar certificados que entren en vigor en un futuro. Como hemos visto, al firmar una petición se indica la duración que va a tener el certificado, pero no el inicio o el final. Entonces necesitamos entender cómo determina OpenSSL la hora en la que ha entrado en vigor un certificado y lo hace mediante el reloj de sistema. En el momento en que se firma la petición, OpenSSL toma la hora y día de nuestro equipo, por lo tanto, si cambiamos la hora/día actual podremos tener una fecha de inicio y de final (mediante la opción –days). Podemos hacer esto mediante: date --set "1993-05-08 12:30" Mediante esta orden, desactualizaríamos nuestro Linux a fecha “8 de Mayo de 1993”. Ahora solo tendríamos que firmar el certificado, con una validez de 365 días por ejemplo, y después volver nuestro equipo a la hora real. Tendríamos entonces un certificado caducado con validez desde 8-5-1993 12:30 - hasta 7-5-1994 12:30. Lo mismo haríamos con un certificado futuro.
  4. 4. Pág. 5 En el primer punto de este manual, se había habilitado el módulo SSL de Apache que activaba el puerto 443 para poder acceder vía HTTPS, pero no había ningún certificado instalado. Ahora vamos a añadir un Virtual Host, al cual le vamos a indicar dónde encontrará los certificados que hemos creado. Es necesario conocer antes dos rutas básicas: /etc/apache2/ Contiene configuración e información sobre el servidor web /var/www/html/ Contiene la página que se va a mostrar al público En primer lugar vamos a copiar el certificado creado (Certificado.crt y Certificado.key) a una nueva ruta, por ejemplo . El directorio “ssl” no existe por lo que/etc/apache2/ssl/ debemos crearlo, y si fuéramos a usar más certificados, sería recomendable usar un directorio para cada certificado (Ej. )./etc/apache2/ssl/Ubuntu/ mkdir /etc/apache2/ssl cp Certificado.crt /etc/apache2/ssl/Certificado.crt cp Certificado.key /etc/apache2/ssl/Certificado.key En segundo lugar vamos a añadir un Virtual Host en Apache y lo haremos en el fichero “default-ssl.conf” situado en que contiene algo como:/etc/apache2/sites-availables <IfModule mod_ssl.c> <VirtualHost _default_:443> ... DocumentRoot /var/www/html ... <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ... SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key ... </VirtualHost> </IfModule> Nuestro Virtual Host será accesible por la ruta https://ubuntu.11paths.local y por el puerto 8000. Lo que haremos será añadir el siguiente código justo detrás del Virtual Host ya existente, es decir, detrás de la etiqueta .</VirtualHost>
  5. 5. Pág. 6 Listen 8000 <VirtualHost *:8000> DocumentRoot /var/www/html <Directory /var/www/html/Ubuntu> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory> SSLEngine on SSLCertificateFile /etc/apache2/ssl/Certificado.crt SSLCertificateKeyFile /etc/apache2/ssl/Certificado.key </VirtualHost> Podemos ver que contiene la ruta de nuestra clave pública ySSLCertificateFile contiene la ruta de la privada. Ahora solo necesitamos crear laSSLCertificateKeyFile carpeta Ubuntu donde tendremos nuestra página web y ya estará todo funcionando. mkdir /var/www/html/Ubuntu echo ‘<h1>Hola mundo</h1>’ > /var/www/html/Ubuntu/index.html Y ya podemos comprobar la página web y su certificado enlazado en https://localhost:8000.

×