SDB:Crear un sitio web SSL con Apache2
Esta página describe como crear un sitio web con seguridad SLL en el servidor web Apache en openSUSE. |
Contenido
Introducción
SSL, Secure Sockets Layer (en español «capa de conexión segura») proporciona autenticación y privacidad de la información entre extremos sobre Internet mediante el uso de criptografía. SSL implica una serie de fases básicas:
- Negociar entre las partes el algoritmo que se usará en la comunicación
- Intercambio de claves públicas y autenticación basada en certificados digitales
- Cifrado del tráfico basado en cifrado simétrico
Esta funcionalidad está disponible en el servidor web Apache
Requisitos
Lo primero que tendremos que hacer es dirigirnos nuevamente al directorio /etc/sysconfig y abrir el archivo apache2, donde tendremos que verificar que el módulo ssl esté definido en la directiva APACHE_MODULES:
APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authz_user autoindex cgi dir env expires include log_config mime negotiation setenvif ssl userdir php5"
También, en el mismo archivo tenemos que verificar que la directiva APACHE_SERVER_FLAGS sea igual a SSL como se muestra a continuación, sino editarlo y guardar el archivo:
APACHE_SERVER_FLAGS="-D SSL"
Tenemos que verificar que Apache esté correctamente configurado para que escuche en el puerto indicado para las conexiones seguras, puerto 443, para ello abrimos el archivo /etc/apache2/listen.conf que debería tener el siguiente contenido:
Listen 80 <IfDefine SSL> <IfDefine !NOSSL> <IfModule mod_ssl.c> Listen 443 </IfModule> </IfDefine> </IfDefine>
No hay que olvidarse de abrir el puerto 443 en el firewall de nuestro servidor, esto lo podemos hacer fácilmente desde YaST2 –> Seguridad y usuarios –> Cortafuegos –> Servicios Autorizados agregando a la lista de la zona que está asociada a nuestra placa de red el nombre del servicio a autorizar, en este caso Servidor HTTPS
Generación del certificado
Existen diferentes formas de generar el certificado que acredite las conexiones seguras.
Generación del certificado básico
El certificado generado de esta manera carece de sentido profesional, ya que no posee información alguna de la entidad emisora y no generaría confianza, para ello se ejecuta desde la consola la siguiente orden y se obtendrá la salida:
sudo /usr/bin/gensslcert comment mod_ssl server certificate name C XY ST unknown L unknown U web server O SuSE Linux Web Server CN linux-7cqa.site email webmaster@linux-7cqa.site srvdays 730 CAdays 2190 creating CA key ... 3105122 semi-random bytes loaded Generating RSA private key, 2048 bit long modulus ..........................................+++ ..............................+++ e is 65537 (0x10001) creating CA request/certificate ... «/etc/apache2/ssl.crt/ca.crt» -> «/srv/www/htdocs/CA.crt» creating server key ... 3105122 semi-random bytes loaded Generating RSA private key, 1024 bit long modulus ............................................................................++++++ .............++++++ e is 65537 (0x10001) creating server request ... creating server certificate ... Signature ok subject=/C=XY/ST=unknown/L=unknown/O=SuSE Linux Web Server/OU=web server/CN=linux-7cqa.site/emailAddress=webmaster@linux-7cqa.site Getting CA Private Key Verify: matching certificate & key modulus Verify: matching certificate signature /etc/apache2/ssl.crt/server.crt: OK
Este comando sobre escribirá los siguientes archivos:
- /etc/apache2/ssl.crt/ca.crt
- /etc/apache2/ssl.key/server.key
- /etc/apache2/ssl.crt/server.crt
- /etc/apache2/ssl.csr/server.csr
También creará un nuevo archivo CA.crt en el directorio /srv/www/htdocs/ para ser descargado por los clientes que se conectan bajo el protocolo https. Luego hay que crear una copia del archivo /etc/apache2/vhosts.d/vhost-ssl.template y renombrarlo a /etc/apache2/vhosts.d/vhost-ssl.conf. Véase el certificado creado:
linux-7cqa.site Identidad: linux-7cqa.site Verificado por: linux-7cqa.site Caduca: 31/01/18 Nombre del asunto C (País): XY ST (Estado): unknown L (Localidad): unknown O (Organización): SuSE Linux Web Server OU (Unidad de organización): CA CN (Nombre común): linux-7cqa.site EMAIL (Dirección de correo electrónico): webmaster@linux-7cqa.site Nombre del emisor C (País): XY ST (Estado): unknown L (Localidad): unknown O (Organización): SuSE Linux Web Server OU (Unidad de organización): CA CN (Nombre común): linux-7cqa.site EMAIL (Dirección de correo electrónico): webmaster@linux-7cqa.site Certificado emitido Versión: 1 Número de serie: 00 B1 C2 68 67 75 E5 64 7F No es válido antes de: 2012-02-02 No es válido después de: 2018-01-31 Huellas de certificados SHA1: A2 01 69 3E 07 EE 43 29 0A 69 BC F9 2B 4E C3 C1 7A BF 35 CC MD5: 77 42 8E B6 3D 2A 79 1B 3F 65 63 9C FD 30 25 FA Firma Algoritmo de firma: SHA1 con RSA Parámetros de la firma: 05 00 Firma: 87 29 DF 45 2A B9 94 1C 08 B2 B2 C9 68 7A 8C 98 0F C1 9A 8C E9 66 32 AE 70 3F 6D CD 53 F3 96 B4 91 BB 60 4C 37 7B ED CD 16 0A F7 54 A0 27 E6 32 5A 00 C2 0E D7 3F 5D 07 3D B3 6C 84 A3 FC 89 2C C1 13 4C 6B 2F 6F 52 73 03 5C AE 11 69 BC 57 0C 6B 5E 9E 87 F4 7C 28 13 F9 EF FE A0 0C 73 09 FF D4 EE 88 35 82 6D 00 78 EF 14 C5 97 CC 22 11 19 15 5E 6B 4D 98 BA D0 5E E5 E6 59 15 02 15 75 0B 10 27 3A 4F A5 38 06 BA 63 6C 67 A9 89 7B F0 FB EF CD 48 1E 83 33 09 84 3B C9 58 25 A4 5E E5 32 9E 4C 70 F4 04 98 C5 70 8D FE FB BA 9B 3C E8 0E 1F 8C 2B 3A 7C E9 E6 F0 07 52 1B 1A D5 CB 3D 70 56 E1 4C A1 92 12 15 DA E9 B0 70 34 52 69 1C 67 AB B5 9C 8A BD 4B 2E DC 40 9F D7 7F E4 9C 87 CD 53 47 F3 69 AC D5 BF 63 9B 5C 08 1B 9E 1E D5 28 CA EE 68 0C 9E D7 1A 27 CE E8 34 34 11 D1 A7 01 Información de la clave pública Clave del algoritmo: RSA Parámetros de la clave: 05 00 Tamaño de la clave: 2048 Huella de la clave SHA1: 42 BB D6 B1 ED D5 09 78 6A 94 70 8A 07 4C 83 9A FC 4D 79 BE Clave privada: 30 82 01 0A 02 82 01 01 00 C0 CC C2 AD C2 3A 30 AA 2F B6 75 FC 8D 76 D2 73 C1 DE FC 90 45 5C 07 02 62 5E 05 FD 30 92 97 AE 6C D2 15 82 98 A1 A8 55 D4 F5 39 F3 50 98 92 3C A1 FA 42 B0 AF 69 49 0C D0 5E F0 37 66 77 6F 62 C2 B3 FB 4D D8 2F 21 92 C9 0A 5F B6 FF EC BC 4E 5D CC 4C AF 50 EE 59 EE 61 B4 CF 93 15 4A CE FA BC A0 CA F4 32 B2 41 36 AD 32 3B 83 F2 66 07 3F F7 AF 3A 77 C8 3A EA D5 4C 4F FF 1E A1 B7 A7 55 02 31 B5 73 38 A6 11 77 8E 6C 27 69 CE B9 14 93 E5 B3 D9 A2 B4 F2 7F 9D C3 74 E4 AD 20 55 FE 95 3B A5 F8 5C 11 66 9E 2D E1 7C 07 78 CF 1D 43 EE 98 58 2D D5 9E EF A3 B1 E5 C2 E0 D6 FC 9C 4F 73 8E B2 EE 7E 8F 26 4F 7F A6 9D 48 F3 03 73 CA 94 C9 EC 07 54 2F 0E 97 43 18 30 13 13 AB 92 4C 67 B9 4A 2E 6D 33 FB 55 E0 34 A2 80 32 29 98 C4 D9 4C 2C 27 CD 94 2D 9E 27 61 A4 5C 71 10 EE 6E 9D 02 03 01 00 01
En él se puede observar la ausencia de datos de la entidad emisora y más datos de interés que llevarían consigo una desconfianza por parte de sus usuarios.
Con esto hemos creado un host virtual exclusivo para las conexiones seguras, reiniciamos el servidor apache con el comando service apache2 restart y verificamos la configuración de nuestro virtual host con el comando:
httpd2 -S -DSSL
Generación del certificado con información adicional
Para evitar el caso anterior, debemos generar un certificado con información relevante y con un carácter más responsable podemos ir indicándole algunos datos complementarios al comando gensslcert para enriquecer el contenido del certificado. La siguiente tabla muestra las opciones disponibles para anexar información al certificado:
Parámetro | Descripción |
---|---|
-C | Nombre común |
-N | Comentario |
-c | País. Solo expresado en 2 letras Ej: ES, AR, BR, etc. |
-s | Estado, Provincia o Departamento |
-l | Ciudad |
-o | Organización |
-u | Unidad Organizacional |
-n | Nombre de Dominio Totalmente Expresado |
-e | Dirección de Correo Electrónico del Administrador |
-y | Días de validez del Certificado del Servidor (Certificado Privado) |
Habrá que ejecutar el comando con las opciones necesarias, en este caso:
gensslcert -C "openSuseSSL" -N "Este es un Certificado de Ejemplo" -c ES -s Madrid -l "Madrid" -o "openSuse Spain." -u "Unidad Seguridad Informatica" -n http://www.forosuse.org/" -e "admin@forosuse.org" -y 60
Esta es la salida una vez ejecutado el comando:
comment Este es un Certificado de ejemplo name openSuseSSL- C ES ST Madrid L Madrid U Unidad Seguridad Informática O openSuse Spain. CN http://www.forosuse.org email admin@forosuse.org srvdays 60 CAdays 2190 creating CA key ... 3129616 semi-random bytes loaded Generating RSA private key, 2048 bit long modulus .......................+++ .........+++ e is 65537 (0x10001) creating CA request/certificate ... «/etc/apache2/ssl.crt/openSuseSSL-ca.crt» -> «/srv/www/htdocs/OPENSUSESSL-CA.crt» creating server key ... 3129616 semi-random bytes loaded Generating RSA private key, 1024 bit long modulus ..++++++ ...................................++++++ e is 65537 (0x10001) creating server request ... creating server certificate ... Signature ok subject=/C=ES/ST=Madrid/L=Madrid/O=openSuse Spain./OU=Unidad Seguridad Inform\xC3\xA1tica/CN=http://www.forosuse.org/emailAddress=admin@forosuse.org Getting CA Private Key Verify: matching certificate & key modulus Verify: matching certificate signature /etc/apache2/ssl.crt/openSuseSSL-server.crt: OK
Al ejecutar el comando se crearán una serie de archivos inicialmente llamados con el nombre openSuseSSL en los siguientes directorios:
- /etc/apache2/ssl.crt/openSuseSSL-ca.crt
- /etc/apache2/ssl.crt/openSuseSSL-server.crt
- /etc/apache2/ssl.csr/openSuseSSL-server.csr
- /etc/apache2/ssl.key/openSuseSSL-ca.key
- /etc/apache2/ssl.key/openSuseSSL-server.key
- /srv/www/htdocs/OPENSUSESSL-CA.crt
Si queremos que éste sea el certificado utilizado para la autenticación tendremos que copiar el archivo vhost-ssl.template en el directorio /etc/apache2/vhosts.d/ con el nombre vhost-ssl.conf
cp vhost-ssl.template vhost-ssl.conf
y modificar las directivas que se citan a continuación con los nuevos nombres mencionados anteriormente:
- SSLCertificateFile /etc/apache2/ssl.crt/openSuseSSL-server.crt
- SSLCertificateKeyFile /etc/apache2/ssl.key/openSuseSSL-server.key
Por último debemos reiniciar el servidor Apache para que los cambios tengan efecto y el nuevo certificado entre en funcionamiento, si tratamos de acceder a cualquiera de nuestros repositorios vía https en, por ejemplo Firefox, el servidor emitirá el certificado con la información que hemos introducido. La siguiente sería la información de nuestro certificado.
http://www.forosuse.org Identidad: http://www.forosuse.org Verificado por: http://www.forosuse.org Caduca: 31/01/18 Nombre del asunto C (País): ES ST (Estado): Madrid L (Localidad): Madrid O (Organización): openSuse Spain. OU (Unidad de organización): CA CN (Nombre común): http://www.forosuse.org EMAIL (Dirección de correo electrónico): admin@forosuse.org Nombre del emisor C (País): ES ST (Estado): Madrid L (Localidad): Madrid O (Organización): openSuse Spain. OU (Unidad de organización): CA CN (Nombre común): http://www.forosuse.org EMAIL (Dirección de correo electrónico): admin@forosuse.org Certificado emitido Versión: 1 Número de serie: 00 91 6A DC 3E 2E 12 37 31 No es válido antes de: 2012-02-02 No es válido después de: 2018-01-31 Huellas de certificados SHA1: 46 2E 64 20 A8 5C C4 DA 04 35 C5 3A 5E CE F7 95 E5 F4 EE 0E MD5: 37 20 A6 42 2E B4 6C 37 4B E2 72 F0 EF 99 43 F2 Firma Algoritmo de firma: SHA1 con RSA Parámetros de la firma: 05 00 Firma: A7 D7 9F 76 18 A9 00 A9 61 A5 12 8B 3C F4 22 D3 B2 9F C7 D0 2F 95 B4 2C 1E 5A C6 D4 E2 AC 64 34 A6 D9 82 B6 96 78 6C 4D E7 8B 9C 0E 57 CC 55 3F A7 92 91 E8 AE 74 F3 61 E1 B3 39 58 65 EF 66 44 9A F6 64 79 FD CE BF A8 84 17 F1 C0 5E 40 5D 80 DC 0A CE 8B 54 09 AD D9 C9 30 B3 A5 97 26 08 8F B6 C5 F9 FD 4F 65 DD E2 67 20 32 66 94 48 00 23 77 59 DD 88 9E 3B 45 DB 0C 08 B0 22 B7 5F 18 2A DE 8B B8 86 9F D7 CD 18 0C 33 CB 75 20 53 89 7F 70 35 5C 40 9B FF 8A A9 C4 59 55 67 CA 76 7E 02 D0 A3 A8 9C 91 9F B0 C2 D3 7F 62 16 EC 40 C0 3D 21 9B 3D 93 83 06 83 75 3A 8A 42 F7 86 76 08 47 1B 15 5A 8B 9B 6B 30 DA 13 5C EB 12 1F 90 26 A6 13 0B 47 C6 02 82 E4 44 98 FB 37 67 32 AD 3A 47 9C C8 4B E5 A4 7E E2 A1 76 F9 00 2C 9B 3F 56 52 FE 4D 24 DE AE 11 98 85 38 23 80 45 88 3D CA C8 Información de la clave pública Clave del algoritmo: RSA Parámetros de la clave: 05 00 Tamaño de la clave: 2048 Huella de la clave SHA1: 55 3E 6C 09 2E 2A CD AD 05 A3 EC A4 30 47 5F 74 D9 40 89 18 Clave privada: 30 82 01 0A 02 82 01 01 00 AA 74 C8 7F 92 C8 92 13 EF 03 A5 D8 D5 99 8A B4 57 58 E6 33 42 A3 6C 6E 41 EE B7 93 FC C4 56 E9 3D 8C 97 8F 06 77 26 BA FA 82 08 86 5E A5 A5 2A FA DA 39 A0 94 00 B7 86 7F DE FE 41 FC 84 C3 40 8F 3B 72 65 83 2A 65 A7 50 0D 4E A6 F3 42 E8 41 32 B8 96 D8 18 6D AB 33 AE 31 61 1B 9B 12 4D 08 D9 14 29 80 F6 10 49 80 A9 CE 22 0E C6 D7 73 9E EF 07 E1 0A 27 85 67 0F 81 A4 D7 80 58 B1 09 F4 79 AF 34 60 3C 95 46 35 73 DB 52 E3 34 8F 7F C4 39 37 31 60 F5 8F 41 A2 3C FE F9 AE 5B 6F 17 34 40 E5 3D 14 8D 1F 72 F7 55 DE 0D 83 86 7F 11 76 DB 4F 03 F9 41 8B B0 B3 6C DA E3 B8 FC 01 93 1F 67 0F F6 05 28 6A 0E AF 28 E0 9C D7 58 D2 0C A7 A9 B4 74 CB C4 48 D4 66 7C 64 8B 3C FD 93 6D 8F E3 70 E5 D6 D1 31 DF 01 BD E4 0F 31 B6 DE B3 0F CC D5 C3 92 A8 90 6E F0 E2 55 D4 7A 10 C6 ED 39 02 03 01 00 01