instalación de certificado ssl
DESCRIPTION
Utilizando UbuntuTRANSCRIPT
INSTITUTO TECNOLÓGICO DE ZACATEPEC
Ingeniería en Tecnologías de la Información y
Comunicaciones
Taller de Seguridad Web
Gpo: TIA
Profesor: Mario Humberto Tiburcio Zúñiga
Tarea 6: Creación de un certificado autofirmado para configuración
de un servidor Web con SSL
Alumno: Juan Carlos Alvarado Rivera – 11090409
Introducción
Una Autoridad Certificadora es una entidad de confianza del emisor y del receptor de una
comunicación.
Esta confianza de ambos en una tercera parte confiable permite que cualquiera de los dos confíe a su
vez en los documentos firmados por la Autoridad Certificadora, en particular, en los certificados que
identifican ambos extremos.
Un certificado es un documento emitido y firmado por una Autoridad Certificadora que identifica una
clave pública con su propietario. Cada certificado está identificado de un amanera unívoca y tiene un
periodo de validez consignado en el propio certificado.
Un certificado permite validar la identidad del otro extremo de una comunicación ya sea una persona o
una persona o un dispositivo.
En el desarrollo de la presente practica se aplican los conceptos de Autoridad certificadora y certificado
Digital, creando un certificado autofirmado que se instala en el servidor Apache para enviarlo a los
clientes que hagan peticiones al servidor para establecer **
Objetivo(s)
Configurar un servidor web con SSL creando un certificado digital autofirmado.
Procedimiento
Etapa 1: Creación del Certificado Digital
Paso 1: Creación de los directorios y archivos de trabajo
Se abre una terminal en Ubuntu y en el directorio del usuario se crea una carpeta con el nombre CA, el
cual será el directorio de trabajo
mkdir CA
Se accede al directorio CA y se crean las carpetas “certificados” y “privado”
cd CA
mkdir certificados privado
Dentro del directorio CA, se crean los archivos serial e index.txt, que en conjunto forman la base de
datos de los certificados autofirmados. Para esto se utilizan los siguientes comandos:
echo '01' > serial
touch index.txt
Se crea un archivo con nombre openssl.cnf con el comando
nano Openssl.cnf
El cual debe contener lo siguiente:
#
***********************************************************************************
**
# www.linuxtotal.com.mx
#
# Archivo de configuracion para openssl
#
# ***** openssl.cnf ******
dir = . # variable que establece el directorio de trabajo
# seccion que permite convertirnos en una CA
# solo se hace referncia a otra sección CA_default
[ ca ]
default_ca = CA_default
[ CA_default ]
serial = $dir/serial # archivo que guarda el siguiente número de
serie
database = $dir/index.txt # archivo que guarda la bd de certificados
new_certs_dir = $dir/certificados # dir que guarda los certificados generados
certificate = $dir/cacert.pem # nombre del archivo del certificado raíz
private_key = $dir/privado/cakey.pem # llave privada del certificado raíz
default_md = md5 # algoritmo de dispersión usado
preserve = no # Indica si se preserva o no el orden de los
# campos del DN cuando se pasa a los certs.
nameopt = default_ca # esta opcion y la siguiente permiten mostrar
# detalles del certificado
certopt = default_ca
policy = policy_match # indica el nombre de la seccion
# donde se especifica que campos son
# obligatorios, opcionales y cuales deben
ser
# iguales al certificado raíz
# seccion de politicas para la emision de certificados
[ policy_match ]
countryName = match # match, obligatorio
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional # optional, campo opcional
commonName = supplied # supplied, debe estar en la petición
emailAddress = optional
# seccion que indica como los certificados deben ser creados
[ req ]
default_bits = 1024 # tamaño de la llave, si no se indica 512
default_keyfile = key.pem # nombre de la llave privada
default_md = md5 # algoritmo de dispersión a utilizar
string_mask = nombstr # caracteres permitidos en la mascara de la
llave
distinguished_name = req_distinguished_name # seccion para el nombre distinguido
(DN)
req_extensions = v3_req # seccion con mas extensiones que se añaden a
la
# peticion del certificado
# seccion del nombre distinguido, el valor es el prompt que se vera en pantalla.
# datos del propietario del certificado.
# esta seccion define el contenido de datos de id que el certificado llevara.
[ req_distinguished_name ]
0.organizationName = Nombre de la organizacion
0.organizationName_default = DonCarlo, S.A.
organizationalUnitName = Departamento o division
emailAddress = Correo electronico
emailAddress_max = 40
localityName = Ciudad o distrito
localityName_default = Leon
stateOrProvinceName = Estado o provincia
stateOrProvinceName_default = Guanajuato
countryName = Codigo del pais (dos letras)
countryName_default = MX
countryName_min = 2
countryName_max = 2
commonName = Nombre comun (hostname o IP)
commonName_max = 64
# si en la linea de comandos se indica la opcion -x509,
# las siguientes extensiones tambien aplican
[ v3_ca ]
# indica que se trata de un certificado CA raíz con autoridad para
# firmar o revocar otros certificados
basicConstraints = CA:TRUE
# especifica bajo que metodo identificar a la llave publica que sera certificada
subjectKeyIdentifier = hash
# especifica como identifcar la llave publica
authorityKeyIdentifier = keyid:always,issuer:always
# extensiones de la opcion req
[ v3_req ]
basicConstraints = CA:FALSE # los certificados firmados no son CA
subjectKeyIdentifier = hash
#
***********************************************************************************
**
Nota: Del contenido anterior la línea con el contenido “0.organizationName_default = DonCarlo, S.A.”
se puede modificar para personalizar el certificado al nombre de la organización.
Paso 2: Creación del certificado raíz
Para la creación del certificado raíz se utiliza el siguiente comando. Cabe mencionar que se pedirá
información sobre la organización durante el proceso de creación del certificado, así como una
contraseña para dicho certificado, la cual debe ser suficientemente segura.
openssl req -new -x509 -extensions v3_ca -keyout privado/cakey.pem -out cacert.pem -days 3650 -
config ./openssl.cnf
El proceso anterior genera dos archivos:
• Un certificado raíz (cacert.pem)
• Una llave privada (privado/cakey
Paso 3: Creación de un certificado para firmarlo
Para este proceso se hace uso del siguiente comando:
openssl req -new -nodes -out doncarlo-cert.pem -config ./openssl.cnf
En este proceso, al igual que en el paso anterior, se pedirán los datos de la organización, así como una
contraseña robusta.
Lo que se obtiene al final del proceso son los archivos:
• doncarlo-cert.pem (el certificado para ser firmado)
• key.pem (La llave privada)
Paso 4: Firmado del certificado
El último certificado creado requiere que sea firmado por los autridad certificadora (que se representa
por el primer certificado que se creó), para lo que se utiliza el siguiente comando:
openssl ca -out certificado-doncarlo.pem -config ./openssl.cnf -days 3650 -infiles doncarlo-cert.pem
El archivo que se obtiene como salida al comando anterior es “certificado-doncarlo.pem”, el cual se
utilizara para enviarlo a los clientes que requieran una conexión segura al servidor.
Etapa 2: Configuración del servidor Apache
Una vez que se cuenta con el certificado autofirmado(certificado-doncarlo.pem) y la llave(key.pem), se
configura el servidor Apache para que pueda utilizar los archivos con extensión .pem en un host virtual.
De manera predeterminada apache cuenta con dos sitios configurados, de los que su configuración se
encuentra definida en los archivos 000-default.conf y default-ssl.conf que se encuentran en el
directorio /etc/apache2/sites-available/.
La configuración que se necesita realizar para que el servidor haga uso de los archivos que constituyen
el certificado digital consiste en:
Paso 1: Habilitar el modulo SSL
Se habilita el modulo ssl con el siguiente comando:
sudo a2enmod ssl
Se reinicia el servidor apache
sudo service apache2 restart
Paso 2: Alojar los archivos del certificado digital en el sistema de archivos de apache
Un aspecto importante a tomar en cuenta al realizar la configuración de apache, es que se debe contar
con privilegios de root
Se crea una carpeta con nombre “ssl” dentro del directorio apache2
mkdir /etc/apache2/ssl
Se accede al directorio ssl y se copian, en este, el certificado firmado y la llave
cd ssl
cp /home/usuario/CA/certificado-doncarlo.pem
cp /home/usuario/CA/key.pem
Paso 3: Modificación del archivo default-ssl.conf
Se abre, con un editor de texto, el archivo default-ssl.conf que se encuentra dentro de la carpeta
/etc/apache2/sites-available/
nano /etc/apache2/sites-available/default-ssl.conf
La modificación consiste en igualar el contenido del archivo con el del siguiente ejemplo:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName your_domain.com
ServerAlias www.your_domain.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/certificado-doncarlo.pem
SSLCertificateKeyFile /etc/apache2/ssl/key.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
Nota: Los aspectos a tomar en cuenta son ServerAdmin, ServerName, ServerAlias, DocumentRoot y las
rutas de la ubicación del certificado SSL y la llave.
Una vez que se terminó la modificación del archivo default-ssl.conf se guardan los cambios.
Las rutas del certificado firmado y de la llave que se indican en el archivo deben tener el nombre de los
archivos generados en el proceso de creación del certificado que fueron copiados al directorio
/etc/apache2/ssl/
Paso 4: Activar el sitio SSL
Para activar el sitio SSL que se configuró en el paso anterior se utilizan los siguientes comandos, los
cuales se deben ejecutar con privilegios de root.
a2ensite default-ssl.conf
Además se reinicia el servidor apache.
service apache2 restart
Paso Final: Prueba del certificado en el navegador
Se abre un navegador y se indica la dirección siguiendo el siguiente patrón:
https://nombre_dominio_o _IP_del_servidor
El navegador mostrara una alerta debido a que en su lista de Autoridades Certificadoras no se
encuentra registrada la autoridad que firmo el certificado. Solo basta con aceptar el certificado y
visualizar el contenido del mismo para confirmar que se instaló correctamente en el servidor Apache y
que el modulo SSL funciona correctamente.
Conclusión
El objetivo de la práctica se cumplió satisfactoriamente ya que al realizar las pruebas necesarias en el
navegador se obtuvieron los resultados esperados.
La creación de los certificados digitales es un proceso sencillo, sin embargo es necesario cuidar los
detalles con la información que se proporciona, tal como el uso de contraseñas que deben cumplir con
una serie de requerimientos para garantizar la integridad de la información que contiene el certificado.
La instalación del certificado firmado en el navegador también resulta sencillo, siguiendo los pasos
correctamente.
Fuentes de información
http://www.hostdime.com.co/blog/como-crear-un-certificado-ssl-en-apache-para-ubuntu-14-04/