SDB:Crear un sitio web SSL con Apache2

Saltar a: navegación, buscar
Geeko Esta página describe como crear un sitio web con seguridad SLL en el servidor web Apache en openSUSE.


Versión: 11.3+El artículo se puede aplicar a las versiones de openSUSE a partir de la 11.3.


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

12.1 Habilitación ServidorHTTPS Firewall.png

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ámetros comando gensslcert
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