seg t2 practicas_certificado ssl

19
qwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqw ertyuiopasdfghjklzxcvbnmqwer tyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyui opasdfghjklzxcvbnmqwertyuiop asdfghjklzxcvbnmqwertyuiopas dfghjklzxcvbnmqwertyuiopasdf ghjklzxcvbnmqwertyuiopasdfgh jklzxcvbnmqwertyuiopasdfghjkl zxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcv bnmqwertyuiopasdfghjklzxcvbn mqwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnmq wertyuiopasdfghjklzxcvbnmqw ertyuiopasdfghjklzxcvbnmrtyui CERTIFICADO SSL (autogestionado) en Apache UBUNTU 2º ASIR Seguridad Trimestre 1 Débora García García

Upload: garciadebora

Post on 13-Jun-2015

448 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Seg t2 practicas_certificado ssl

qwertyuiopasdfghjklzxcvbnmq

wertyuiopasdfghjklzxcvbnmqw

ertyuiopasdfghjklzxcvbnmqwer

tyuiopasdfghjklzxcvbnmqwerty

uiopasdfghjklzxcvbnmqwertyui

opasdfghjklzxcvbnmqwertyuiop

asdfghjklzxcvbnmqwertyuiopas

dfghjklzxcvbnmqwertyuiopasdf

ghjklzxcvbnmqwertyuiopasdfgh

jklzxcvbnmqwertyuiopasdfghjkl

zxcvbnmqwertyuiopasdfghjklzx

cvbnmqwertyuiopasdfghjklzxcv

bnmqwertyuiopasdfghjklzxcvbn

mqwertyuiopasdfghjklzxcvbnm

qwertyuiopasdfghjklzxcvbnmq

wertyuiopasdfghjklzxcvbnmqw

ertyuiopasdfghjklzxcvbnmrtyui

CERTIFICADO SSL (autogestionado) en Apache

UBUNTU

2º ASIR Seguridad Trimestre 1 Débora García García

Page 2: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

1

Índice

Introducción ............................................................................................................................. 2

Primeros pasos ......................................................................................................................... 2

Creación de una Autoridad Certificadora................................................................................... 2

Creación del certificado digital .................................................................................................. 3

Generar la petición de certificado ............................................................................................. 3

Emitir el certificado ................................................................................................................... 4

Listado de ficheros generados en los pasos anteriores .............................................................. 4

Últimas configuraciones ............................................................................................................ 5

Configurar el nuevo host virtual SSL ...................................................................................... 5

Resolución DNS desde el archivo hosts .................................................................................. 7

Comprobar que funciona ......................................................................................................... 8

Como hacer para que no nos pida Apache la clave del certificado ........................................... 11

Creación de certificado para nuestros clientes ........................................................................ 12

Creamos la clave privada y solicitud del certificado ............................................................. 12

Firma del certificado con nuestra Autoridad Certificadora ................................................... 13

Conversión del certificado ................................................................................................... 13

Comprobando certificados con PHP .................................................................................... 17

Page 3: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

2

Introducción Hoy veremos como permitir el acceso a nuestra aplicación a aquellos usuarios que dispongan

de un certificado que previamente les habremos enviado mientras que si no lo tienen no

podrán acceder de ningún modo. Este método se puede combinar, además, con el tradicional

usuario/clave para dar mayor seguridad. Podremos incluso verificar que el nombre de usuario

que se intenta utilizar se corresponde con el certificado de usuario que le hemos enviado y no

intenta autentificarse con otro.

El método que vamos a ver se basa en certificados SSL. Se utilizan para asegurar la información

entre un cliente y el servidor y prevenir escuchas ya que la información viaja encriptado. Ésta

es su función y la hace aunque no esté firmado por una autoridad certificadora (CA) oficial o,

incluso, aunque esté caducado. Sigue asegurando las comunicaciones.

Una Autoridad Certificadora firma tu certificado SSL asegurando que os pertenece a ti y a tu

dominio. Cuando un cliente accede a tu dominio y descarga el certificado SSL, busca dentro de

sus certificados de CA‘s si hay alguno que lo haya firmado. Si lo encuentra, acepta tu

certificado y no ocurre nada especial, pero si no encuentra la CA lanza un aviso indicando que

no se reconoce la autoridad que lo firma. Esto no quiere decir que el certificado no sea válido,

lo único que ocurre es que no sabe quién lo firma. Esto significa, por tanto, que tú mismo

puedes ser tu propia autoridad certificadora y firmar tus certificados, funcionarán

perfectamente y cumplirán su cometido de asegurar las comunicaciones cliente/servidor.

El servidor puede requerir, además, otro certificado al cliente, de manera que ambos extremos

autentifiquen la comunicación. Esto es precisamente lo que vamos a hacer hoy en este

artículo.

Primeros pasos Como siempre actualizaremos la lista de paquetes:

Apt-get update

Instalamos:

Apt-get install openssl

Esta será la herramienta con la que creemos certificados digitales de forma libre.

Creación de una Autoridad Certificadora Para comenzar nos situamos en el directorio “/var/www” y creamos una carpeta “/CA” para

guardar los ficheros que iremos generando.

mkdir /var/www/CA

Page 4: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

3

Cd /var/www/CA

Vamos a crear la AC:

openssl req –x509 –newkey rsa:2048 –keyout cakey.pem –days 3650 –out cacert.pem

Nos pide una password (en mi caso usuario). Y una serie de datos.

X509 certificado.

Rsa:2048 algritmo de encriptación de 2048 bytes.

-keyout donde se almacena la clave privada (cakey.pem).

-out donde se almacena la clave pública (cacert.pem).

-days 3650 La AC no expira hasta dentro de 10 años.

Creación del certificado digital Podemos hacer tantos como queramos, los pasos son los mismos a partir de ahora.

Vamos a generar la clave privada del que será nuestro certificado digital:

openssl genrsa –des3 –out serv-priv.pem –passout pass:usuario 2048

-des3 algoritmo cifrado triple (se almacena en –out serv-priv.pem).

-passout pass: indicamos la passfrase para nuestra clave privada.

Generar la petición de certificado Antes de hacer un certificado hay que hacer una petición donde se define el propietario del

certificado:

openssl req –new –subj “/DC=shadowsland.com/OU=com/CN=shadowsland” –key

serv-priv.pem –passin pass:usuario –out petic-certificado-serv.pem

Req –new petición con el parámetro –subj.

Subj indicamos a quien pertenece el certificado.

Shadowsland servidor.

-key serv-priv.pem usa la clave privada generada anteriormente.

-passin pass: password anterior.

-out le indicamos como salida que genere el fichero petc-certificado-serv.pem

Page 5: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

4

Emitir el certificado Ya podemos emitir el certificado. Definimos las características de un certificado openssl en el

directorio “/etc/ssl/openssl.cnf”. Pero hay una forma más fácil de hacerlo, mediante la

creación de un fichero de configuración por nuestra cuenta:

Nano /var/www/CA/config1.txt

Contiene:

basicConstraints = critical,CA:FALSE

extendedKeyUsage = serverAuth

Estas indicaciones son para que cumpla con el x509v3 y RFC3280.

El segunda párrafo viene a decir que el certificado servirá para un servidor web.

Ahora pasamos hacer el certificado:

openssl x509 –CA cacert.pem –Cakey cakey.pem –req –in petic-certificado-serv.pem –

days 3650 –extfile config1.txt –sha1 –Cacreateserial –out servidor-cert.pem

X509 tipo de certificado.

-CA definida en el fichero cacert.pem.

-Cakey clave privada que usa en el fichero cakey.pem.

-req –in especificaciones que están en el fichero petic-certificado-serv.pem.

-days 3650 con validez de 10 años.

-extfile indicamos que el certificado es para un servidor como el que está en

config1.txt.

-sha1 algoritmo cifrado.

-Cacreateserial enumera el certificado.

-out donde genera el certificado, en cert.pem.

Listado de ficheros generados en los pasos anteriores

Page 6: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

5

Últimas configuraciones Hay que copiar los fichero “servidor-cert.pem” y “serv-priv.pem” en “/etc/apache2/ssl”. Si no

tenemos el directorio “ssl” lo creamos.

Mkdir /etc/apache2/ssl

Cp /var/www/CA/ servidor-cert.pem /etc/apache2/ssl

Cp /var/www/CA/ serv-priv.pem /etc/apache2/ssl

También tenemos que indicarle a Apache que escuche el puerto 443 (Secure Socket Layer),

modificando el fichero:

Nano /etc/apache2/ports.conf

Listen80

Listen 443

Podemos observar que ya estaban activados por defecto:

Ahora hay que indicarle a Apache que soporte SSL instalando un módulo ssl:

Apt-get install libapache-mod-ssl

A2enmod ssl

Configurar el nuevo host virtual SSL Nos dirigimos a la siguiente ruta para empezar a configurar el host:

Page 7: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

6

Nano /etc/apache2/sites-availables/default

SSLEngine on indica que utilizamos certificados.

SSLCertificateFile de donde lee el certificado.

SSLCertificateKeyFile y la clave privada de este.

DocumentRoot es el lugar donde tenemos nuestra página. Seguramente no esté creado el sitio

pero hazlo de la siguiente manera:

Mkdir /var/local/mipagina

Copia el “index” que viene por defecto en “www” para la prueba:

Cp /var/www/index.htm /var/local/mipagina

Finalmente después de guardar el fichero del host, hay que hacerle un enlace simbólico para

habilitarlo:

A2ensite default

También desde “/etc/apache2/sites-availables/”:

Ln –s ../sites-availables/default default-000

Page 8: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

7

Por último para que se guarden los cambios tenemos que parar y arrancar apache:

/etc/init.d/apache2 stop

/etc/init.d/apache2 start

Observad que nos pide una password, esa es la del certificado.

Resolución DNS desde el archivo hosts Para que pueda hacer la resolución sin tener un servicio DNS instalado, tendremos que

indicarle en este archivo que nos haga la resolución de la página segura que acabamos de

montar y será por tanto de manera local.

Page 9: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

8

Comprobar que funciona Para ello nos dirigimos a nuestro navegado y en la barra de direcciones es muy importante que

pongamos el protocolo HTTPS:// que será el encargado de los certificados SSL, seguido de

nuestra ip, localhost o el dominio creado:

Desde entiendo los riesgos añadimos la excepción del certificado, y nos llevara a la página

principal (index.html)

Ahora para ver nuestro certificado vamos al menú del navegador:

Herramientas información de la página

Page 10: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

9

Page 11: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

10

Page 12: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

11

Como hacer para que no nos pida Apache la clave del certificado

En resumen, se trata de quitar el cifrado a nuestra clave, de manera que Apache al arrancar, pueda hacerlo del tirón.

Lo primero es encontrar el fichero de la clave a la que apunta nuestra configuración.

“cd /etc/apache2/ssl/serv-priv.pem”

Copiamos la clave para tener una copia de ella en caso de necesitarla:

Ahora quitamos el cifrado a la clave original, de la siguiente manera:

Es importantísimo proteger debidamente el acceso a esta clave, ya que no se encuentra cifrada, por lo que un posible atacante podría, en caso de tener acceso a ella, hacerse pasar por nosotros. Para ello, haremos que la clave solo sea accesible para el superusuario:

Page 13: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

12

Ahora, si reiniciamos nuestro servidor Apache, veremos que ya no nos pide la clave y que arranca como de costumbre. Si en algún momento queremos volver al estado anterior, con modificar la configuración para que apunte a “serv-priv.copia” volveríamos al escenario anterior.

Creación de certificado para nuestros clientes Crearemos en la ruta “/etc/apache2/ssl”el archivo “cliente.cnf” que contiene:

Creamos la clave privada y solicitud del certificado

Page 14: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

13

Firma del certificado con nuestra Autoridad Certificadora

Hay algunos certificados y claves guardados en “/etc/apache2/ssl” para que no tengas

problemas cópialo todo a la ruta “/var/www/CA” que fue creada para contener todos estos

archivos, lo que que pasa que para que algunos funcionen y apache arranque, hace falta que

haya algunos en la carpeta “ssl” pero no todos, por eso lo dicho, así nos evitamos errores y

lios.

Vamos a ver el contenido de la carpeta “/etc/apache2/ssl”:

El contenido de “/var/www/CA”:

Conversión del certificado El certificado ha de instalarse en el navegador y ser reconocido por este:

Ahora tenemos que añadir una línea al fichero que utilizamos de página por defecto

“/etc/apache2/sites-enabled/default-000”

Page 15: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

14

(Si la ruta que hemos añadido no existe, acuérdate de copiar ese fichero de /var/www/CA a

esa ruta).

Tenemos que añadir otra línea al archivo que es la que pide la verificación del usuario:

Reinicia apache, para que se guarden los cambios:

“/etc/init.d/apache2 restart”

Comprobaremos el funcionamiento, para ello nos vamos al navegador:

Al intentar introducirnos en la web nos dará fallo, así que tendremos que ir a:

Editar preferencias de Firefox avanzado ver certificados sus certificados importar

(cliente.p12 )

Page 16: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

15

Page 17: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

16

Actualiza de nuevo la página del navegador:

Y ya nos permite el acceso:

Page 18: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

17

Comprobando certificados con PHP

Vamos a “etc/apache2/sites-enabled/defautl-000”:

En “/var/www/” crea: “info.php”

Dentro escribiremos:

Copia el archivo en otra ruta de donde cogemos por defecto nuestra página:

Reinicia apache para comprobar que no te da ningún error.

Vamos al navegador:

Page 19: Seg t2 practicas_certificado ssl

Seguridad Trimestre 1 Débora García García

18

Aquí podemos observar todos los datos guardados en variables: