bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
apache_dnie

Apache amb DNIe

Configurar el servidor web (en aquest cas Apache) per a que validi certificats de confiança (en aquest cas del DNIe) és una tasca important en les mesures de seguretat i autenticació de l'administració pública, i pot esdevenir-ho també en un futur per a la gestió privada. L'administració pública necessita uns estàndards molt alts de seguretat, sobretot en el què respecta a autenticació i validació de la identitat de l'usuari.

En realitat el que realitzarem serà una autenticació mútua entre servidor i client, essent necessaris tant a l'un com a l'altre la configuració dels certificats de la CA (Certificate Authority, pel nostre cas el «AC RAIZ DNIE 2») i, per part del client, el certificat signat per aquesta mateixa CA (present dins del DNIe).

En aquesta documentació de INTECO disposem d'una guia per configurar Apache amb els certificats necessaris per al DNIe, tot i que caldran algunes modificacions i actualitzacions explicades a continuació:

  1. dia_2_taller_autenticacio_n_web_con_dnie.pdf descarrega't el PDF de bytes.cat.

Passes prèvies

Client

DNIe

Primer de tot caldrà que tingueu el DNIe amb els certificats vàlids. Per solventar-ho cal que aneu a una Commissaria de la Policía Nacional i us assegureu que renoveu els certificats i coneixeu el vostre PIN. És molt important tenir el PIN clar perquè les smart cards es bloquegen als 3 errors d'accés, pel què caldrà tornar a la Comissaria per renovar els certificats.

També necessitareu un lector de targetes que funcioni amb el DNIe. Aquest lector de targetes de Zoowetek, per exemple, sabem que és compatible amb el DNIe tant per a GNU/Linux com per a Windows i Mac.

Màquina client i navegador

Caldrà que tinguem la màquina client i el navegador configurats adientment per poder utilitzar el DNIe:

Bàsicament la instal·lació té aquestes passes:

  1. Instal·lar els drivers necessaris per accedir al lector de targetes. Normalment es fa d'aquesta manera i hauria de mostrar instruccions de com procedir amb les següents passes per completar la instal·lació:
    sudo dpkg -i arxiu.deb
  2. Configurar la llibreria PKCS#11 al Firefox que permeti introduir el PIN a l'accedir al DNIe. Normalment seria (revisar si coincideix amb les instruccions):
    Firefox > Preferencias > Privacidad y Seguridad > Dispositivos > Cargar
    /usr/lib/libpkcs11-dnie.so
  3. Instal·lar el certificat arrel del DNIe al navegador local per tal que doni per bo l'accés al certificat del DNIe (no ve instal·lat per defecte):
    Firefox > Preferencias > Privacidad y Seguridad > Ver certificados > Importar
    /usr/share/libpkcs11-dnie/ac_raiz_dnie.crt
  4. Comprova que tens instal·lat el certificat local del DNI anant als certificats del browser comprovant que teniu instal·lat el certificat de la «DIRECCION GENERAL DE LA POLICIA → AC RAIZ DNIE»

Per a Windows l'executable realitza aquestes passes més o menys automàticament si no hi ha cap error. Als altres SO caldrà assegurar-se que les 3 passes estan fetes correctament.

Per acabar de comprovar que el client funciona correctament, proveu d'accedir a:

Servidor

La pràctica es pot muntar perfectament en la màquina local. Tot i això, perquè sigui operativa de veritat ha d'estar en un servidor públic i amb certificats vàlids.

Així, recomanem aquestes passes:

  1. Engegar una màquina al núvol (preferentment amb Ubuntu 20.04) accessible, al menys, als ports 80 i 443.
  2. Assignar-li una IP fixa (elastic IP en cas de AWS).
  3. Apuntar-hi un domini propi.
  4. Instal·lar Apache2 i PHP.
  5. Obrir els ports 80 i 443 (en cas que tingui firewall del proveidor o del propi SO com UFW).
  6. Activar mod_ssl d'Apache.
  7. Configurar certificats HTTPS correctament. La manera més senzilla és utilitzar Certbot de Let's Encrypt.

Si arribes aquí, ja tenim el server preparat per activar autenticació via DNIe al teu site.

Configurant Apache

Aquí s'explica força bé la doble autenticació mútua entre servidor i client.

Necessitem descarregar els certificats arrel de l'Autoritat de Certificació (AC) del DNIe i configurar l'accés amb la directiva SSLCACertificateFile.

Seguint la documentació de INTECO DNIe hauria de quedar-nos una configuració base com aquesta (ULL, perquè no funciona, haurem de fer canvis):

        # Configuracio DNIe
        <Directory /var/www/sitednie/zona-privada>
                # Certificado raiz DNIe
                SSLCACertificateFile "/etc/ssl/certs/AC RAIZ DNIE 2.crt“
                # El cliente debe autenticarse obligatoriamente con el certificado
                SSLVerifyClient require
                # Nivel máximo de profundidad (según infraestructura actual, 2)
                SSLVerifyDepth  2
                # Exportar contenido de certificados y certificados (para poder usarlos con PHP)
                SSLOptions +StdEnvVars +ExportCertData
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

Canvis que cal fer:

  1. Treure la SSLCACertificateFile del nivell de Directory (cal posar-ho a nivell de VirtualHost) ja que Apache ara no admet diferents certificats per directori (només un per VirtualHost).
  2. Canviar el Directory per Location , tal i com recomana fer-ho Apache2. Per exemple, creeu una zona reservada a Location /zona.
  3. Pujar SSLOptions i Options també a nivell de VirtualHost (tot i que això no és imprescindible).

Troubleshooting

Un error que ens pot sorgir és que ens doni un 403 FORBIDDEN «Cannot perform Post-Handshake Authentication.» En aquest cas és per una incompatibilitat amb la implementació del protocol de seguretat amb el navegador. Per solventar-lo, només cal afegir aquesta directiva per forçar a fer servir el protocol TLSv1.2:

SSLProtocol -all +TLSv1.2

Accedint a les dades del certificat amb PHP

A les variables supraglobals trobaràs les dades que el client transmet al servidor, en particular les de $_SERVER que comencen per SSL_…, com per exemple $_SERVER['SSL_CLIENT_S_DN']. Aquestes variables les aconseguim capturar dins el nostre llenguatge de programació (en aquest cas PHP) mitjançant la directiva d'Apache:

SSLOptions +StdEnvVars +ExportCertData

Si no està activada aqueta directiva no podrem veure les dades del client.

A aquesta web hi ha alguns exemples de com escanejar totes les variables supragrobals.

Les variables que farem servir més tard son:

  1. $_SERVER['SSL_CLIENT_S_DN'] : les dades del DNIe (nom, cognoms, número del DNI, etc.). Caldrà fer algun parse extra per aïllar les variables adientment (per exemple, extreure el número del DNI).
  2. $_SERVER['SSL_CLIENT_CERT_CHAIN_0'] : issuer certificate
  3. $_SERVER['SSL_CLIENT_CERT'] : client certificate


Comprovació de revocació OCSP

Amb la comprovació OCSP el què fem és consultar la base de dades de la pròpia CA (autoritat certificadora, la seu del DNIe) per comprovar que el certificat que ens arriba no hagi estat revocat. És una important passa de seguretat.

El resultat de la consulta OCSP hauria de ser: good, revoked o unknown.

En aquestes pàgines tenim exemples de com fer una query OCSP (a ocsp.dnie.es) per conèixer l'estat del certificat utilitzat, ja que podria estar revocat:

  1. Wiki locolandia (còpia a archive.org)

La 1a funciona, però cal corregir un petit error en la línia de la query que es fa mitjançant OCSP. Investiga què és el què pot fallar (la manera més fàcil és activant els missatges de error d'Apache a php.ini i mostrant les variables intermitges. Mostra també la query openssl per veure què és el que fem executar a la shell i excecuta-la manualment en una shell a part per esbrinar quin problema ens estava succeint.


Mes

<IfModule mod_ssl.c>

  <VirtualHost _default_:443>
      ServerAdmin [email protected]
      ServerName localhost
      DocumentRoot /var/www/html
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
      SSLEngine on
      SSLCertificateFile  /etc/ssl/certs/ssl-cert-snakeoil.pem
      SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
      # Configuracio DNIe
      SSLCipherSuite HIGH:MEDIUM:-SSLv2
      SSLProtocol -all +TLSv1.2
      # Certificado raiz DNIe
      SSLCACertificateFile /etc/ssl/certs/AC_RAIZ_DNIE_2.pem
      LogLevel debug
      # Exportar contenido de certificados (para poder usarlos con PHP)
      SSLOptions +StdEnvVars +ExportCertData
      Options Indexes FollowSymLinks MultiViews
      <Location />
          SSLVerifyClient require
          #SSLVerifyClient optional_no_ca
          # Nivel máximo de profundidad (según infraestructura actual, 2)
          SSLVerifyDepth  5
          AllowOverride None
          Order allow,deny
          allow from all
      </Location>
      <FilesMatch "\.(cgi|shtml|phtml|php)$">
              SSLOptions +StdEnvVars
      </FilesMatch>
      <Directory /usr/lib/cgi-bin>
              SSLOptions +StdEnvVars
      </Directory>
  </VirtualHost>

</IfModule>


apache_dnie.txt · Darrera modificació: 2022/01/24 19:37 per enrique_mieza_sanchez