2. Seguridad Trimestre 1 Débora García García
Í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
1
3. Seguridad Trimestre 1 Débora García García
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
2
4. Seguridad Trimestre 1 Débora García García
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
3
5. Seguridad Trimestre 1 Débora García García
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
4
6. Seguridad Trimestre 1 Débora García García
Ú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:
5
7. Seguridad Trimestre 1 Débora García García
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
6
8. Seguridad Trimestre 1 Débora García García
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.
7
9. Seguridad Trimestre 1 Débora García García
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
8
12. Seguridad Trimestre 1 Débora García García
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:
11
13. Seguridad Trimestre 1 Débora García García
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
12
14. Seguridad Trimestre 1 Débora García García
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”
13
15. Seguridad Trimestre 1 Débora García García
(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 )
14
17. Seguridad Trimestre 1 Débora García García
Actualiza de nuevo la página del navegador:
Y ya nos permite el acceso:
16
18. Seguridad Trimestre 1 Débora García García
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:
17
19. Seguridad Trimestre 1 Débora García García
Aquí podemos observar todos los datos guardados en variables:
18