Escriu per cercar…

Transport Layer Security

TLS proporciona confidencialitat i autenticitat entre dos aplicacions a nivell de socket

Seguretat de la capa de transport (TLS)

Transport Security Layer (TLS) és un protocol:

  • Xifrar una connexió de xarxa durant el trànsit mitjançant criptografia simètrica (AES o ChaCha20)

  • Verificar l’autenticitat del servidor mitjançant criptografia asimètrica (RSA o EC) mijançant l’ús de certificats, documents digitals firmats per una autoritat de certificació que garantitza que el servidor és qui diu que és.

Encara que la majoria de connexions TLS són HTTPS, qualsevol aplicació compatible amb TLS pot aplicar TLS a qualsevol connexió de xarxa TCP o UDP.

Història

El primer navegador web el va crear Netscape Corporation.

L’any 1994 van crear un protocol de seguretat de la capa de transport, conegut com Secure Socket Layer, per establir una conexió segura entre el navegador Netscape i els servidors web.

Com sol ser habitual quan una és dissenya un pròtocol nou, aquest tenia bastants defectes, i Netscape va llançara ràpidament la versió 2 de SSL el 1995, i la versió ·el 1996.

De totes maneres el disseny criptogràfic bàsic de SSL era defectuós i molt difícil de solucionar.

L’any 1999 l’IETF va desenvolupar un protocol a partir de SSLv3, que va anomenar TLD per motius legals.

Com és d’esperar van anar apareixent noves versions de TLS: el 2006 TLSv1.1, el 2008 TLSv1.2 i el 2018 TLSv1.3.

I tot això perquè interessa saber-ho?

Perquè quan busques per internet sapigues que quan es parla de SSL o TLS estem parlant del mateix.

Durant molt de temps tothom ha fet servir el nom SSL, i per això l’eina que farem servir i que vas fer servir a criptografia s’anomena OpenSSL encara que fem connexions TLS.

No obstant, cada cop més el nom que es fa servir és TLS, perquè avui en dia només es considera segur la versió 3 de TLS.

Desde el 2021, la NSA i diversos organismes de seguretat d’altres països recomanen de manera molt ferma que ja no es faci servir TLSv2, perquè es considera insegur.

Ara el nom modern que es fa servis és TLS.

Per què TLS?

TLS no és l’únic protocol segur a Internet: tenim IPSec, {% link “/network/wireguard/” %}, OpenVPN i d’altres que ja no es fan servir.

Llavors que té d’especial TLS perqué sigui el protocol de connexió segura més utilitzat a Internet? TLS és un protocol genèric que es va dissenyar per permetre encriptar una connexió entre client i servidor, i que es pogués integrar amb una altre protocol de manera senzilla.

Netscape tenia que crear un protocol que fes que HTTP fos segur, sense tocar el protocol HTTP.

D’aquesta manera un client pot comprobar si el servidor fa servir TLS, si és així encriptar mitjançant TLS, i si no és així seguir amb el protocol sense encriptar si ho considera adient.

A més, d’aquesta manera el protocol TLS pot seguir evolucionat de manera independent del protocol que encripta, ja sigui HTTP, FTP, etc.

Per això, quan parlem de HTTPS potser estem parlant de HTTP sobre SSL (gens segur) o HTTP sobre TLS (més segur, i molt segur depenent de la versió de TLS)

openssl

OpenSSL (i forks com LibreSSL) són llibreries de propòsit general per a tot el que te a veure amb la criptografia i els aspectes relacionats.

Amb openssl pots crear un parell de claus assimètriques, signar fitxers digitalment, llegir fitxers ASN.1 i X.509, generar números aleatoris i verificar certificats TLS.

La majoria d’administradors de sistema no entenen les bases matemàtiques de la criptografia perquè és difícil d’entendre, molt més que les equacions diferencial multivariable.

Però per portar un patinet elèctric no cal conèixer electromècanica, només com fer funcionar el patinet.

L’únic que has d’entendre és que la criptografia és molt complexa, i openssl ha heretat aquesta complexitat i el tenir que ser compatible amb tota la seva història.

De totes maneres, com que avui en dia l’únic “segur” és TLSv1.3, hi ha llibreries noves que només implementes aquest protocol.

Tal com pots apendre a {% link “/security/cryptography/” %} una ordre openssl té aquesta sintaxis: `

shell
$ openssl subcommand flags

El paràmetre subcommand determina amb quin conjunt de funcions criptogràfiques estem treballant.

Per exemple, la subordre genrsap genera un parell de claus assimètriques RSA, mentres que la subordre x509` té a veure amb els X.509.

Moltes subordres fan servir els mateixos flags per funcions semblants: per exepmple -in i -out per input i output, -text per format textual.

Tingues en compte que openssl no permet ajuntar flags com pots fer per exemple amb tar, com quan vols comprimir un conjunt de fitxers amb l’ordre tar -czvfp.

Per veure quina versió d’OpenSSL tens:

shell
$ openssl version

OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

La versió final 3.0 d’OpenSSL es va publicar a finals del 2021: OpenSSL 3.0 Has Been Released!.

Per tenir més informació de com s’ha empaquetat i configurat la distribució concreta de openssl que estas fen servir:

shell
$ openssl version -a

OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
built on: Fri Aug  9 02:33:21 2024 UTC
platform: debian-amd64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -fzero-call-used-regs=used-gpr -DOPENSSL_TLS_SECURITY_LEVEL=2 -Wa,--noexecstack -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/build/openssl-uVxJzP/openssl-3.0.13=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -fdebug-prefix-map=/build/openssl-uVxJzP/openssl-3.0.13=/usr/src/openssl-3.0.13-0ubuntu3.3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=3
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-3"
MODULESDIR: "/usr/lib/x86_64-linux-gnu/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32235f8bffff:0x184007a4219c27ab

Moltes ordres estan dissenyades per funcionar amb altres ordres openssl mijantçant l’ús de pipes ( | ):

shell
$ openssl s_client -showcerts -connect www.google.es:443 < /dev/null | openssl x509 -text -noout

depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1
verify return:1
depth=1 C = US, O = Google Trust Services LLC, CN = GTS CA 1C3
verify return:1
depth=0 CN = *.google.es
verify return:1
DONE
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            28:c3:ed:e3:65:48:2e:0a:0a:85:3d:e5:6b:53:0d:35
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = Google Trust Services LLC, CN = GTS CA 1C3
...

Estàs llegint una vista prèvia.

Inicia sessió per llegir l'article complet. Qualsevol compte obre 4 articles gratuïts al mes; l'alumnat i el professorat llegeixen les pàgines del seu curs sense límit.

Inicia sessió