En ocasiones hemos visto que algunas paginas como la de los Bancos por ejemplo muestran un candado en la parte izquierda del navegador, y la direccion de la url comienza con "https://", que significa todo esto?. Lo que este simbolo (candado) representa es que la pagina en la cual estas ingresando es segura. 

Y como funciona esto?

Cuando tu te conectas con tu navegador a una pagina segura, se muestra este candado del lado izquierdo de la URL (cuando compraste un certificado creado por una dependencia certificadora) esto significa que el trafico entre tu computadora y la pagina web se encuentra cifrada con un algoritmo para asegurarte que ninguna otra persona pueda interceptar lo que se esta enviando atravez de ese canal en texto plano. Cuando estas usando este "tunel" aun es posible interceptar el trafico, pero este no sera legible para quien lo intercepto. 

Tener un certificado no significa que estas 100% seguro en la comunicacion, hay tecnicas para burlar este tipo de seguridad, la mayoria de estas tecnicas es comprometer el equipo del usuario o hacerle una jugarreta al usuario. otra forma es tratar de desencriptar la comunicacion lo cual toma bastante tiempo para hacerlo con cifrados viejos que aun se encuentran en uso en algunos sitios ya que los nuevos algoritmos son muy dificiles de desencriptar.

si tu quieres un certificado puedes buscar en lugares como digicert que te pueden vender estos certificados, o simplemente tu puedes crear el tuyo. El inconveniente de hacer el tuyo es que como no eres una dependencia certificadora, los navegadores no pondran el candado verde, en vez de esto aparecera una leyenda "Not Secure" en el lugar donde va el candado y se tachara la parte de la url que comienza con "https". Esto no quiere decir que tu certificado no funcionara o es menos seguro que cualquier otro que te puedas comprar. 

Como mencione anteriormente, te aparecera de esta manera simplemente por que no eres una "empresa certificadora" y los novegadores no cuentan con un certificado autorizado. Estos certificados que vamos a crear los puedes usar en comunicaciones internas entre servidores o en tu sitio web como linuxenespanol.com que es lo que yo tengo en este sitio.

 

Estos son los pasos a seguir para crear tu propio certificado:

Executa este comando:

openssl req -x509 -nodes -days 365 -sha512 -newkey rsa:2048 -keyout cacert.key -out cacert.crt -subj "/C=MX/ST=GT/L=Guanajuato/O=Linux en Espanol/CN=$(hostname)"

 

Te explico los parametros que tendras que cambiar del comando anterior

  • -days , este es para asignar el numero de dias que este certificado sera valido, en el ejemplo este certificado expirara en 365 dias
  • -keyout , este es el nombre que tendra el certificado llave (key) privado
  • -out , este es el nombre del certificado publico (crt)
  • -subj , estos son los parametros que necesita conocer openssl para crear el certificado especifico para tu pagina web
    • C= este es el Pais
    • ST= es el estado
    • L= es la locacion
    • O= este mostrara la en la descripcion para que sitio es
    • CN= este debe tener el mismo nombre que el hostname de el servidor en el cual el certificado sera utilizado.

Una vez que ejecutes el comando con los parametros que te funcionen a ti, el comando generara los certificados segun los datos que proporcionaste, por ejemplo:

Este es el contenido del cacert.key:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6SoT/z9J25eWO
l/7oEjWP8GieZwz98GyWsf2M3N0oUvYoIq5AWXcmdQbL1eg3YNgvYOeVDcJW/duE
vVlU2Caa+t4bqTlqfGaeUu0wcqLn6YtM4WX/seLRPEgZsM5f23n5yD/eGzVUWvaN
ly+WwKd3zS1b1NK5pXG5WZo015W88Qse+NAObo9vyTvKkxtt1t18AZlgY2IlVOK1
+1x+HxQSgb++vq6iEcqCSY+SxCJmS0Bg3MU2VEOyzVR7lUTCR0x1IAqQf2INe+ed
mSmaSln9YxzpmEuF/2yAb5WXNOeNc8lci/RegtAsyy/+knFYniFA8hXyMIpki5vf
zxYqdxGHAgMBAAECggEAAPX1baRSv447+tpJ1ESTxiRFRdveM0kUJkrQtfNFqLmU
z2wuXeKYPLiJym9V/UMgmk3zo88oW25/vVWEqm1a9Z2pm5bp1uTBWruuwXs13+BS
eZkH/6OZOd8HuCozRkdJf8JKogid48t8TgqjkjF4K6QBQeH9HDwANCaEJxWdjhXl
6N9//9zBQ4AKtCmB9R90XIno+gyo0Y1HTxwt7DF+LNInHCNLepv3IHXzaM3R5Cua
Z5mRwGvzzE2X4drKPYhFJlPycGewPaDTnVZuDRuuBrkRLDCjzNwVLkN6NZJKGlGN
O0omtwKAmIBdy6OHPjLZydD3MC5/DXCpL0bYZE6h4QKBgQDpOvNJhZcDUgXrWiuB
VAVKyCR8TXSydVw/pJMvXU4uCOb5SwWdsJcZefeeZiC5/0R5s0B+FziYstrQaG6+
Oi3KBSalpWoNQUjsFFc2pcLf+QxcxVwI0fSZLYh+jujMS4CpLt/KHXQuDNZGHLkk
mBOCh/8ips/ptFYJz7/w/9x6iQKBgQDMem7mcxBBsr0ZwIdSbZPbavKwCh6AkZoR
WoElRZ0d2OIF2mwaGsywtbSAggzqrprKT7aFPB0ELdoji9Mj03Phaplhnz9Bn3Y0
+VGPVCo3D6EN9Ws5/lsUMpf2bWkiXv4R6HWhCx4UfSUpf+ZD3sQxJvU4GySdtPiB
cn99qpXnjwKBgQDXkXMYe28u1HtAIyGe8afKjN6cPYMlBzByaozX9Ge0SOojdOIF
9BhUpdTnBQIup/AEhFeRs6jOClIQ2tWw4Vk9JjGoXRF+mt7pxYsuqVtLZIe2n3wH
cvefNOS6BSDK4uZSeU7DIyIlBhxuxVGiryUpOsXoo0H8goAbpXeFKxf/8QKBgEMT
HnHl6L1EXpel+j3lyAy/5mAs0ZinKnzqzVZmoYV68Zmt7qwZgm+tC0rkXkxVfl1D
DMJj17jZOadTZK1p3adiCnJlhKCIKIR0DHcRys9JBzHHAaeCcmoLtqGVfllSA9Ho
CT4MoY9jBd+5HtXAq2bcOrBu5vH8vU/pOT0FyiqtAoGAPSQ2J0MymthqVBFr9W95
FIHmZT5BIlbXFgdVpZfWWLfamHrq0RJEwwEnDaOmF9kxBs/rpYTLkNKwvfZHhLPe
qqhBGIJ2n4O7xhQK5zIG7py1SJwVd1YdVo3KmajwHWGbthIsheYf94YFmUihYZcE
v6lGEDv1qh9wY3oEai3G+9M=
-----END PRIVATE KEY-----

 

Y este es el contenido del cacert.cert

-----BEGIN CERTIFICATE-----
MIIDQjCCAioCCQCZsxPRAqWLETANBgkqhkiG9w0BAQ0FADBjMQswCQYDVQQGEwJN
WDELMAkGA1UECAwCR1QxEzARBgNVBAcMCkd1YW5hanVhdG8xGTAXBgNVBAoMEExp
bnV4IGVuIEVzcGFub2wxFzAVBgNVBAMMDk1YMDM1NkhRLmxvY2FsMB4XDTE4MTEw
ODIzMTkyOFoXDTE5MTEwODIzMTkyOFowYzELMAkGA1UEBhMCTVgxCzAJBgNVBAgM
AkdUMRMwEQYDVQQHDApHdWFuYWp1YXRvMRkwFwYDVQQKDBBMaW51eCBlbiBFc3Bh
bm9sMRcwFQYDVQQDDA5NWDAzNTZIUS5sb2NhbDCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBALpKhP/P0nbl5Y6X/ugSNY/waJ5nDP3wbJax/Yzc3ShS9igi
rkBZdyZ1BsvV6Ddg2C9g55UNwlb924S9WVTYJpr63hupOWp8Zp5S7TByoufpi0zh
Zf+x4tE8SBmwzl/befnIP94bNVRa9o2XL5bAp3fNLVvU0rmlcblZmjTXlbzxCx74
0A5uj2/JO8qTG23W3XwBmWBjYiVU4rX7XH4fFBKBv76+rqIRyoJJj5LEImZLQGDc
xTZUQ7LNVHuVRMJHTHUgCpB/Yg17552ZKZpKWf1jHOmYS4X/bIBvlZc0541zyVyL
9F6C0CzLL/6ScVieIUDyFfIwimSLm9/PFip3EYcCAwEAATANBgkqhkiG9w0BAQ0F
AAOCAQEAMGu+Xbc5XfqqLhkSzHkeOkKNEOgUsEkU7/8kDkOzH02//h1t2BS57k5v
B77neI4XED6sjB9xOzSdssR/Uy8S6qNneX7Nxq0fHgJMUqT22x+/hrxBGdUag3Vc
ELw7yYJAoZ+a4sKB99sahp9f2Z/yfQlQZDA/volYsnXQb/C8mSvllzNnrzVhsYs3
LSWxLFZvX2Hi4PMbbdmja9MwrX+XKrCQWEJSTwRmU2AHoUiLkTeXVB0gkNpoT3/7
8XZiCxyZcuHjmqW2COKGhP3uXLMFCtQX2h2uxOc5W7V08ePs5K4852Z7L+/TuugL
GMol2zerQ4h15bktt0uR3gkfdITOsg==
-----END CERTIFICATE-----

 

como puedes ver el cacert.key y cacert.crt son similares con la diferencia de la primera y la ultima linea, el certificado cacert.key solo lo debe de contener el servidor web que es el que encriptara la conexion con el cliente, es importante mantener este certificado seguro en todo momento con los permisos de 400 y owner como root para mejor seguridad, si alguien logra obtener tu certificado, entonces esa persona, bot o lo que sea que lo tiene podra desencriptar las comunicaciones entre tu servidor y el cliente.

En otro tutorial les mostrare como crear un servidor web muy basico y como utlilizar los certificados que creamos para encriptar la comunicacion.