<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>El hilo del laberinto (Publicaciones sobre X.509)</title><link>https://blog.jcea.es/</link><description></description><atom:link href="https://blog.jcea.es/categories/x509.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><lastBuildDate>Sun, 02 Aug 2026 16:41:37 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Generación en Python de certificados X.509 con "Subject Alternative Name" y direcciones IP en el SAN</title><link>https://blog.jcea.es/posts/20250408-x509_Subject_Alternative_Name_IPs.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;En &lt;a class="reference external" href="https://blog.jcea.es/posts/20180917-x509_Subject_Alternative_Name.html"&gt;Generación en Python de certificados X.509 con "Subject Alternative Name" y una entidad de certificación privada (o autofirmados)&lt;/a&gt; muestro un
programa en &lt;a class="reference external" href="https://www.python.org/"&gt;Python&lt;/a&gt; para generar certificados &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; con &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Subject_Alternative_Name"&gt;Subject
Alternative Name&lt;/a&gt; sin depender de &lt;a class="reference external" href="https://www.openssl.org/"&gt;OpenSSL&lt;/a&gt; y su sintaxis y
configuración oscuras. Prefiero hacerlo con un programa propio.&lt;/p&gt;
&lt;p&gt;Eso fue en 2018. En los años transcurrido he ido haciendo cambios:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;Permitir que el campo &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Subject_Alternative_Name"&gt;SAN&lt;/a&gt; incluya &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Direcci%C3%B3n_IP"&gt;direcciones IP&lt;/a&gt;, no solo
nombres &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Sistema_de_nombres_de_dominio"&gt;DNS&lt;/a&gt;. Esto es útil con infraestructura interna.&lt;/li&gt;
&lt;li&gt;La &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de certificación&lt;/a&gt; &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; se especifica de forma
explícita. Si utilizas constantemente una &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de
certificación&lt;/a&gt; privada, puedes usar un &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Wrapper_function"&gt;wrapper&lt;/a&gt; &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Shell_de_Unix"&gt;Shell&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20250408-x509_Subject_Alternative_Name_IPs.html"&gt;Leer más…&lt;/a&gt; (quedan 4 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Código Fuente</category><category>OpenSSL</category><category>Python</category><category>TLS</category><category>X.509</category><guid>https://blog.jcea.es/posts/20250408-x509_Subject_Alternative_Name_IPs.html</guid><pubDate>Tue, 08 Apr 2025 17:30:00 GMT</pubDate></item><item><title>Refrescar el certificado X.509 de una entidad de certificación para OpenVPN, manteniendo sus firmas previas como válidas</title><link>https://blog.jcea.es/posts/20240521-refrescar_CA.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Tengo un servicio &lt;a class="reference external" href="https://es.wikipedia.org/wiki/OpenVPN"&gt;OpenVPN&lt;/a&gt; privado desde hace diez años. Todos los
certificados &lt;a class="reference external" href="https://es.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; de acceso y el certificado &lt;a class="reference external" href="https://es.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; del servidor
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/OpenVPN"&gt;OpenVPN&lt;/a&gt; están firmados por una &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de certificación&lt;/a&gt;
privada.&lt;/p&gt;
&lt;p&gt;El problema es que esa &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de certificación&lt;/a&gt; tiene una
validez de diez años, caducando en unos meses. En ese momento
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/OpenVPN"&gt;OpenVPN&lt;/a&gt; dejará de funcionar si no hago nada.&lt;/p&gt;
&lt;p&gt;La solución evidente es crear un nuevo certificado para la
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de certificación&lt;/a&gt; privada, con una validez de otros
diez años (por ejemplo). El problema es que eso requiere emitir
nuevos certificados &lt;a class="reference external" href="https://es.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; para el servidor &lt;a class="reference external" href="https://es.wikipedia.org/wiki/OpenVPN"&gt;OpenVPN&lt;/a&gt; y para todos
los clientes. Todo el cambio tiene que estar coordinado, porque
los certificados &lt;a class="reference external" href="https://es.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; previos dejarían de ser válidos en cuanto
se active la nueva clave de la &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de certificación&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;¿Cómo refrescar una &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de certificación&lt;/a&gt; para extender su
fecha de caducidad manteniendo la validez de los certificados
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; firmados previamente?&lt;/p&gt;
&lt;p&gt;Los certificados &lt;a class="reference external" href="https://es.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; tienen un número de serie y una fecha de
mínima y otra máxima de validez. ¿Es posible modificar dichas
fechas del certificado &lt;a class="reference external" href="https://es.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; de la &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de certificación&lt;/a&gt;
y que sigan funcionando las firmas antiguas?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20240521-refrescar_CA.html"&gt;Leer más…&lt;/a&gt; (quedan 5 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>OpenSSL</category><category>OpenVPN</category><category>TLS</category><category>X.509</category><guid>https://blog.jcea.es/posts/20240521-refrescar_CA.html</guid><pubDate>Tue, 21 May 2024 13:32:00 GMT</pubDate></item><item><title>Código Python para genera la clave pública, la clave privada y el CSR para su firma por parte de una autoridad de certificación</title><link>https://blog.jcea.es/posts/20221222-generaci%C3%B3n_CSR.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Este código en &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt; se escribió en 2015 para generar con
facilidad un &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Certificate_Signing_Request"&gt;CSR&lt;/a&gt; que se pudiese enviar a una &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de
certificación&lt;/a&gt; para que nos proporcionase un certificado &lt;a class="reference external" href="https://es.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt;
firmado que pudiésemos instalar en el servidor web.&lt;/p&gt;
&lt;p&gt;El procedimiento normal es utiizar &lt;a class="reference external" href="https://es.wikipedia.org/wiki/OpenSSL"&gt;OpenSSL&lt;/a&gt; y así lo estuve
haciendo durante décadas, pero, invirtiendo unos minutos para
pasar el proceso a &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt;, el resultado es más sencillo, más
configurable y más automatizado.&lt;/p&gt;
&lt;p&gt;Hoy en día utilizo &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Let%27s_Encrypt"&gt;Let's Encrypt&lt;/a&gt; y este proceso ya no es
necesario, pero lo documento aquí por si le resulta de interés a
alguien.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20221222-generaci%C3%B3n_CSR.html"&gt;Leer más…&lt;/a&gt; (quedan 2 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Código Fuente</category><category>Python</category><category>TLS</category><category>X.509</category><guid>https://blog.jcea.es/posts/20221222-generaci%C3%B3n_CSR.html</guid><pubDate>Wed, 21 Dec 2022 23:31:00 GMT</pubDate></item><item><title>Creación e instalación de un perfil OpenVPN en iOS</title><link>https://blog.jcea.es/posts/20220929-openvpn_en_ios.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Hace tiempo la cosa era más complicada, pero hoy en día crear y
activar un perfil &lt;a class="reference external" href="https://es.wikipedia.org/wiki/OpenVPN"&gt;OpenVPN&lt;/a&gt; para &lt;a class="reference external" href="https://es.wikipedia.org/wiki/IOS"&gt;iOS&lt;/a&gt; es bastante trivial.&lt;/p&gt;
&lt;div class="section" id="creacion-de-un-fichero-de-configuracion-openvpn"&gt;
&lt;h2&gt;Creación de un fichero de configuración &lt;a class="reference external" href="https://es.wikipedia.org/wiki/OpenVPN"&gt;OpenVPN&lt;/a&gt;&lt;/h2&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Creamos un par de claves públicas y privadas para el usuario.
Esas claves deben ir firmadas por la entidad de certificación
asociada al servidor &lt;a class="reference external" href="https://es.wikipedia.org/wiki/OpenVPN"&gt;OpenVPN&lt;/a&gt; y tienen una caducidad
determinada (por defecto, un año).&lt;/p&gt;
&lt;p&gt;Si usamos &lt;span class="kbd"&gt;easy-rsa&lt;/span&gt;, los comandos a ejecutar son:&lt;/p&gt;
&lt;pre class="code console"&gt;&lt;a name="rest_code_da801893fea8463fbd2b2e9e11406945-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;jcea@OpenVPN_Server:~$&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; /etc/openvpn/easy-rsa/2.2.2/
&lt;a name="rest_code_da801893fea8463fbd2b2e9e11406945-2"&gt;&lt;/a&gt;&lt;span class="gp"&gt;jcea@OpenVPN_Server:/etc/openvpn/easy-rsa/2.2.2$&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; vars
&lt;a name="rest_code_da801893fea8463fbd2b2e9e11406945-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/2.2.2/keys&lt;/span&gt;
&lt;a name="rest_code_da801893fea8463fbd2b2e9e11406945-4"&gt;&lt;/a&gt;&lt;span class="gp"&gt;jcea@OpenVPN_Server:/etc/openvpn/easy-rsa/2.2.2$ echo $&lt;/span&gt;KEY_EXPIRE
&lt;a name="rest_code_da801893fea8463fbd2b2e9e11406945-5"&gt;&lt;/a&gt;&lt;span class="go"&gt;365&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;Lo anterior inicializa &lt;span class="kbd"&gt;easy-rsa&lt;/span&gt;. Podemos ver que la
expiración por defecto es de 365 días. Podemos modificarla si
así lo deseamos.&lt;/p&gt;
&lt;p&gt;Lo normal ahora sería generar el certificado &lt;a class="reference external" href="https://es.wikipedia.org/wiki/OpenVPN"&gt;OpenVPN&lt;/a&gt; para el
usuario, sin más. Sin embargo la versión 2.2.2 de
&lt;span class="kbd"&gt;easy-rsa&lt;/span&gt; no permite crear una clave nueva para un
usuario ya existente, &lt;strong&gt;AUNQUE LA CLAVE ANTIGUA HAYA
CADUCADO&lt;/strong&gt;. En mi opinión, esto es un bug.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20220929-openvpn_en_ios.html"&gt;Leer más…&lt;/a&gt; (quedan 5 minutos de lectura)&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;</description><category>Configuración</category><category>iOS</category><category>OpenVPN</category><category>Redes</category><category>X.509</category><guid>https://blog.jcea.es/posts/20220929-openvpn_en_ios.html</guid><pubDate>Wed, 28 Sep 2022 22:31:00 GMT</pubDate></item><item><title>Generación en Python de certificados X.509 con "Subject Alternative Name" y una entidad de certificación privada (o autofirmados)</title><link>https://blog.jcea.es/posts/20180917-x509_Subject_Alternative_Name.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Hay infinidad de recetas &lt;a class="reference external" href="https://www.openssl.org/"&gt;OpenSSL&lt;/a&gt; en internet para generar
certificados &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; autofirmados o firmados por una &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;autoridad de
certificación&lt;/a&gt; privada, pero lo cierto es que, cuando entra el
juego el &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Subject_Alternative_Name"&gt;Subject Alternative Name&lt;/a&gt;, la cosa se complica mucho.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Subject_Alternative_Name"&gt;Subject Alternative Name&lt;/a&gt; o &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Subject_Alternative_Name"&gt;SAN&lt;/a&gt; es una extensión de &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; que
permite que un mismo certificado &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; cubra varios nombres
diferentes. Esto es muy útil, por ejemplo, si tenemos un servidor
web que atiende varios dominios distintos y queremos protegerlos
con un único certificado &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Utilizar &lt;a class="reference external" href="https://www.openssl.org/"&gt;OpenSSL&lt;/a&gt;, la opción habitual, para generar un certificado
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; con &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Subject_Alternative_Name"&gt;SAN&lt;/a&gt; es un auténtico dolor de muelas, como puedes ver
en mi artículo &lt;a class="reference external" href="https://blog.jcea.es/posts/20150318-x509_autofirmados.html"&gt;Generación de certificados X.509 autofirmados con "Subject Alternative Name"&lt;/a&gt;. En fin,
masoquismo. No obstante, el uso de &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Subject_Alternative_Name"&gt;SAN&lt;/a&gt; se ha hecho obligatorio
desde 2016. Los navegadores (Firefox 48, &lt;a class="reference external" href="https://textslashplain.com/2017/03/10/chrome-deprecates-subject-cn-matching/"&gt;Chrome 58&lt;/a&gt;)
e incluso algunas &lt;a class="reference external" href="https://stackoverflow.com/questions/42839363/python-disable-warnings-for-securitywarning-certificate-has-no-subjectaltnam"&gt;bibliotecas&lt;/a&gt;
&lt;a class="reference external" href="https://www.python.org/"&gt;Python&lt;/a&gt; nos obligan a ello.&lt;/p&gt;
&lt;p&gt;Considerando eso, que tenía la necesidad de generar fácilmente un
montón de certificados &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; con &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Subject_Alternative_Name"&gt;SAN&lt;/a&gt;  firmados por una
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n"&gt;Autoridad de certificación&lt;/a&gt; privada y que &lt;a class="reference external" href="https://blog.jcea.es/posts/20150318-x509_autofirmados.html"&gt;generarlos a
mano&lt;/a&gt; con &lt;a class="reference external" href="https://www.openssl.org/"&gt;OpenSSL&lt;/a&gt; era un infierno...
Pues eso, toca picar código:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20180917-x509_Subject_Alternative_Name.html"&gt;Leer más…&lt;/a&gt; (quedan 3 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Código Fuente</category><category>OpenSSL</category><category>Python</category><category>TLS</category><category>X.509</category><guid>https://blog.jcea.es/posts/20180917-x509_Subject_Alternative_Name.html</guid><pubDate>Mon, 17 Sep 2018 18:56:00 GMT</pubDate></item><item><title>OCSP Stapling y no cachear errores OCSP en Apache</title><link>https://blog.jcea.es/posts/20151228-ocsp.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;He tratado el tema de &lt;a class="reference external" href="https://en.wikipedia.org/wiki/OCSP_Stapling"&gt;&lt;em&gt;OCSP Stapling&lt;/em&gt;&lt;/a&gt; antes. Por ejemplo,
&lt;a class="reference external" href="https://blog.jcea.es/posts/20140528-ocsp_stapling.html"&gt;OCSP Stapling y la privacidad de tus usuarios&lt;/a&gt;. Resumiendo: &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;&lt;em&gt;Online Certificate Status Protocol&lt;/em&gt;&lt;/a&gt; permite
comprobar en tiempo real si un certificado &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; está revocado o
no, pero ello supone comprometer la privacidad de nuestros
usuarios. Usando &lt;a class="reference external" href="https://en.wikipedia.org/wiki/OCSP_Stapling"&gt;&lt;em&gt;OCSP Stapling&lt;/em&gt;&lt;/a&gt;, el servidor web se hace cargo de
solicitar el estado &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt;, se lo guarda mientras siga siendo
válido y envía el resultado a cada navegador que se conecta para
evitar que lo haga el propio navegador del usuario. Esto mejora la
velocidad de respuesta percibida y no compromete la privacidad del
usuario.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/OCSP_Stapling"&gt;&lt;em&gt;OCSP Stapling&lt;/em&gt;&lt;/a&gt; debería funcionar bien, pero de la teoría a la
práctica siempre hay un trecho. Léase, por ejemplo, mi artículo
&lt;a class="reference external" href="https://blog.jcea.es/posts/20150622-ocsp_fail.html"&gt;OCSP y el depender de la profesionalidad ajena&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20151228-ocsp.html"&gt;Leer más…&lt;/a&gt; (quedan 1 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Apache HTTP</category><category>OCSP</category><category>TLS</category><category>X.509</category><guid>https://blog.jcea.es/posts/20151228-ocsp.html</guid><pubDate>Mon, 28 Dec 2015 15:58:00 GMT</pubDate></item><item><title>La biblioteca "cryptography" o cómo generar CSRs en Python</title><link>https://blog.jcea.es/posts/20151026-cryptography.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Openssl"&gt;OpenSSL&lt;/a&gt; es una biblioteca grande y compleja. Se utiliza para
todo: criptografía simétrica, criptografía asimétrica, &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Hash_function"&gt;hashes&lt;/a&gt;,
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Secure_Sockets_Layer"&gt;SSL&lt;/a&gt;, &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Transport_Layer_Security"&gt;TLS&lt;/a&gt; y toda la gestión &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt;: generar certificados &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt;,
generar &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Certificate_signing_request"&gt;CSRs&lt;/a&gt;, firmar certificados &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; como autoridad de
certificación y realizar todas las verificaciones necesarias. El
resultado es una biblioteca grande y pesada en la que se
encuentran problemas de seguridad con frecuencia y que evoluciona
muy despacio.&lt;/p&gt;
&lt;p&gt;Hace mucho que quiero utilizar alternativas a &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Openssl"&gt;OpenSSL&lt;/a&gt; para
algunas tareas, pero lo cierto es que hasta hace poco no había
nada que le hiciese competencia. Esto ha cambiado -para algunas
actividades- con la aparición de la biblioteca &lt;a class="reference external" href="https://cryptography.io/"&gt;Cryptography&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20151026-cryptography.html"&gt;Leer más…&lt;/a&gt; (quedan 4 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Código Fuente</category><category>Criptología</category><category>OpenSSL</category><category>Python</category><category>StartSSL</category><category>TLS</category><category>X.509</category><guid>https://blog.jcea.es/posts/20151026-cryptography.html</guid><pubDate>Mon, 26 Oct 2015 18:30:00 GMT</pubDate></item><item><title>OCSP y el depender de la profesionalidad ajena</title><link>https://blog.jcea.es/posts/20150622-ocsp_fail.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;He escrito ya antes sobre &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;&lt;em&gt;Online Certificate Status Protocol&lt;/em&gt;&lt;/a&gt;. Puedes ver el &lt;em&gt;tag&lt;/em&gt;
&lt;a class="reference external" href="https://blog.jcea.es/categories/ocsp.html"&gt;OCSP&lt;/a&gt; de este blog. En concreto en
&lt;a class="reference external" href="https://blog.jcea.es/posts/20140520-revocacion_ssl.html"&gt;El triste estado de las revocaciones SSL en Internet&lt;/a&gt; expongo el hecho objetivo de que la
mayoría de los navegadores web no comprueban la revocación de
certificados o la comprueban de forma muy...  &lt;strong&gt;peculiar&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Por ejemplo, con la configuración por defecto, un navegador normal
que hace verificaciones &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt; hace lo siguiente:&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p class="first"&gt;Hay navegadores que no hacen comprobaciones &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt; para
certificados &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; normales, solo para los certificados &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Extended_Validation_Certificate"&gt;EV&lt;/a&gt;.
Por ejemplo, &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Apple_Inc."&gt;Apple&lt;/a&gt; &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Safari_%28web_browser%29"&gt;Safari&lt;/a&gt; (el navegador de Mac OS X y de
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/IOS"&gt;iOS&lt;/a&gt;). Ni que decir tiene que la inmensa mayoría de los
certificados &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; &lt;strong&gt;no&lt;/strong&gt; son &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Extended_Validation_Certificate"&gt;EV&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Supongamos que el navegador decide hacer una consulta &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt;. En
este caso, si el servidor &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt; no responde en absoluto, no
pasa nada. El certificado &lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; se dará por bueno. Esto es una
vía de ataque evidente si nos conectamos a través de una red
bajo el control de un ente malicioso.&lt;/p&gt;
&lt;p&gt;¿Por qué se hace así? Porque no es raro que lo servidores &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt;
de las entidades de certificación estén caídos o saturados. Es
decir, no recibir respuesta a la petición &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt; es rutina. Como
no es aceptable que el usuario del navegador reciba avisos de
seguridad o se le deniegue el acceso a la mitad de la webs que
visita cada día, los navegadores han sido prácticos y aceptan
el hecho habitual de que no obtener una respuesta &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt; no
tiene por qué indicar nada feo (al margen de la profesionalidad
dudosa de esa entidad de certificación, claro).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;Una petición &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt; supone una pérdida de privacidad para el
usuario. Explico el problema y la solución en mi artículo
&lt;a class="reference external" href="https://blog.jcea.es/posts/20140528-ocsp_stapling.html"&gt;OCSP Stapling y la privacidad de tus usuarios&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Resumiendo, el servidor web de un dominio accesible por &lt;a class="reference external" href="https://en.wikipedia.org/wiki/HTTPS"&gt;HTTPS&lt;/a&gt;
puede hacer una petición &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt; para su propio certificado
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt;, cachear ese resultado durante unas horas e incluir esa
respuesta en la negociación &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Transport_Layer_Security"&gt;TLS&lt;/a&gt; entre el servidor &lt;a class="reference external" href="https://en.wikipedia.org/wiki/HTTPS"&gt;HTTPS&lt;/a&gt; y el
navegador. De esta manera el navegador se ahorra la petición
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/Ocsp"&gt;OCSP&lt;/a&gt; y el tiempo de espera, y el usuario gana privacidad.&lt;/p&gt;
&lt;p&gt;Una situación &lt;em&gt;Win-Win&lt;/em&gt; de libro.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20150622-ocsp_fail.html"&gt;Leer más…&lt;/a&gt; (quedan 5 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Apache HTTP</category><category>Cloud</category><category>OCSP</category><category>StartSSL</category><category>TLS</category><category>X.509</category><guid>https://blog.jcea.es/posts/20150622-ocsp_fail.html</guid><pubDate>Mon, 22 Jun 2015 15:27:00 GMT</pubDate></item><item><title>Nada ha cambiado desde Snowden. ¿O sí?</title><link>https://blog.jcea.es/posts/20150606-sin_cambios_snowden.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Hace unos días se publicó un artículo interesante en &lt;a class="reference external" href="http://slashdot.org/"&gt;Slashdot&lt;/a&gt;:
&lt;a class="reference external" href="http://yro.slashdot.org/story/15/05/25/151220/privacy-behaviors-changed-little-after-snowden"&gt;Privacy Behaviors Changed Little After Snowden&lt;/a&gt;.
No voy a explicar quién es &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Edward_Snowden"&gt;Edward Snowden&lt;/a&gt;. Hay infinidad de
páginas en Internet sobre él y podéis ver también mi presentación
&lt;a class="reference external" href="https://www.jcea.es/artic/tor-conectacon2014/"&gt;TOR: El árbol de la libertad debe ser regado con la sangre de los
patriotas... y de los tiranos&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;El argumento del artículo es que a pesar de la evidencia
incontestable de la vigilancia masiva a la que nos someten los
gobiernos con la excusa de protegernos, el comportamiento del
público ha cambiado muy poco o nada. Esto confirma mis propias
impresiones: el público en general, a pesar de decir que le
importa la privacidad y la seguridad personal, no adopta medidas
efectivas para preservarlas.&lt;/p&gt;
&lt;p&gt;Se puede discutir largo y tendido sobre el tema, pero yo creo que
hay dos facetas básicas para entender esta falta de reacción
efectiva. En primer lugar, para la mayoría de la gente la
informática es algo mágico que realmente no entiende y está a
expensas de las herramientas y tecnologías que les proporcionan
terceros. Existe una sensación de que &lt;strong&gt;no puedo hacer nada para
evitarlo&lt;/strong&gt;. El segundo factor es nuestra naturaleza acomodada y
conformista, &lt;em&gt;borreguil&lt;/em&gt;. Cuestionar todo lo que nos pasa y nos
rodea interfiere directamente con la felicidad percibida y,
sencillamente, la energía mental que podemos invertir en
cuestionar el mundo es limitada.&lt;/p&gt;
&lt;p&gt;En este sentido personalmente me he dado por vencido. Intentar
convencer y mejorar el mundo persona a persona es ineficaz y
futil.&lt;/p&gt;
&lt;p&gt;Pero, y aquí viene lo importante para mí, existen personas cuyas
decisiones afectan a millones. Tecnología que una vez desplegada
mejora la privacidad y seguridad de miles de millones. Creo, en
resumen, que existen personas situadas en posiciones críticas
cuyas decisiones pueden mejorar el mundo de forma transparente
para el público, y &lt;em&gt;a pesar&lt;/em&gt; de dicho público.&lt;/p&gt;
&lt;p&gt;Se me ha llamado paternalista, querer mejorar al &lt;em&gt;pueblo&lt;/em&gt;, pero
sin el &lt;em&gt;pueblo&lt;/em&gt;. Creo, cierto es, que la mayor parte de la gente
no tiene ni la preparación ni el interés para decidir sobre
cuestiones de privacidad y seguridad online. Pero pienso que es
muy importante señalar, también, que la diferenciación entre
&lt;em&gt;consumidores&lt;/em&gt; y &lt;em&gt;creadores de tecnología&lt;/em&gt; no es rígida ni
estática. Toda la información está disponible y cualquier persona
interesada puede buscarla, formarse y contribuir.&lt;/p&gt;
&lt;p&gt;Resumiendo, hay personas cuyas decisiones cuentan. Personas que
están decidiendo y tomando medidas que nos benefician a todos.
Unos pocos ejemplos:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20150606-sin_cambios_snowden.html"&gt;Leer más…&lt;/a&gt; (quedan 2 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Opinión</category><category>Privacidad</category><category>Seguridad</category><category>Snowden</category><category>X.509</category><guid>https://blog.jcea.es/posts/20150606-sin_cambios_snowden.html</guid><pubDate>Sat, 06 Jun 2015 12:41:00 GMT</pubDate></item><item><title>Validación local de certificados X.509</title><link>https://blog.jcea.es/posts/20150318-verificar_x509.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Haciendo experimentos de los míos, de esos inconfesables, a veces
tengo que verificar el correcto funcionamiento de certificados
&lt;a class="reference external" href="https://en.wikipedia.org/wiki/X.509"&gt;X.509&lt;/a&gt; generados de forma local.&lt;/p&gt;
&lt;p&gt;Los pasos que suelo dar son los siguientes:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20150318-verificar_x509.html"&gt;Leer más…&lt;/a&gt; (quedan 1 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Código Fuente</category><category>OpenSSL</category><category>Python</category><category>TLS</category><category>X.509</category><guid>https://blog.jcea.es/posts/20150318-verificar_x509.html</guid><pubDate>Wed, 18 Mar 2015 16:09:00 GMT</pubDate></item></channel></rss>