You are on page 1of 7

Crear certificados ssl para apache http://www.linuxtotal.com.mx/index.php?cont=info...

LinuxTotal .com.mx
Inf ormación y serv icios en Linux y Open Source
CREAR CERTIFICADOS SSL PARA APACHE
Copyright 2005-2008 Sergio González Durán
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o
cualquiera posterior publicada por la Free Software Foundation.
autor: sergio.gonzalez.duran@gmail.com

[ÍNDICE...]
Introducción
Imaginémonos a la empresa "Pato, S.A." que ofrec e a sus empleados y c lientes el sitio http://www.pato.c om/c onsulta, donde mediante un nombre de
usuario y c ontraseña es posible para los empleados c onsultar saldos, órdenes, resurti r, estados de c uenta, etc . y para los c lientes observar el estado de
sus pedidos, su saldo, pagos, historial de c ompras, etc . El sitio esta perfec tamente diseñado, protegido c ontra inyec c iones sql, ataques mediante el
url, el servidor al día c on los últimos parc hes y ac tualizac iones, toda entrada de usuario, c ontraseña, y demás debidamente validadas para solo rec ibir
c arac teres válidos y exc luir c arac teres usados en c onsultas e instruc c iones sql, etc . etc . Una belleza en c uanto a la seguridad de la aplic ac ión Web.
PERO, todo el sitio func iona bajo un servidor Web apac he en el puerto 80, esta bien, pero implic a que un empleado renc oroso porque no le
aumentaron el sueldo o no lo promovieron de puesto y c on intenc iones de querer ser un hac ker, instala un sniffer en su PC (dentro de la empresa),
baja herramientas para envenenar mediante un ataque arp (arp poisoning) el switc h al que c orresponde a su segmento red de tal modo que puede
observar todo el tráfic o de red de los equipos c onec tados a su switc h. Fác il, nada del otro mundo, c ualquier c hic o de los sc ripts (sc ript kiddie) le
hubiera enseñado c omo hac erlo si no lo hubiese el sabido ya. En unas c uantas horas ti ene ya varias c uentas de usuario y c ontraseñas, se introduc e
c omo ellas y baja informac ión c onfidenc ial de varios de sus c ompañeros y c omo algunos son gerente, también obtiene informac ión sensible de
c lientes. Listo, ahora a c hantajear a la empresa por medio de un c ómplic e en el exterior o simplemente tratar de utilizar la informac ión en su
benefic io o peor aun c ausar algún tipo de destrozo c on esta.
¿Fic c ión? Absolutamente no. Lo anterior es perfec tamente posible porque el tráfic o de red generado entre el c liente (navegador) y el servidor Web
apac he en el puerto 80 no esta enc riptado, viaja tal c ual. Entonc es es posible, c on l a herramienta adec uada interc eptar y observar este tráfic o y
obtener entre otras c osas c ontraseñas, números de tarjetas de c rédito, etc . La soluc i ón es simple (la implementac ión no tanto), obtener un c ertific ado
de seguridad y hac er que el tráfic o se dirija al puerto 443 (https) en vez del 80 (http). En el puerto 443 el tráfic o se enc ripta a través del los protoc olos
SSL (Sec ure Soc kets Layer) y T LS (T ransport Layer Sec urity). Entonc es todo el tráfic o será enc riptado y aunque es posible interc eptarlo y observarlo,
no se verá mas que basura o c adenas de c arac teres sin ningún signific ado todo el tiem po, logrando asi un c anal seguro enc riptado entre el c liente y
el servidor.
Certificate Authority CA (Autoridad Certificadora)
Esta fuera del alc anc e de este doc umento toda la teoría detrás de SSL, hay varios doc umentos, tutoriales y manuales en Internet que lo explic an,
pero lo que si hay que entender que es un CA. Una autoridad c ertific adora c omo lo son Verisign, T hawte, beT RUST ed o ValiCert son empresas
dedic adas a vender c ertific ados de seguridad que la empresa que lo adquiere instala en su servidor web. Es dec ir "Pato, S.A." desea montar su
apliac ión Web bajo un sitio seguro c on https, c rea su c ertific ado y lo manda firmar c on un CA, el CA verific a que "Pato, S.A." es realmente quien dic e
ser. Después de c hec ar la autentic idad de la empresa en c uestión, el CA firma el c ertific ado de seguridad de su c liente c on alguno de sus c ertific ados
raíz bajo una fuerte enc riptac ión y se lo regresa a "Pato, S.A.", este lo instala en su servidor Web y c uando los c lientes (navegadores) se c onec tan,
estarán tanto el c liente c omo el servidor bajo un tráfic o enc riptado y seguro, todo avalado por el CA otorgante del c ertific ado. La enorme ventaja de
este esquema es que todos los navegadores ac tuales (Internet Explorer, Firefox, Opera, Mozilla, etc ) tienen inc orporados los c ertific ados raíz de todas
las empresas CA c onoc idas del mundo, asi que c uando el c liente se c onec ta al servidor no hay ninguna molestia para el c liente, todo es transparente
para el usuario final. Si eres una empresa dedic ada a c ualquier tipo de c omerc io elec trónic o donde se involuc re dinero a través de tarjetas de c rédito
o servic ios c omo paypal, firmarse c on un CA c omo Verisign es la únic a alternativa que se tiene, esto para otorgar seguridad a los c lientes del sitio.
Ahora bien, los CA c omo los menc ionados no son almas de la c aridad, c obran por el servic io de firmar los c ertific ados, sus prec ios c omienzan en
alrededor de 200 a 300 dólares anuales por c ertific ado y pueden subir mas dependiendo del tipo de enc riptac ión que se solic ite, es dec ir, para un
sitio de c omerc io elec trónic o c on un alto volumen de tráfic o requerira de c ertific ados mas seguros debido a que será mas tentador para posibles
hac kers de tratar de violarlo.
Lo interesante viene a c ontinuac ión. "Pato, S.A." es c omo muc has empresas que solo ofrec en una aplic ac ión sin transac c iones de c omerc io, solo
c onsulta a sus bases de datos y algunos formularios que involuc ran solic itudes de reportes o ac tualizac ión de datos. "Pato, S.A." o quienquiera puede
c onvertirse el mismo en CA, el mismo emitir un c ertific ado raíz de seguridad y a través de este generar c ertific ados para sitios Web. Y de hec ho es el
tema de este artíc ulo, c omo c rear c ertific ados SSL para montarlo en nuestro propio servidor Web o de c orreo elec trónic o. ¿Cual es la deventaja?, solo
una, que en el navegador del c liente al no estar importado el c ertific ado (integrado) en su lista de c ertific ados seguros, pedirá al usuario c uando se
c onec te al sitio que ac epte el c ertific ado. Si el usuario es desc onfiado y no lo ac epta no se podrá c onec tar a nuestro servidor Web seguro. Lo que se
puede hac er es, por ejemplo, lo siguiente:

El usuario se c onec ta a "http://www.pato.c om" puerto 80, trafic o http normal sin seguridad.
En la página inic ial del sitio desplegamos un botón y una leyenda que dic e que al apretar el botón se redirigirá a la aplic ac ión Web de c onsulta y
que deberá ac eptar el c ertific ado de seguridad que la empresa "Pato, S.A." ofrec e para establec er una c onexión segura, que si tiene dudas
puede c omunic arse al siguiente teléfono o c orreo, etc .
Al apretar el botón se redirige a "https://www.pato.c om/c onsulta" puerto 443, que es donde estará la apliac ión de c onsulta y en este momento se
pedirá que se ac epte el c ertific ado. El usuario entonc es, estuvo mas informado de lo que pasa.
Ya quedando mas c laro lo anterior, entonc es, c omenc emos a ac larar algunas c osas. Se requiere para lo anterior dos c osas:

Un par de c laves, una públic a y una privada (c laves RSA o DSA, en otras palabras enc riptac ión asimétric a). La c lave es públic a, c omo su nombre
implic a es expuesta a todo el mundo y la privada es solo c onoc ida por el emisor, es dec ir, nosotros.
Un c ertific ado de seguridad, que es una versión "firmada" o verific ada de la c lave públic a RSA o DSA.
Entonc es, se trata de que uno va a generar tanto la c lave públic a c omo la privada. Una vez teniendo esto volvemos a las dos opc iones previamente
menc ionadas, podemos autofirmar nosotros mismos nuestra c lave públic a o podemos mandarla a un terc ero, a un CA rec onoc ido para que nos la
firme c obrando por el servic io. Una vez que hac emos esto tendremos en ambos c asos c om o produc to un c ertific ado firmado que será el que el
navegador deberá importar en su lista de c ertific ados de c onfianza para poder establec er la c onexión.
Vamos a ponerlo mas ilustrado, primero c on un c ertific ado autofirmado:
- El usuario (c liente) se c onec ta a https://www.pato.c om/c onsulta y este servidor le envia el c ertific ado autofirmado para que sea ac eptado (importado)
por el navegador del c liente. T raduc ido en un diálogo de humanos sería de la siguiente manera: "Hey! hola navegador, soy el servidor www.pato.c om
tienes que c onfiar que soy de la empresa Pato, S.A. y nadie mas, y para demóstrartelo te envió mi c lave públic a que te permitirá autentific arte c on mi

1 de 7 28/08/09 18:27
Crear certificados ssl para apache http://www.linuxtotal.com.mx/index.php?cont=info...

c lave privada en mi servidor, todo esto te lo mando en este c ertific ado que espero ac eptes, ya que yo mismo me c onvertí en mi propio CA. Y en serio
yo el firmante Pato, S.A. te juro que soy yo, c reeme, ac éptame, vamos, si soy yo, por favor aprieta Ac eptar para poder establec er la c onexión segura."
Ahora veamos que pasa c on un c ertific ado de terc eros:
- El usuario (c liente) se c onec ta a https://www.pato.c om/c onsulta y este servidor le envia el c ertific ado firmado, por ejemplo por el CA Verisign, los
c ertific ados de Verisign ya están por default en la lista de CA c onfiables del navegador, por lo que es ac eptado sin mayor problema y sin preguntas.
T raduc ido en un diálogo de humanos sería de la siguiente manera:
"Hey!, hola navegador, soy el servidor www.pato.c om, te envió mi c ertific ado c on mi c lave públic a que te permitirá autentific arte c on mi c lave
privada en mi servidor, esto te lo mando en un c ertific ado firmado nada mas ni nada m enos por Verisign. Verisign ya verific ó que si soy la empresa
Pato, me c obro un billete por esto, asi que mi c ertific ado debe ser autorizado sin mayor problema por los c ertific ados raíz que se enc uentran en tu
lista de c ertific ados c onfiables. Listo, c onexión segura establec ida".
Bueno, espero que c on esto quede c laro c ual es la idea detrás de los c ertific ados y de las c onexiones seguras, pero ya estuvo bueno de tanto rollo y
pongamos manos a la obra en c rear nuestros propios c ertific ados autofirmados.
Nota c ultural rápida: Hac e algunos años fue muy sonado el c aso de dos c ertific ados que firmó Verisign para alguien que dijo ser empleado de
Mic rosoft y Verisign ¡¡¡le c reyó!!!. Lo mas inc reible es que todavía pasaron varios m eses hasta que se desc ubrió el fraude de los c ertific ados del
supuesto empleado de Mic rosoft. Desde entonc es todos los CA del mundo c hec an muy esc rupulosamente tanto a la persona que representa a la
empresa que desea obtener un c ertific ado c omo a la empresa en si, por eso el proc eso de obtener un c ertific ado firmado por un terc ero suele tardar
de dos a tres semanas. (Si tienes c uriosidad puedes c hec ar estos dos c ertific ados fal sos están en la lista de "fabric antes que no son de c onfianza" en el
Internet Explorer --> Herramientas - Opc iones de Internet - Contenido - Certific ados - Fabric antes que no son de c onfianza).
Prerequisitos
Para c rear nuestros c ertific ados usaremos la exc elente aplic ac ión Openssl, que deberás tener instalada, puedes verific arlo c on una c onsulta rpm:
#> rpm -q openssl
openssl-0.9.7f-7

O direc tamente c on el mismo c omando openssl:


#> openssl version
OpenSSL 0.9.7f 22 Mar 2005

Si muestra que el c omando no existe, deberás entonc es desc argarlo e instalarlo. T ambi én, por supuesto, que requieres del servidor Web Apac he y
todo lo que se hará a c ontinuac ión se tiene que hac er en el equipo donde se tenga instalado el servidor Web c onfigurado c on un dominio FQDN
(Fully Qualified Domain Name), es dec ir, un dominio auténtic o de Internet, si es que es el c aso, o bastará c on la direc c ión IP privada del equipo si va
a quedar dentro de una Intranet. En c ualquier c aso debe hac erse todo el proc edimiento direc tamente en el equipo en c uestión.
Apac he además deberá estar instalado c on el módulo ModSSL. Si tienes OpenSSL seguramente tienes también este módulo.
Instalación inicial
T odo el trabajo lo haremos dentro de un direc torio de trabajo, puedes ponerle el nombre que desees, para fines prác tic os le pondré CA y dentro de
este direc torio a la vez hay que c rear otros dos, llamados certificados y privado. El primero es donde se guardará una c opia de c ada c ertific ado
que firmemos y en el otro direc torio se guardará la llave privada.
#> mkdir CA
#> cd CA
#> mkdir certificados privado

Es muy importante no perder la llave privada que se generé, ya que c on esta podremos firmar o renovar c ertific ados, y muc ho menos dársela a nadie,
ya que toda nuestra seguridad radic a en la c onfidenc ialidad de la llave privada que se guardará en el direc torio privado.
Lo siguiente será c rear un par de arc hivos que en c onjunto formarán la base de datos de los c ertific ados autofirmados.
#> echo '01' > serial
#> > index.txt (o también de la siguiente manera)
#> touch index.txt

El primer arc hivo 'serial' simplemente c ontiene el siguiente número de serie de nuestros c ertific ados, ya que apenas vamos a c rear el primero su
número de serie será 01, después de c rearlo se ac tualizará a 02 y asi suc esivamente.
'index.txt' será la base de datos propiamente en base al número de serie.
Archivo de configuración
Openssl tiene doc enas de opc iones y parámetros, muc ha de la informac ión que irá en el c ertific ado es tomado del arc hivo de c onfigurac ión, en vez
de la línea de c omandos. A c ontinuac ión te muestro un arc hivo de c onfigurac ión listo para ser usado, puedes personalizarlo a tu gusto, usa los
c omentarios que añadí y el sentido c omún para que te des una idea de lo que hac e c ada línea. A este arc hivo lo nombraremos openssl.cnf y lo
guardaremos dentro de nuestro direc torio CA. Añadí c omentarios a c ada variable para hac erlo mas c laro. El arc hivo se divide en sec c iones indic adas
entre [ c orc hetes ], y c ada sec c ión tiene sus propias variables. La idea princ ipal del arc hivo de c onfigurac ión es de simplific ar el uso de los
subc omados del c omando openssl, que tiene tres subopc iones princ ipales: c a, req y x509, entonc es, c uando se lee el arc hivo de c onfigurac ión
'openssl.c nf' y usamos la opc ión req por ejemplo, esta opc ión toma sus argumentos de la sec c ión c orrespondiente del arc hivo de c onfigurac ión. Una
explic ac ión detallada de c ada opc ión posible la enc uentras aqui.
Hay una direc tiva o variable importante que es distinguished_name (DN) o nombre distinguido en español, esta a su vez hac e referenc ia a una
sec c ión que tiene los datos básic os de la autoridad c ertific adora (CA) y que también servirán estos datos para c uando se generen c ertific ados. Mas
simple, el DN son los c ampos que identific an al propietario del c ertific ado.

2 de 7 28/08/09 18:27
Crear certificados ssl para apache http://www.linuxtotal.com.mx/index.php?cont=info...

# *************************************************************************************
# www.linuxtotal.com.mx
# sergio.gonzalez.duran@gmail.com
#
# 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 # archvio 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 = Pato, 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
# *************************************************************************************

Como ya lo había menc ionado guarda este arc hivo c on el nombre de 'openssl.c nf' en tu direc torio CA. En este punto esto es lo que debes de tener en
el direc torio CA.
#> ls -l
drwxr-xr-x 2 root root 4096 ene 26 13:23 certificados
-rw-r--r-- 1 root root 0 ene 26 13:24 index.txt
-rwxr--r-- 1 root root 4776 ene 26 2006 openssl.cnf
drwxr-xr-x 2 root root 4096 ene 26 13:23 privado
-rw-r--r-- 1 root root 3 ene 26 13:23 serial
#>

Creando el certificado raíz


T odo esta c asi listo para c rear el c ertific ado raíz, rec ordemos que este c ertific ado es el que nos c onvertira en una autoridad c ertific adora CA, asi que
c uando emitamos el c omando lo primero que nos pedira es el "pass phrase" o mas llanam ente, una c ontraseña pero en forma de una frase. Esta

3 de 7 28/08/09 18:27
Crear certificados ssl para apache http://www.linuxtotal.com.mx/index.php?cont=info...

c ontraseña es de vital importanc ia ya que es c on la que validaremos nuestra autoridad para después poder c rear c ertific ados autofirmados que son los
que realmente usaremos en nuestro sitio, debe ser preferentemente muy c ompleja, c on m ayúsc ulas, minúsc ulas, espac ios, números y por supuesto
símbolos, un buen ejemplo sería:
'el Der3ch0 al #respE5to( -a+jeño_Ez-la=pAz8%. =)'

Puede parec er muy c omplic ada para rec ordar y lo es, pero tengamos en c uenta que los algoritmos de c ifrado son muy buenos y sumamente dific iles
o al menos muy tardados para romper mediante fuerza bruta (hasta miles de años podría llevarse), asi que la verdadera debilidad es el uso de
c ontraseñas débiles. T e rec omiendo c omo "pass phrase" algo similar a lo anterior y al menos 20 c arac teres.
Ok. Manos a la obra, tenemos todo listo inc luyendo una buena c ontraseña.
#> openssl req -new -x509 -extensions v3_ca -keyout privado/cakey.pem \
-out cacert.pem -days 3650 -config ./openssl.cnf

Generating a 1024 bit RSA private key


....++++++
.......++++++
writing new private key to 'privado/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Nombre de la organizacion [Pato, S.A.]:
Departamento o division []:Sistemas
Correo electronico []:info@pato.com
Ciudad o distrito [Leon]:
Estado o provincia [Guanajuato]:
Codigo del pais (dos letras) [MX]:
Nombre comun (hostname o IP) []:www.pato.com

Antes de analizar la salida, veamos las opc iones indic adas:

req -new -x509 ---> crear un certificado nuevo autofirmado

-extensions v3_ca ---> crear un certificado raí z CA

-keyout ---> nombre y donde guardará la llave privada

-out ---> nombre del certificado raí z CA

-days 3650 ---> el certificado será válido por 3650 dí as (10 años)

-config ---> archivo de configuración a utilizar

Con respec to al resultado produc ido, lo primero que se indic o fue esc ribir y verific ar la c ontraseña, después vienen los datos para identific ar al
propietario del c ertific ado CA, que c omo se puede aprec iar los prompts y los datos por default provienen del arc hivo de c onfigurac ión. Si no se
espec ific a la opc ión -days entonc es el c ertific ado será válido por solo 30 días. (En el arc hivo de c onfigurac ión es posible inic ar la variable
default_days = valor, en la sec c ión de CA_default)
Lo anterior da por resultado dos arc hivos:

Un c ertific ado raíz CA (c ac ert.pem)


Una llave privada (privado/c akey.pem) (La extensión "pem" es de Privac y Enhanc ed Message)
IMPORTANTE: El archiv o cacert.pem es el que se podría mandar a nuestros clientes o us uarios del sistema, y que estos lo instalen (importen
desde el punto de v ista del nav egador) en su nav egador fav orito, de esta manera queda ríamos como un CA más v álido para el nav egador y
cada v ez que el cliente se conecte a nuestro serv idor, su nav egador ya no estaría mostrando el diálogo donde se pide aceptar la conexión
segura.
Veamos c omo luc en estos arc hivos:
#> more cacert.pem
-----BEGIN CERTIFICATE-----
MIIDkzCCAvygAwIBAgIJAKTOKYwDdhLRMA0GCSqGSIb3DQEBBAUAMIGOMRMwEQYD
VQQKEwpQYXRvLCBTLkEuMREwDwYDVQQLEwhTaXN0ZW1hczEcMBoGCSqGSIb3DQEJ
ARYNaW5mb0BwYXRvLmNvbTENMAsGA1UEBxMETGVvbjETMBEGA1UECBMKR3VhbmFq
dWF0bzELMAkGA1UEBhMCTVgxFTATBgNVBAMTDHd3dy5wYXRvLmNvbTAeFw0wNjAx
MjcwMTU4NDFaFw0wNjAyMjYwMTU4NDFaMIGOMRMwEQYDVQQKEwpQYXRvLCBTLkEu
MREwDwYDVQQLEwhTaXN0ZW1hczEcMBoGCSqGSIb3DQEJARYNaW5mb0BwYXRvLmNv
bTENMAsGA1UEBxMETGVvbjETMBEGA1UECBMKR3VhbmFqdWF0bzELMAkGA1UEBhMC
TVgxFTATBgNVBAMTDHd3dy5wYXRvLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
gYkCgYEA52zeMbFW2lSRfcZl6yrqXDAzbwL4ZoXCGRnbo6Wr8S1yp/KYW9/TMHlX
nFrKXzM+RP7St/LzlkW1Zt8L+bCZ3XMBLGaa7qHgOagZxhcq1XTLL3CcvaCuzzKT
8izENDnGr4abtvkAJW4QqRCP7iVvVf8Db624JclbhBYMBUqPEJsCAwEAAaOB9jCB
8zAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBS6tkzuiG3DR+AO1Oy32QjZvBbpLTCB
wwYDVR0jBIG7MIG4gBS6tkzuiG3DR+AO1Oy32QjZvBbpLaGBlKSBkTCBjjETMBEG
A1UEChMKUGF0bywgUy5BLjERMA8GA1UECxMIU2lzdGVtYXMxHDAaBgkqhkiG9w0B
CQEWDWluZm9AcGF0by5jb20xDTALBgNVBAcTBExlb24xEzARBgNVBAgTCkd1YW5h
anVhdG8xCzAJBgNVBAYTAk1YMRUwEwYDVQQDEwx3d3cucGF0by5jb22CCQCkzimM
A3YS0TANBgkqhkiG9w0BAQQFAAOBgQAEdK/hgtIqEVw551fs3G3+TKoH9b9t3TJa
aelLJtKSQAoKzsnhwl88Hm78LEXK/kYufX6M6rDQHDpmcBV3DhIkEEHrBPJ4KBuV
+aC559Xqb828YCkNVWDIIefFuxfaWBfd4HHPNKBBiyE5rp2IXN8AgUy7mVkMbsto
RCAZS/IhAg==
-----END CERTIFICATE-----
#>

Y la llave privada tiene el siguiente c ontenido:

4 de 7 28/08/09 18:27
Crear certificados ssl para apache http://www.linuxtotal.com.mx/index.php?cont=info...

#> more privado/cakey.pem


-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,0FC86D0DBD03A241

TQIqQQKIB2ZFaZUqTwk+k658Lj+RStlsdLKkAeWN+B7ibgtLPN8OHNZM2cOts9Se
qRSVfWSSXzhFsh2fbDoBNx+JYKgPh7+IeBhQ1PJNrPAbyrC1GEybtn+WPEWzBNdo
2e4kOeIzgm7LxeAoofmKgvqcDLRlY34TCFHgnSAQIuZC3iZ8YZAFcMWo3owoUpP7
TKL8W1PtFTVviMC5I7A0rN9en9EQY4QazXDIIVc60uIcKONyEF4fj3aE87+m2lD5
fqfMWG7Ce8GBBOUPL1YtLSC9LOBNhulFqceMvfysLFxToPUP4rs+n+upxnGsHnmF
YjsPR3lqAt41JehsO+sUSqoX6I83Q/706g/87XV0JPMDCXBejRI/vW5KgJ0Ux2gv
yQfYvHGs5RZl8NfK9AUEcC053VSkjwmuT/anu7czyJC+IG2XTHqoLu6g6CjLNe3b
bm/FhymOKENGnKSvA6Mny+NThhSOImhibB0fvsW5Fygi7SboZpXZFJBfEqHzUGvW
guzfVF4G7Rhs29Bue0dJOMT2ptFPrjUn0582O7WVIE7aV7msygmt2QUYIWykEt7s
O5hzdhguw2WZu0/gl2y5Mpjo3W5SrrCOoxC2mcPutoNhV+DFCQxcbCLsu5PnLBoF
HFBCe6ynh/6bIpakGJorzdsB9QqhGdgvbRQbrpYfAl+QHr6/8kyEu4OG+PmoD2ZR
O/gAGlSIlDowesmWXGk6l7vZc5BxU1qQVI5QLVr3X7ilavi6+EVSWDF8dFVetYBP
dPYYAEzVJVEiDH8yxQ4NoGk+9gmxKVfmejnmtbSHuR20cXbHOKJGmQ==
-----END RSA PRIVATE KEY-----

ADVERT ENCIA: Esto jamás lo hagas en la vida real, el c ontenido de una llave privada j amás debe public arse ni mostrarse, ni mandarse a nadie, esta
es de prueba y es totalmente inútil. Una llave privada auténtic a es tu mayor sec reto. Podemos también c onsultar informac ión espec ífic a del
c ertific ado raíz, fec has, a quien pertenec e etc .
#> openssl x509 -in cacert.pem -noout -dates
notBefore=Jan 27 02:22:33 2006 GMT
notAfter=Jan 25 02:22:33 2016 GMT

En el ejemplo anterior se aprec ia que el c ertific ado si fue generado c on una validez de 10 años, tal c omo se indic o. Otros ejemplos de c onsulta pero
se omite la salida:
#> openssl x509 -in cacert.pem -noout -text
#> openssl x509 -in cacert.pem -noout -purpose

Creando un Certificate Signing Request(CSR)


(Solicitud de firmado de certificado)
En este punto, ya tenemos un c ertific ado raíz que nos válida c omo CA, c laro sin mas autoridad que nuestro propio dominio pero podemos c rear
c ertific ados no solo para https, sino también spop, o simap o c rear autentific ac ión para vpn's a través de apliac iones c omo stunnel.
Los siguientes proc edimientos son los que a c ontinuac ión hay que realizar:

Crear una llave privada y una solic itud de c ertific ado.


Firmar la solic itud para generar un c ertific ado autofirmado.
Volveremos entonc es a usar el c omando openssl para lograr lo anterior. Casi todo será igual a lo anterior. Solo que en la solic tud de firmado no es
nec esario espec ific ar una c ontraseña, aunque si se generará una c lave privada para la solic tud. Veamos.
#> openssl req -new -nodes -out pato-cert.pem -config ./openssl.cnf
Generating a 1024 bit RSA private key
......................................................++++++
.......++++++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Nombre de la organizacion [Pato, S.A.]:
Departamento o division []:Sistemas
Correo electronico []:info@pato.com
Ciudad o distrito [Leon]:
Estado o provincia [Guanajuato]:
Codigo del pais (dos letras) [MX]:
Nombre comun (hostname o IP) []:www.pato.com

Lo último que nos pregunto en la parte DN (distinguished name) es el nombre c omún (CN c ommon name), aqui es sumamente importante indic arlo
igual a c omo esta el c ertific ado raíz generado previamente, c omo se trata de un servi dor web, lo c orrec to es poner su FQDN que es www.pato.c om, no
debe indic arse ni pato.c om ni http://www.pato.c om
Lo anterior genera dos arc hivos:

pato-cert.pem ---> el certificate signing request (csr)

key.pem ---> la llave privada

En c uanto a las opc iones, se uso req de request solic itando un c ertific ado nuevo, -out que es el nombre del c ertific ado que deseamos firmar,
-config de nuevo toma el arc hivo de c onfigurac ión que c reamos. La opc ión -nodes se espec ific a para indic ar que no deseamos c ontraseña en la
llave privada.
Observemos el c ontenido de la solic tud:
#> more pato-cert.pem
-----BEGIN CERTIFICATE REQUEST-----
MIIBwTCCASoCAQAwRjETMBEGA1UEChMKUGF0bywgUy5BLjENMAsGA1UEBxMETGVv
bjETMBEGA1UECBMKR3VhbmFqdWF0bzELMAkGA1UEBhMCTVgwgZ8wDQYJKoZIhvcN
AQEBBQADgY0AMIGJAoGBAMMvo7xg3vmdlf/38yA68uzNq2WYTtkyecuBnUgocOqD
gc0Yl2hrfXN6lHl65kxeRFVdEBYhGgA7JoISivuDTvWwVOIxmH5HOFzZlIPIZ3xT
hHCdWUKipXhcsVCTGV+rbB1F9kkIAMrmtaNH2+Zj261jdB7eX960l1EqQaWt71dJ
AgMBAAGgOzA5BgkqhkiG9w0BCQ4xLDAqMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGVf
A/CDDXl6LQs1MH/XItqJl/8kMA0GCSqGSIb3DQEBBAUAA4GBAJH0sO7bR+dJL67p
xK5oEG9LPA2KcP+W7Vn5edpaLtUs/jYyvhQaCdSBxbMkV42nmt9DGD5p5caTFk3M
5guV9f087K+eYnUGILGQS51tXFcmYramZLETzs7nVfwGnXGsDGyKDkG6VTkx46pz
JrRTJfWBpWpo4FWg/Fi2l4E4PLv8
-----END CERTIFICATE REQUEST-----

Observa c laramente que se trata de una solic itud de c ertific ac ión (Certific ate Request), es dec ir todavía tiene que ser firmado por una autoridad
c ertific adora CA que somos nosotros mismos. Y antes de hac er este último paso podemos observar el c ontenido de nuestra solic tud en un formato mas
legible e inc luso verific ar que estén los datos c orrec tos. Se omite la salida, c héc al o en tu pantalla : )
#> openssl req -in pato-cert.pem -text -verify -noout

5 de 7 28/08/09 18:27
Crear certificados ssl para apache http://www.linuxtotal.com.mx/index.php?cont=info...

Firmando el certificado
Por último firmaremos la solic itud que hic imos en el paso previo, para firmarlo nec esitaremos indic ar la c ontraseña que autentifique que somos la CA
y que que por serlo tenemos la autoridad de autorizar (firmar) c ertific ados. (Para nuestro propio uso).
#> openssl ca -out certificado-pato.pem -config ./openssl.cnf -days 3650 \
-infiles pato-cert.pem
Using configuration from ./openssl.cnf
Enter pass phrase for ./privado/cakey.pem:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
organizationName :PRINTABLE:'Pato, S.A.'
organizationalUnitName:PRINTABLE:'Sistemas'
localityName :PRINTABLE:'Leon'
stateOrProvinceName :PRINTABLE:'Guanajuato'
countryName :PRINTABLE:'MX'
commonName :PRINTABLE:'www.pato.com'
Certificate is to be certified until Jan 26 00:10:10 2016 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y


Write out database with 1 new entries
Data Base Updated
#>

Observa que usamos la opc ión c a que indic a que firmaremos un c ertific ado c omo autoridad c ertific adora (CA) que somos, la salida -out será el
arc hivo c ertific ado-pato.pem usando las opc iones -config del arc hivo de c onfigurac ión y la solic itud de firmado se espec ific ó c on la opc ión
-infiles que tomó los datos del arc hivo pato-c ert.pem c reado en el paso previo.
Aqui se nos pidió la c ontraseña, que es la que se indic ó c uando c reamos c ac ert.pem que c orresponde a nuestro c ertific ado raíz que nos identific a
c omo CA. El c ertific ado será válido por 10 años -days y después se nos preguntó que si queriamos firmarlo, por supuesto que si, y la últim a pregunta
es por si queremos guardar este c ertific ado ya autofirmado en la base de datos, a lo que también c ontestamos que si.
#> more serial
02

Se c omprueba que ya aumento el número de serie a 02, es dec ir, el siguiente c ertific ado que firmemos será ese número.
#> more index.txt
V 160126001010Z 01 unknown /C=MX/ST=Guanajuato/O=Pato, S.A./OU=Sistemas/CN=www.pato.com

En el arc hivo index.txt el terc er c ampo indic a 01, que es el número de serie para el c ertific ado rec ien c reado y muestra también los c ampos del DN.
#> ls -l certificados
total 4
-rw-r--r-- 1 root root 2597 ene 27 18:10 01.pem

En el direc torio de c ertific ados se guarda también c on el c orrespondiente número de serie (01.pem) un arc hivo que c omplementa la base de datos de
c ertific ados que podemos ir c reando.
Y por último tenemos el c ertific ado en si:
#> ls -l certificado-pato.pem
-rw-r--r-- 1 root root 2597 ene 27 18:10 certificado-pato.pem

Y podemos inspec c ionarlo:


#> openssl x509 -in certificado-pato.pem -noout -text -purpose

Instalando el certificado y la llave para Apache


T enemos entonc es dos elementos ya generados que nec esitaremos para Apac he:

key.pem ---> La llave privada

certificado-pato.pem ---> Certificado autofirmado

Hay algunas aplic ac iones (no Apac he) que requieren estos dos elementos en un solo arc hivo, c omo en el c aso de stunnel:
# > cat key.pem certificado-pato.pem > key-cert-pato.pem

Simplemente se c onc atenan los dos arc hivos en uno. Pero esto no es nec esario para el c aso del servidor Web Apac he. Lo que hay que hac er es
c opiar nuestros dos arc hivos en un direc torio, de hec ho podrían quedarse donde están, es lo de menos, pero por c uestión de orden y organizac ión
vamos a c opiarlos a /etc /httpd/c onf que en la mayoría de distribuc c iones es el direc torio de c onfigurac ión del Apac he.
NOT A IMPORT ANT E: por ningún motivo los c opies dentro del direc torio raíz del servic io de Apac he c omo /var/www/html ya que podrías dejar
expuestos los arc hivos a todo el mundo y ser vulnerados.
#> cp key.pem certificado-pato.pem /etc/httpd/conf/.

Una vez c opiados los arc hivos, hay que c rear un servidor virtual en Apac he, esto dentro del arc hivo de c onfigurac ión httpd.conf, en algunas
distribuc c iones c omo Fedora y otras dentro de /etc /httpd/c onf.d hay un arc hivo llamado ssl.conf que es donde viene un servidor virtual ya c reado,
se puede tomar c omo plantilla.
<VirtualHost 192.168.100.1:443>
ServerName www.pato.com
DocumentRoot /var/www/consulta
... (demás directivas del sitio)
SSLEngine on
SSLCertificateFile /etc/httpd/conf/certificado-pato.pem
SSLCertificateKeyFile /etc/httpd/conf/key.pem
</VirtualHost<

T ambién debe existir una línea que abre el puerto 443 a la esc uc ha de paquetes. Esta fuera de las direc tivas del servidor virtual, búsc ala y si no esta
agrégala, es la siguiente:
Listen 443

Forzosamente debe ser un servidor virtual basado en IP, aqui lo indique c on una IP (192.168.100.1) de una red privada pero en tu c aso indic a la IP
homologada o real de tu sitio web o deja tu IP privada si es una Intranet.
Observa también que la direc tiva Doc umentRoot apunta a /var/www/c onsulta y no a /var/www/html, esto yo lo hago para que en /var/www/html dejes un
simple index.html c on una línea c omo la siguiente:

6 de 7 28/08/09 18:27
Crear certificados ssl para apache http://www.linuxtotal.com.mx/index.php?cont=info...

<meta http-equiv="refresh" content="0;url=https://www.pato.com">

Esto hará que el usuario en su navegador espec ifique http://www.pato.c om, es dec ir di rigido al puerto 80 y es c ac hado por la página index.html c on el
c ódigo que redirige al mismo servidor pero a https, es dec ir, puerto 443 y es donde entra en func ión el servidor virtual que a la vez redirige a /var/www
/c onsulta donde se inic ia la apliac ión de c onsulta o lo que se tenga. Pero lo interesante es que no hay nec esidad de indic arle al usuario que indique
https en el url. Para estás alturas ya sabes que al usuario le aparec erá un diálogo pidiéndole que ac epte el c ertific ado de la empresa Pato, S.A.
Distribuir el certificado raíz CA
Como ya había menc ionado antes, si quieres evitar que a tus c lientes c ada vez que ingresen a tu sitio salga el molesto diálogo que pide ac eptar el
c ertific ado, la únic a soluc ión es que distribuyas el arc hivo c ac ert.pem, rec uerda que este arc hivo es el que te identific a c omo una autoridad
c ertific adora. Lo puedes poner a desc arga desde tu propio sitio, o mandarlo por c orreo, c omo sea. Cuando el c liente lo tenga en su equipo deberá
importarlo dentro del browser o navegador. T odos los navegadores en sus preferenc ias o herramientas tienen una opc ión de c ertific ados y desde ahí
existe un botón importar para realizar esto.
Pues eso es todo, si todo func ionó bien, tienes ahora un sitio c on enc riptac ión de extremo a extremo y todo el tráfic o viaja seguro, hac iéndoles la vida
mas difc il a los hac kers de sombrero negro (blac k hat) que abundan por ahí. Suerte y por favor c ontác tame si tienes problemas, en la medida de lo
posible te ayudaré.
Referencias
Buena parte de esta guía la tomé de los siguientes sitios:

http://www.ec lec tic a.c a/howto/ssl-c ert-howto.php


http://www.tec hnoids.org/openssl.c nf.html
http://www.squarebox.c o.uk/c gi-squarebox/manServer/usr/share/man/man1/c a.1ssl
http://www.openssl.org
Y también de las mismas páginas del manual:
#> man openssl
#> man req
#> man ca
#> man x509

publicado o modificado el: 2006-01-20

Otros artíc ulos de LinuxT otal.c om.mx:

Los 10 c omandos más usados (history)


Usar GPG para "disfrazar" ejec utables y otros arc hivos
Squid y las listas de c ontrol de ac c eso (ac l) (1ra. Parte)
Sc reen - terminales virtuales
Como c errar c onexiones de ssh

L i n u xT o t a l . c o m . m x · I n f o rm a c i ó n y s e rvi c i o s e n L i n u x y Op e n S o u rc e · i n f o @ l i n u xt o t a l . c o m . m x
¿Te ha sido útil la información de LinuxTotal?, considera donar un dólar o más ¡¡¡GRACIAS! ! ! !

7 de 7 28/08/09 18:27

You might also like