Está en la página 1de 6

LinuxTotal .com.

mx

In f o rm ac i n y s ervi c i o s en Li n u x y Op en S o u rc e

CREARCERTIFICADOSSSLPARAAPACHE
Copyright20052012SergioGonzlezDurn
Seconcedepermisoparacopiar,distribuiry/omodificarestedocumentosiempreycuandosecitealautorylafuentedelinuxtotal.com.mxysegnlostrminosdelaGNUFreeDocumentationLicense,Versin1.2o
cualquieraposteriorpublicadaporlaFreeSoftwareFoundation.

autor:sergio.gonzalez.duran@gmail.com
[NDICE...]

Introduccin
Imaginmonos a la empresa "Pato, S.A." que ofrece a sus empleados y clientes el sitio http://www.pato.com/consulta, donde mediante un
nombre de usuario y contrasea es posible para los empleados consultar saldos, rdenes, resurtir, estados de cuenta, etc. y para los clientes
observarelestadodesuspedidos,susaldo,pagos,historialdecompras,etc.Elsitioestaperfectamentediseado,protegidocontrainyecciones
sql, ataques mediante el url, el servidor al da con los ltimos parches y actualizaciones, toda entrada de usuario, contrasea, y dems
debidamentevalidadasparasolorecibircaracteresvlidosyexcluircaracteresusadosenconsultaseinstruccionessql,etc.etc.Unabellezaen
cuantoalaseguridaddelaaplicacinWeb.PERO,todoelsitiofuncionabajounservidorWebapacheenelpuerto80,estabien,peroimplicaque
unempleadorencorosoporquenoleaumentaronelsueldoonolopromovierondepuestoyconintencionesdequererserunhacker,instalaun
snifferensuPC(dentrodelaempresa),bajaherramientasparaenvenenarmedianteunataquearp(arppoisoning)elswitchalquecorresponde
a su segmento red de tal modo que puede observar todo el trfico de red de los equipos conectados a su switch. Fcil, nada del otro mundo,
cualquier chico de los scripts (script kiddie) le hubiera enseado como hacerlo si no lo hubiese el sabido ya. En unas cuantas horas tiene ya
varias cuentas de usuario y contraseas, se introduce como ellas y baja informacin confidencial de varios de sus compaeros y como algunos
songerente,tambinobtieneinformacinsensibledeclientes.Listo,ahoraachantajearalaempresapormediodeuncmpliceenelexterioro
simplementetratardeutilizarlainformacinensubeneficioopeorauncausaralgntipodedestrozoconesta.
Ficcin? Absolutamente no. Lo anterior es perfectamente posible porque el trfico de red generado entre el cliente (navegador) y el servidor
Web apache en el puerto 80 no esta encriptado, viaja tal cual. Entonces es posible, con la herramienta adecuada interceptar y observar este
trficoyobtenerentreotrascosascontraseas,nmerosdetarjetasdecrdito,etc.Lasolucinessimple(laimplementacinnotanto),obtener
un certificado de seguridad y hacer que el trfico se dirija al puerto 443 (https) en vez del 80 (http). En el puerto 443 el trfico se encripta a
travs del los protocolos SSL (Secure Sockets Layer) y TLS (Transport Layer Security). Entonces todo el trfico ser encriptado y aunque es
posible interceptarlo y observarlo, no se ver mas que basura o cadenas de caracteres sin ningn significado todo el tiempo, logrando asi un
canalseguroencriptadoentreelclienteyelservidor.

CertificateAuthorityCA(AutoridadCertificadora)
EstafueradelalcancedeestedocumentotodalateoradetrsdeSSL,hayvariosdocumentos,tutorialesymanualesenInternetqueloexplican,
pero lo que si hay que entender que es un CA. Una autoridad certificadora como lo son Verisign, Thawte, beTRUSTed o ValiCert son empresas
dedicadasavendercertificadosdeseguridadquelaempresaqueloadquiereinstalaensuservidorweb.Esdecir"Pato,S.A."desea montar su
apliacinWebbajounsitioseguroconhttps,creasucertificadoylomandafirmarconunCA,elCAverificaque"Pato,S.A."esrealmentequien
dice ser. Despus de checar la autenticidad de la empresa en cuestin, el CA firma el certificado de seguridad de su cliente con alguno de sus
certificados raz bajo una fuerte encriptacin y se lo regresa a "Pato, S.A.", este lo instala en su servidor Web y cuando los clientes
(navegadores) se conectan, estarn tanto el cliente como el servidor bajo un trfico encriptado y seguro, todo avalado por el CA otorgante del
certificado. La enorme ventaja de este esquema es que todos los navegadores actuales (Internet Explorer, Firefox, Opera, Mozilla, etc) tienen
incorporadosloscertificadosrazdetodaslasempresasCAconocidasdelmundo,asiquecuandoelclienteseconectaalservidornohayninguna
molestiaparaelcliente,todoestransparenteparaelusuariofinal.Sieresunaempresadedicadaacualquiertipodecomercioelectrnicodonde
se involucre dinero a travs de tarjetas de crdito o servicios como paypal, firmarse con un CA como Verisign es la nica alternativa que se
tiene,estoparaotorgarseguridadalosclientesdelsitio.
Ahorabien,losCAcomolosmencionadosnosonalmasdelacaridad,cobranporelserviciodefirmarloscertificados,susprecioscomienzanen
alrededorde200a300dlaresanualesporcertificadoypuedensubirmasdependiendodeltipodeencriptacinquesesolicite,esdecir,paraun
sitiodecomercioelectrnicoconunaltovolumendetrficorequeriradecertificadosmassegurosdebidoaquesermastentadorparaposibles
hackersdetratardeviolarlo.
Lointeresantevieneacontinuacin."Pato,S.A."escomomuchasempresasquesoloofrecenunaaplicacinsintransaccionesdecomercio,solo
consulta a sus bases de datos y algunos formularios que involucran solicitudes de reportes o actualizacin de datos. "Pato, S.A." o quienquiera
puedeconvertirseelmismoenCA,elmismoemitiruncertificadorazdeseguridadyatravsdeestegenerarcertificadosparasitiosWeb.Yde
hechoeseltemadeesteartculo,comocrearcertificadosSSLparamontarloennuestropropioservidorWebodecorreoelectrnico.Cualesla
deventaja?,solouna,queenelnavegadordelclientealnoestarimportadoelcertificado(integrado)ensulistadecertificadosseguros,pediral
usuariocuandoseconectealsitioqueacepteelcertificado.Sielusuarioesdesconfiadoynoloaceptanosepodrconectaranuestro servidor
Webseguro.Loquesepuedehaceres,porejemplo,losiguiente:
Elusuarioseconectaa"http://www.pato.com"puerto80,traficohttpnormalsinseguridad.
En la pgina inicial del sitio desplegamos un botn y una leyenda que dice que al apretar el botn se redirigir a la aplicacin Web de
consulta y que deber aceptar el certificado de seguridad que la empresa "Pato, S.A." ofrece para establecer una conexin segura, que si
tienedudaspuedecomunicarsealsiguientetelfonoocorreo,etc.
Al apretar el botn se redirige a "https://www.pato.com/consulta" puerto 443, que es donde estar la apliacin de consulta y en este
momentosepedirqueseacepteelcertificado.Elusuarioentonces,estuvomasinformadodeloquepasa.
Yaquedandomasclaroloanterior,entonces,comencemosaaclararalgunascosas.Serequiereparaloanteriordoscosas:
Un par de claves, una pblica y una privada (claves RSA o DSA, en otras palabras encriptacin asimtrica). La clave es pblica, como su
nombreimplicaesexpuestaatodoelmundoylaprivadaessoloconocidaporelemisor,esdecir,nosotros.
Uncertificadodeseguridad,queesunaversin"firmada"overificadadelaclavepblicaRSAoDSA.
Entonces, se trata de que uno va a generar tanto la clave pblica como la privada. Una vez teniendo esto volvemos a las dos opciones
previamente mencionadas, podemos autofirmar nosotros mismos nuestra clave pblica o podemos mandarla a un tercero, a un CA reconocido
paraquenoslafirmecobrandoporelservicio.Unavezquehacemosestotendremosenamboscasoscomoproductouncertificadofirmadoque
serelqueelnavegadordeberimportarensulistadecertificadosdeconfianzaparapoderestablecerlaconexin.
Vamosaponerlomasilustrado,primeroconuncertificadoautofirmado:
El usuario (cliente) se conecta a https://www.pato.com/consulta y este servidor le envia el certificado autofirmado para que sea aceptado
(importado) por el navegador del cliente. Traducido en un dilogo de humanos sera de la siguiente manera: "Hey! hola navegador, soy el
servidorwww.pato.comtienesqueconfiarquesoydelaempresaPato,S.A.ynadiemas,yparademstrarteloteenvimiclavepblicaquete
permitirautentificarteconmiclaveprivadaenmiservidor,todoestotelomandoenestecertificadoqueesperoaceptes,yaqueyomismome
convertenmipropioCA.YenserioyoelfirmantePato,S.A.tejuroquesoyyo,creeme,acptame,vamos,sisoyyo,porfavoraprietaAceptar
parapoderestablecerlaconexinsegura."
Ahoraveamosquepasaconuncertificadodeterceros:
Elusuario(cliente)seconectaahttps://www.pato.com/consultayesteservidorleenviaelcertificadofirmado,porejemploporelCAVerisign,
los certificados de Verisign ya estn por default en la lista de CA confiables del navegador, por lo que es aceptado sin mayor problema y sin
preguntas.Traducidoenundilogodehumanosseradelasiguientemanera:
"Hey!,holanavegador,soyelservidorwww.pato.com,teenvimicertificadoconmi clave pblica que te permitir autentificarte con mi clave
privada en mi servidor, esto te lo mando en un certificado firmado nada mas ni nada menos por Verisign. Verisign ya verific que si soy la

empresa Pato, me cobro un billete por esto, asi que mi certificado debe ser autorizado sin mayor problema por los certificados raz que se
encuentranentulistadecertificadosconfiables.Listo,conexinseguraestablecida".
Bueno, espero que con esto quede claro cual es la idea detrs de los certificados y de las conexiones seguras, pero ya estuvo bueno de tanto
rolloypongamosmanosalaobraencrearnuestrospropioscertificadosautofirmados.
Nota cultural rpida: Hace algunos aos fue muy sonado el caso de dos certificados que firm Verisign para alguien que dijo ser empleado de
MicrosoftyVerisignlecrey!!!.Lomasincreibleesquetodavapasaronvariosmeseshastaquesedescubrielfraudedeloscertificadosdel
supuestoempleadodeMicrosoft.DesdeentoncestodoslosCAdelmundochecanmuyescrupulosamentetantoalapersona que representa a la
empresa que desea obtener un certificado como a la empresa en si, por eso el proceso de obtener un certificado firmado por un tercero suele
tardar de dos a tres semanas. (Si tienes curiosidad puedes checar estos dos certificados falsos estn en la lista de "fabricantes que no son de
confianza"enelInternetExplorer>HerramientasOpcionesdeInternetContenidoCertificadosFabricantesquenosondeconfianza).

Prerequisitos
ParacrearnuestroscertificadosusaremoslaexcelenteaplicacinOpenssl,quedeberstenerinstalada,puedesverificarloconunaconsultarpm:
#>rpmqopenssl
openssl0.9.7f7

Odirectamenteconelmismocomandoopenssl:
#>opensslversion
OpenSSL0.9.7f22Mar2005

Simuestraqueelcomandonoexiste,debersentoncesdescargarloeinstalarlo.Tambin,porsupuesto,querequieresdelservidorWebApache
ytodoloqueseharacontinuacinsetienequehacerenelequipodondesetengainstaladoelservidorWebconfiguradoconundominioFQDN
(FullyQualifiedDomainName),esdecir,undominioautnticodeInternet,siesqueeselcaso,obastarconladireccinIPprivadadelequipo
sivaaquedardentrodeunaIntranet.Encualquiercasodebehacersetodoelprocedimientodirectamenteenelequipoencuestin.
ApacheademsdeberestarinstaladoconelmduloModSSL.SitienesOpenSSLseguramentetienestambinestemdulo.

Instalacininicial
Todoeltrabajoloharemosdentrodeundirectoriodetrabajo,puedesponerleelnombrequedesees,parafinesprcticoslepondrCAydentro
de este directorio a la vez hay que crear otros dos, llamados certificados y privado. El primero es donde se guardar una copia de cada
certificadoquefirmemosyenelotrodirectorioseguardarlallaveprivada.
#>mkdirCA
#>cdCA
#>mkdircertificadosprivado

Esmuyimportantenoperderlallaveprivadaquesegener,yaqueconestapodremosfirmarorenovarcertificados,ymuchomenosdrselaa
nadie,yaquetodanuestraseguridadradicaenlaconfidencialidaddelallaveprivadaqueseguardareneldirectorioprivado.
Losiguientesercrearunpardearchivosqueenconjuntoformarnlabasededatosdeloscertificadosautofirmados.
#>echo'01'>serial
#>>index.txt(otambindelasiguientemanera)
#>touchindex.txt

Elprimerarchivo'serial'simplementecontieneelsiguientenmerodeseriedenuestroscertificados,yaqueapenasvamosacrearelprimerosu
nmerodeserieser01,despusdecrearloseactualizara02yasisucesivamente.
'index.txt'serlabasededatospropiamenteenbasealnmerodeserie.

Archivodeconfiguracin
Openssl tiene docenas de opciones y parmetros, mucha de la informacin que ir en el certificado es tomado del archivo de configuracin, en
vezdelalneadecomandos.Acontinuacintemuestrounarchivodeconfiguracinlistoparaserusado, puedes personalizarlo a tu gusto, usa
loscomentariosqueaadyelsentidocomnparaquetedesunaideadeloquehacecadalnea.Aestearchivolonombraremos openssl.cnf y
lo guardaremos dentro de nuestro directorio CA. Aad comentarios a cada variable para hacerlo mas claro. El archivo se divide en secciones
indicadasentre[corchetes],ycadaseccintienesuspropiasvariables.Laideaprincipaldelarchivodeconfiguracinesdesimplificarelusode
los subcomados del comando openssl, que tiene tres subopciones principales: ca, req y x509, entonces, cuando se lee el archivo de
configuracin 'openssl.cnf' y usamos la opcin req por ejemplo, esta opcin toma sus argumentos de la seccin correspondiente del archivo de
configuracin.Unaexplicacindetalladadecadaopcinposiblelaencuentrasaqui.
Hayunadirectivaovariableimportantequees distinguished_name(DN)onombredistinguidoenespaol,estaasuvezhacereferenciaauna
seccin que tiene los datos bsicos de la autoridad certificadora (CA) y que tambin servirn estos datos para cuando se generen certificados.
Massimple,elDNsonloscamposqueidentificanalpropietariodelcertificado.
#*************************************************************************************
#www.linuxtotal.com.mx
#sergio.gonzalez.duran@gmail.com
#
#Archivodeconfiguracionparaopenssl
#
#*****openssl.cnf******
dir=.#variablequeestableceeldirectoriodetrabajo

#seccionquepermiteconvertirnosenunaCA
#solosehacerefernciaaotraseccinCA_default
[ca]
default_ca=CA_default
[CA_default]
serial=$dir/serial#archivoqueguardaelsiguientenmerodeserie
database=$dir/index.txt#archvioqueguardalabddecertificados
new_certs_dir=$dir/certificados#dirqueguardaloscertificadosgenerados
certificate=$dir/cacert.pem#nombredelarchivodelcertificadoraz
private_key=$dir/privado/cakey.pem#llaveprivadadelcertificadoraz
default_md=md5#algoritmodedispersinusado
preserve=no#Indicasisepreservaonoelordendelos
#camposdelDNcuandosepasaaloscerts.
nameopt=default_ca#estaopcionylasiguientepermitenmostrar
#detallesdelcertificado
certopt=default_ca
policy=policy_match#indicaelnombredelaseccion
#dondeseespecificaquecamposson
#obligatorios,opcionalesycualesdebenser
#igualesalcertificadoraz
#secciondepoliticasparalaemisiondecertificados
[policy_match]
countryName=match#match,obligatorio
stateOrProvinceName=match
organizationName=match
organizationalUnitName=optional#optional,campoopcional
commonName=supplied#supplied,debeestarenlapeticin
emailAddress=optional
#seccionqueindicacomoloscertificadosdebensercreados
[req]
default_bits=1024#tamaodelallave,sinoseindica512
default_keyfile=key.pem#nombredelallaveprivada
default_md=md5#algoritmodedispersinautilizar
string_mask=nombstr#caracterespermitidosenlamascaradelallave
distinguished_name=req_distinguished_name#seccionparaelnombredistinguido(DN)
req_extensions=v3_req#seccionconmasextensionesqueseaadenala
#peticiondelcertificado

#secciondelnombredistinguido,elvaloreselpromptqueseveraenpantalla.
#datosdelpropietariodelcertificado.
#estasecciondefineelcontenidodedatosdeidqueelcertificadollevara.
[req_distinguished_name]
0.organizationName=Nombredelaorganizacion
0.organizationName_default=Pato,S.A.
organizationalUnitName=Departamentoodivision
emailAddress=Correoelectronico
emailAddress_max=40
localityName=Ciudadodistrito
localityName_default=Leon
stateOrProvinceName=Estadooprovincia
stateOrProvinceName_default=Guanajuato
countryName=Codigodelpais(dosletras)
countryName_default=MX
countryName_min=2
countryName_max=2
commonName=Nombrecomun(hostnameoIP)
commonName_max=64
#sienlalineadecomandosseindicalaopcionx509,
#lassiguientesextensionestambienaplican
[v3_ca]
#indicaquesetratadeuncertificadoCArazconautoridadpara
#firmarorevocarotroscertificados
basicConstraints=CA:TRUE

#especificabajoquemetodoidentificaralallavepublicaqueseracertificada
subjectKeyIdentifier=hash

#especificacomoidentifcarlallavepublica

authorityKeyIdentifier=keyid:always,issuer:always

#extensionesdelaopcionreq
[v3_req]
basicConstraints=CA:FALSE#loscertificadosfirmadosnosonCA
subjectKeyIdentifier=hash
#*************************************************************************************

Comoyalohabamencionadoguardaestearchivoconelnombrede'openssl.cnf'entudirectorioCA.Enestepuntoestoesloquedebesdetener
eneldirectorioCA.
#>lsl
drwxrxrx2rootroot4096ene2613:23certificados
rwrr1rootroot0ene2613:24index.txt
rwxrr1rootroot4776ene262006openssl.cnf
drwxrxrx2rootroot4096ene2613:23privado
rwrr1rootroot3ene2613:23serial
#>

Creandoelcertificadoraz
Todoestacasilistoparacrearelcertificadoraz,recordemosqueestecertificadoeselquenosconvertiraenunaautoridadcertificadoraCA,asi
quecuandoemitamoselcomandoloprimeroquenospediraesel"passphrase"omasllanamente,unacontraseaperoenformadeunafrase.
Estacontraseaesdevitalimportanciayaqueesconlaquevalidaremosnuestraautoridadparadespuspoder crear certificados autofirmados
quesonlosquerealmenteusaremosennuestrositio,debeserpreferentementemuycompleja,conmaysculas,minsculas,espacios, nmeros
yporsupuestosmbolos,unbuenejemplosera:
'elDer3ch0al#respE5to(a+jeo_Ezla=pAz8%.=)'

Puede parecer muy complicada para recordar y lo es, pero tengamos en cuenta que los algoritmos de cifrado son muy buenos y sumamente
dificilesoalmenosmuytardadospararompermediantefuerzabruta(hastamilesdeaospodrallevarse),asiquelaverdaderadebilidadesel
usodecontraseasdbiles.Terecomiendocomo"passphrase"algosimilaraloanterioryalmenos20caracteres.
Ok.Manosalaobra,tenemostodolistoincluyendounabuenacontrasea.
#>opensslreqnewx509extensionsv3_cakeyoutprivado/cakey.pem\
outcacert.pemdays3650config./openssl.cnf
Generatinga1024bitRSAprivatekey
....++++++
.......++++++
writingnewprivatekeyto'privado/cakey.pem'
EnterPEMpassphrase:
VerifyingEnterPEMpassphrase:

Youareabouttobeaskedtoenterinformationthatwillbeincorporated
intoyourcertificaterequest.
WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN.
Therearequiteafewfieldsbutyoucanleavesomeblank
Forsomefieldstherewillbeadefaultvalue,
Ifyouenter'.',thefieldwillbeleftblank.

Nombredelaorganizacion[Pato,S.A.]:
Departamentoodivision[]:Sistemas
Correoelectronico[]:info@pato.com
Ciudadodistrito[Leon]:
Estadooprovincia[Guanajuato]:
Codigodelpais(dosletras)[MX]:
Nombrecomun(hostnameoIP)[]:www.pato.com

Antesdeanalizarlasalida,veamoslasopcionesindicadas:
reqnewx509>crearuncertificadonuevoautofirmado

extensionsv3_ca>crearuncertificadorazCA

keyout>nombreydondeguardarlallaveprivada

out>nombredelcertificadorazCA

days3650>elcertificadoservlidopor3650das(10aos)

config>archivodeconfiguracinautilizar

Conrespectoalresultadoproducido,loprimeroqueseindicofueescribiryverificar la contrasea, despus vienen los datos para identificar al


propietariodelcertificadoCA,quecomosepuedeapreciarlospromptsylosdatospordefault provienen del archivo de configuracin. Si no se
especifica la opcin days entonces el certificado ser vlido por solo 30 das. (En el archivo de configuracin es posible inicar la variable
default_days=valor,enlaseccindeCA_default)
Loanteriordaporresultadodosarchivos:
UncertificadorazCA(cacert.pem)
Unallaveprivada(privado/cakey.pem)(Laextensin"pem"esdePrivacyEnhancedMessage)
IMPORTANTE: El archivo cacert.pem es el que se podra mandar a nuestros clientes o usuarios del sistema, y que estos lo instalen
(importendesdeelpuntodevistadelnavegador)ensunavegadorfavorito,deestamaneraquedaramoscomounCAmsvlidopara
elnavegadorycadavezqueelclienteseconecteanuestroservidor,sunavegadoryanoestaramostrandoeldilogodondesepide
aceptarlaconexinsegura.
Veamoscomolucenestosarchivos:

#>morecacert.pem
BEGINCERTIFICATE
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==
ENDCERTIFICATE
#>

Ylallaveprivadatieneelsiguientecontenido:
#>moreprivado/cakey.pem
BEGINRSAPRIVATEKEY
ProcType:4,ENCRYPTED
DEKInfo:DESEDE3CBC,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==
ENDRSAPRIVATEKEY

ADVERTENCIA:Estojamslohagasenlavidareal,elcontenidodeunallaveprivadajamsdebepublicarsenimostrarse,nimandarseanadie,
estaesdepruebayestotalmenteintil.Unallaveprivadaautnticaestumayorsecreto.Podemostambinconsultarinformacinespecficadel
certificadoraz,fechas,aquienperteneceetc.
#>opensslx509incacert.pemnooutdates
notBefore=Jan2702:22:332006GMT
notAfter=Jan2502:22:332016GMT

Enelejemploanteriorseapreciaqueelcertificadosifuegeneradoconunavalidezde10aos,talcomoseindico.Otrosejemplosde consulta
peroseomitelasalida:
#>opensslx509incacert.pemnoouttext
#>opensslx509incacert.pemnooutpurpose

CreandounCertificateSigningRequest(CSR)
(Solicituddefirmadodecertificado)
Enestepunto,yatenemosuncertificadorazquenosvlidacomoCA,clarosinmasautoridadquenuestropropiodominioperopodemoscrear
certificadosnosoloparahttps,sinotambinspop,osimapocrearautentificacinparavpn'satravsdeapliacionescomostunnel.
Lossiguientesprocedimientossonlosqueacontinuacinhayquerealizar:
Crearunallaveprivadayunasolicituddecertificado.
Firmarlasolicitudparageneraruncertificadoautofirmado.
Volveremosentoncesausarelcomandoopensslparalograrloanterior.Casitodoserigualaloanterior.Soloqueenlasolictuddefirmadono
esnecesarioespecificarunacontrasea,aunquesisegenerarunaclaveprivadaparalasolictud.Veamos.
#>opensslreqnewnodesoutpatocert.pemconfig./openssl.cnf
Generatinga1024bitRSAprivatekey
......................................................++++++
.......++++++
writingnewprivatekeyto'key.pem'

Youareabouttobeaskedtoenterinformationthatwillbeincorporated
intoyourcertificaterequest.
WhatyouareabouttoenteriswhatiscalledaDistinguishedNameoraDN.
Therearequiteafewfieldsbutyoucanleavesomeblank
Forsomefieldstherewillbeadefaultvalue,
Ifyouenter'.',thefieldwillbeleftblank.

Nombredelaorganizacion[Pato,S.A.]:
Departamentoodivision[]:Sistemas
Correoelectronico[]:info@pato.com
Ciudadodistrito[Leon]:
Estadooprovincia[Guanajuato]:
Codigodelpais(dosletras)[MX]:
Nombrecomun(hostnameoIP)[]:www.pato.com

Lo ltimo que nos pregunto en la parte DN (distinguished name) es el nombre comn (CN common name), aqui es sumamente importante
indicarlo igual a como esta el certificado raz generado previamente, como se trata de un servidor web, lo correcto es poner su FQDN que es
www.pato.com,nodebeindicarsenipato.comnihttp://www.pato.com
Loanteriorgeneradosarchivos:
patocert.pem>elcertificatesigningrequest(csr)
key.pem>lallaveprivada

Encuantoalasopciones,seusoreqderequestsolicitandouncertificadonuevo, outqueeselnombredelcertificadoquedeseamosfirmar,
configdenuevotomaelarchivodeconfiguracinquecreamos.Laopcin nodesseespecifica para indicar que no deseamos contrasea en la
llaveprivada.
Observemoselcontenidodelasolictud:
#>morepatocert.pem
BEGINCERTIFICATEREQUEST
MIIBwTCCASoCAQAwRjETMBEGA1UEChMKUGF0bywgUy5BLjENMAsGA1UEBxMETGVv
bjETMBEGA1UECBMKR3VhbmFqdWF0bzELMAkGA1UEBhMCTVgwgZ8wDQYJKoZIhvcN
AQEBBQADgY0AMIGJAoGBAMMvo7xg3vmdlf/38yA68uzNq2WYTtkyecuBnUgocOqD
gc0Yl2hrfXN6lHl65kxeRFVdEBYhGgA7JoISivuDTvWwVOIxmH5HOFzZlIPIZ3xT
hHCdWUKipXhcsVCTGV+rbB1F9kkIAMrmtaNH2+Zj261jdB7eX960l1EqQaWt71dJ
AgMBAAGgOzA5BgkqhkiG9w0BCQ4xLDAqMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGVf
A/CDDXl6LQs1MH/XItqJl/8kMA0GCSqGSIb3DQEBBAUAA4GBAJH0sO7bR+dJL67p
xK5oEG9LPA2KcP+W7Vn5edpaLtUs/jYyvhQaCdSBxbMkV42nmt9DGD5p5caTFk3M
5guV9f087K+eYnUGILGQS51tXFcmYramZLETzs7nVfwGnXGsDGyKDkG6VTkx46pz
JrRTJfWBpWpo4FWg/Fi2l4E4PLv8
ENDCERTIFICATEREQUEST

Observaclaramentequesetratadeunasolicituddecertificacin(CertificateRequest),esdecirtodavatienequeserfirmadoporunaautoridad
certificadora CA que somos nosotros mismos. Y antes de hacer este ltimo paso podemos observar el contenido de nuestra solictud en un
formatomaslegibleeinclusoverificarqueestnlosdatoscorrectos.Seomitelasalida,chcaloentupantalla:)
#>opensslreqinpatocert.pemtextverifynoout

Firmandoelcertificado
Porltimofirmaremoslasolicitudquehicimosenelpasoprevio,parafirmarlonecesitaremosindicarlacontraseaqueautentifiquequesomos
laCAyquequeporserlotenemoslaautoridaddeautorizar(firmar)certificados.(Paranuestropropiouso).
#>opensslcaoutcertificadopato.pemconfig./openssl.cnfdays3650\
infilespatocert.pem
Usingconfigurationfrom./openssl.cnf
Enterpassphrasefor./privado/cakey.pem:
Checkthattherequestmatchesthesignature
Signatureok
TheSubject'sDistinguishedNameisasfollows
organizationName:PRINTABLE:'Pato,S.A.'
organizationalUnitName:PRINTABLE:'Sistemas'
localityName:PRINTABLE:'Leon'
stateOrProvinceName:PRINTABLE:'Guanajuato'
countryName:PRINTABLE:'MX'
commonName:PRINTABLE:'www.pato.com'
CertificateistobecertifieduntilJan2600:10:102016GMT(3650days)
Signthecertificate?[y/n]:y
1outof1certificaterequestscertified,commit?[y/n]y
Writeoutdatabasewith1newentries
DataBaseUpdated
#>

Observaqueusamoslaopcincaqueindicaquefirmaremosuncertificadocomoautoridadcertificadora(CA)quesomos,lasalida out ser el


archivo certificadopato.pem usando las opciones config del archivo de configuracin y la solicitud de firmado se especific con la opcin
infilesquetomlosdatosdelarchivopatocert.pemcreadoenelpasoprevio.
Aquisenospidilacontrasea,queeslaqueseindiccuandocreamoscacert.pemquecorrespondeanuestrocertificadorazquenosidentifica
como CA. El certificado ser vlido por 10 aos days y despus se nos pregunt que si queriamos firmarlo, por supuesto que si, y la ltima
preguntaesporsiqueremosguardarestecertificadoyaautofirmadoenlabasededatos,aloquetambincontestamosquesi.
#>moreserial
02

Secompruebaqueyaaumentoelnmerodeseriea02,esdecir,elsiguientecertificadoquefirmemosseresenmero.
#>moreindex.txt
V160126001010Z01unknown/C=MX/ST=Guanajuato/O=Pato,S.A./OU=Sistemas/CN=www.pato.com

Enelarchivoindex.txteltercercampoindica01,queeselnmerodeserieparaelcertificadoreciencreadoymuestratambinloscamposdel
DN.
#>lslcertificados
total4
rwrr1rootroot2597ene2718:1001.pem

En el directorio de certificados se guarda tambin con el correspondiente nmero de serie (01.pem) un archivo que complementa la base de
datosdecertificadosquepodemosircreando.
Yporltimotenemoselcertificadoensi:
#>lslcertificadopato.pem
rwrr1rootroot2597ene2718:10certificadopato.pem

Ypodemosinspeccionarlo:
#>opensslx509incertificadopato.pemnoouttextpurpose

InstalandoelcertificadoylallaveparaApache
TenemosentoncesdoselementosyageneradosquenecesitaremosparaApache:
key.pem>Lallaveprivada
certificadopato.pem>Certificadoautofirmado

Hayalgunasaplicaciones(noApache)querequierenestosdoselementosenunsoloarchivo,comoenelcasodestunnel:
#>catkey.pemcertificadopato.pem>keycertpato.pem

Simplementeseconcatenanlosdosarchivosenuno.PeroestonoesnecesarioparaelcasodelservidorWebApache.Loquehayquehaceres
copiarnuestrosdosarchivosenundirectorio,dehechopodranquedarsedondeestn,eslodemenos,peroporcuestindeordenyorganizacin
vamosacopiarlosa/etc/httpd/confqueenlamayoradedistribuccioneseseldirectoriodeconfiguracindelApache.
NOTA IMPORTANTE: por ningn motivo los copies dentro del directorio raz del servicio de Apache como /var/www/html ya que podras dejar
expuestoslosarchivosatodoelmundoyservulnerados.
#>cpkey.pemcertificadopato.pem/etc/httpd/conf/.

Una vez copiados los archivos, hay que crear un servidor virtual en Apache, esto dentro del archivo de configuracin httpd.conf, en algunas
distribucciones como Fedora y otras dentro de /etc/httpd/conf.d hay un archivo llamado ssl.conf que es donde viene un servidor virtual ya
creado,sepuedetomarcomoplantilla.
<VirtualHost192.168.100.1:443>
ServerNamewww.pato.com
DocumentRoot/var/www/consulta
...(demsdirectivasdelsitio)
SSLEngineon
SSLCertificateFile/etc/httpd/conf/certificadopato.pem
SSLCertificateKeyFile/etc/httpd/conf/key.pem
</VirtualHost<

Tambindebeexistirunalneaqueabreelpuerto443alaescuchadepaquetes.Estafueradelasdirectivasdelservidorvirtual,bscalaysino
estaagrgala,eslasiguiente:
Listen443

ForzosamentedebeserunservidorvirtualbasadoenIP,aquiloindiqueconunaIP(192.168.100.1)deunaredprivadaperoentucasoindicala
IPhomologadaorealdetusitiowebodejatuIPprivadasiesunaIntranet.
ObservatambinqueladirectivaDocumentRootapuntaa/var/www/consultaynoa/var/www/html,estoyolohagoparaqueen/var/www/html
dejesunsimpleindex.htmlconunalneacomolasiguiente:
<metahttpequiv="refresh"content="0;url=https://www.pato.com">

Estoharqueelusuarioensunavegadorespecifiquehttp://www.pato.com,esdecirdirigidoalpuerto80yescachadoporlapginaindex.html
con el cdigo que redirige al mismo servidor pero a https, es decir, puerto 443 y es donde entra en funcin el servidor virtual que a la vez
redirigea/var/www/consultadondeseinicialaapliacindeconsultaoloquesetenga.Perolointeresanteesquenohaynecesidaddeindicarle
alusuarioqueindiquehttpsenelurl.Paraestsalturasyasabesquealusuarioleaparecerundilogopidindolequeacepteelcertificadode
laempresaPato,S.A.

DistribuirelcertificadorazCA
Comoyahabamencionadoantes,siquieresevitarqueatusclientescadavezqueingresenatusitiosalgaelmolestodilogoquepideaceptar

el certificado, la nica solucin es que distribuyas el archivo cacert.pem, recuerda que este archivo es el que te identifica como una autoridad
certificadora.Lopuedesponeradescargadesdetupropiositio,omandarloporcorreo,comosea.Cuandoelclientelotengaensuequipodeber
importarlodentrodelbrowseronavegador.Todoslosnavegadoresensuspreferenciasoherramientastienenunaopcindecertificadosy desde
ahexisteunbotnimportarpararealizaresto.
Puesesoestodo,sitodofuncionbien,tienesahoraunsitioconencriptacindeextremoaextremoytodoeltrficoviajaseguro,hacindolesla
vida mas difcil a los hackers de sombrero negro (black hat) que abundan por ah. Suerte y por favor contctame si tienes problemas, en la
medidadeloposibleteayudar.

Referencias
Buenapartedeestagualatomdelossiguientessitios:
http://www.eclectica.ca/howto/sslcerthowto.php
http://www.technoids.org/openssl.cnf.html
http://www.squarebox.co.uk/cgisquarebox/manServer/usr/share/man/man1/ca.1ssl
http://www.openssl.org
Ytambindelasmismaspginasdelmanual:
#>manopenssl
#>manreq
#>manca
#>manx509

L i n u xT otal . c om. mx In f or mac i n y s er vi c i os en L i n u x y Op en Sou r c e i n f o@ l i n u xtotal . c om. mx s er g i o. g on z al ez . d u r an @ g mai l . c om