<html><head></head><body>Muy interesante Luis, y con explicación para no iniciados... que más se puede pedir! <br>
<br>
Muchas gracias por la info :)<br><br><div class="gmail_quote">El 18 de febrero de 2016 14:35:40 CET, "Luis González Fernández" <luisgf@luisgf.es> escribió:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre class="k9mail">Hola a todos:<br /><br />Con la migración de los certificados que opero hacia let's encrypt han aparecido una serie de inconvenientes que degradan la configuración SSL y por consiguiente la seguridad de la transmisión.<br /><br />Todos mis sistemas emitian las cabeceras necesarias para soportar HSTS (HTTP Strict Transport Security) y HPKP (Public Key Pinning Extension for HTTP).<br /><br />Para los neófitos la siguiente explicación rápida:<br />HSTS: Es un mecanismo por el cual el servidor web le indica a un navegador que las peticiones que realicen a un determinado sitio, deben ir siempre a través de HTTPS.<br /><br />HPKP: Es un mecanismo que informa al navegador de los certificados autorizados que puede ver a la hora de conectarse a un sitio. Si vé otros certificados, podriamos ser victimas de un ataque tipo Man-in-the-middle, asi que impedirá tal conexion.<br /><br /><br />Con los certificados tradicionales, esto no suponia demasiado problema ya que
su duración es elevada (1 o 2 años), lo cual me permitia generar pins con una duración un poco inferior a la caducidad de los certificados y darme un margn de maniobra amplio para renovarlos y generar los nuevos pins. <br /><br />El problema surje con let's encrypt (servicio fantástico!!!) ya que la duración de sus certificados actualmente es de 3 meses y en un futuro podría incluso reducirse.<br /><br />Asi pues, para lidiar con la problematica he desarrollado un pequeño programa en Perl, (vaaaale es broma), en Python 3.5 que genera los pins HPKP de forma automática. El siguiente programa se ejecutará justo despues de la renovación del certificado y generará un PIN con una duración no superior a la del certificado con respecto a la fecha actual. Esto impedirá crear un pin que tenga validez una vez el certificado haya expirado.<br /><br />La idea detrás de esto es que este programa se ejecute como hook o plugin del cliente let's encrypt, no obstante y mientras esté en
periodo de pruebas, vivirá como un programa independiente.<br /><br /><br />Configuración de Apache:<br /><IfModule mpm_itk_module><br />        AssignUserID pyvigo pyvigo<br /></IfModule><br /><br /><IfModule mod_ssl.c><br />    SSLUseStapling on<br />    SSLStaplingCache shmcb:/tmp/ocsp_stapling(512000)<br /><br />    <VirtualHost *:443><br />        ServerName <a href="http://www.python-vigo.es">www.python-vigo.es</a><br />        ServerAlias <a href="http://python-vigo.es">python-vigo.es</a><br />        DocumentRoot /datos/webs/python-vigo<br />        ErrorLog ${APACHE_LOG_DIR}/www.python-vigo.es_error.log<br />        CustomLog ${APACHE_LOG_DIR}/www.python-vigo.es_access.log combined<br /><br />        # Configuracion SSL<br />        SSLEngine on<br />        SSLCompression Off<br />        SSLProtocol all -SSLv2 -SSLv3<br />        SSLHonorCipherOrder On<br />        SSLCipherSuite
EECDH+AES:ECDHE+ECDSA:ECDHE+RSA:ECDHE+AES:DHE+RSA:ECDH+AES:DHE+AES:EDH+AES:-SHA1:DHE+AES:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5<br />        SSLCertificateFile /etc/letsencrypt/live/<a href="http://luisgf.es">luisgf.es</a>-0001/cert.pem<br />        SSLCertificateKeyFile /etc/letsencrypt/live/<a href="http://luisgf.es">luisgf.es</a>-0001/privkey.pem<br />        SSLCertificateChainFile /etc/letsencrypt/live/<a href="http://luisgf.es">luisgf.es</a>-0001/chain.pem<br /><br />        # Activamos HSTS<br />        Header always set Strict-Transport-Security "max-age=16070400; includeSubDomains"<br />        # Activamos HPKP leyendo la directiva generada por hpkp-python<br />        Include /etc/apache2/conf-available/hpkp-pin_<a href="http://python-vigo.es">python-vigo.es</a>.conf<br /><br />        # <a href="http://stackoverflow.com/questions/17092154/x-frame-options-on-apache">http://stackoverflow.com/questions/17092154/x-frame-options-on-apache</a><br />    
   Header set X-Frame-Options SAMEORIGIN<br />        # <a href="http://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection">http://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection</a><br />        Header set X-XSS-Protection "1; mode=block"<br />    </VirtualHost><br /></IfModule><br /><br />Genero el pin con:<br />./<a href="http://hpkp.py">hpkp.py</a> -f /etc/letsencrypt/live/<a href="http://www.python-vigo.es/cert.pem">www.python-vigo.es/cert.pem</a> -u <a href="http://www.luisgf.es/hpkp_report">http://www.luisgf.es/hpkp_report</a> -d > /etc/apache2/conf-available/hpkp-pin_<a href="http://python-vigo.es">python-vigo.es</a>.conf<br /><br />Ya sólo queda reiniciar el apache para que tenga en cuenta los cambios.<br /><br /><br />Más información:<br />HPKP-Python: <a href="https://github.com/luisgf/hpkp-python">https://github.com/luisgf/hpkp-python</a><br />HSTS: <a
href="http://tools.ietf.org/html/rfc6797">http://tools.ietf.org/html/rfc6797</a><br />HPKP: <a href="https://tools.ietf.org/html/rfc7469">https://tools.ietf.org/html/rfc7469</a><br /><br /><br />Un Saludo, <br /><br />--<br />Luis González Fernández<br /><a href="https://www.luisgf.es">https://www.luisgf.es</a><br />PGP ID: C918B80F (DD6F BFC1 FC14 4C81 34F8 EA1E 6BCB C27F C918 B80F)<br />Twitter: @luisgf_2001 / Jabber: luisgf@mijabber.es<br /><br /><hr /><br />Asociación Python España: <a href="http://www.es.python.org">http://www.es.python.org</a>/<br />Python Vigo: <a href="http://www.python-vigo.es">http://www.python-vigo.es</a>/<br />Vigo mailing list<br />Vigo@lists.es.python.org<br /><a href="https://lists.es.python.org/listinfo/vigo">https://lists.es.python.org/listinfo/vigo</a></pre></blockquote></div><br>
-- <br>
Enviado desde el teléfono disculpa la brevedad.</body></html>