<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Crl on inetshell</title><link>https://inet.sh/es/tags/crl/</link><description>Recent content in Crl on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Fri, 25 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/crl/index.xml" rel="self" type="application/rss+xml"/><item><title>pfSense: OpenVPN deja de aceptar clientes con 'CRL has expired'</title><link>https://inet.sh/es/posts/pfsense/openvpn-crl-has-expired/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/pfsense/openvpn-crl-has-expired/</guid><description>Todos los clientes OpenVPN de un pfSense fallan a la vez con &amp;#39;VERIFY ERROR: depth=0, error=CRL has expired&amp;#39;. La CRL interna caducó, o nació caducada por el bug de los 9999 días (Redmine #13424, fecha más allá de 2050 codificada como 1950). Cómo regenerarla desde Cert Manager, el parche para versiones viejas y cómo comprobarlo con openssl.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p><strong>System → Certificates → Certificate Revocation</strong> → lápiz sobre la CRL que usa el servidor OpenVPN → <strong>Lifetime (Days)</strong> = <code>730</code> → <strong>Save</strong>. Guardar regenera la CRL con fechas válidas. Después, <strong>Status → Services → OpenVPN → Restart</strong>. Los clientes vuelven a entrar sin cambiar nada de su lado.</p>
<p>Si la GUI no te deja poner una vida sensata (versiones anteriores a 2.7 / 23.01), primero <strong>System → Patches</strong> (paquete <em>System Patches</em>) → aplica <em>Fix for CRL expiration lifetime default and maximum values</em> (<code>a3c1589086ea67d25a28ec14ab95d7fd9ab25fa2</code>), y luego el paso anterior. O actualiza pfSense: las versiones actuales ya lo llevan.</p>
<h2 id="el-error">El error</h2>
<p>En el log del servidor (Status → System Logs → OpenVPN) y en el cliente:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">VERIFY ERROR: depth=0, error=CRL has expired: CN=client1, serial=3
</span></span><span class="line"><span class="cl">OpenSSL: error:0A000086:SSL routines::certificate verify failed
</span></span><span class="line"><span class="cl">TLS_ERROR: BIO read tls_read_plaintext error
</span></span><span class="line"><span class="cl">TLS Error: TLS handshake failed
</span></span></code></pre></td></tr></table>
</div>
</div><p>La pista es que <strong>fallan todos los clientes a la vez</strong>. Un certificado caducado tumba a un cliente; una CRL caducada tumba al servidor entero, porque la revisa en cada handshake.</p>
<h2 id="por-qué-pasa">Por qué pasa</h2>
<p>Dos caminos llevan aquí:</p>
<ol>
<li><strong>La CRL caducó de verdad.</strong> Cada CRL tiene un <code>nextUpdate</code>; pasada esa fecha OpenSSL la trata como inválida y OpenVPN rechaza a todos. Una CRL creada hace años con vida corta y nunca tocada acaba así.</li>
<li><strong>La CRL nació caducada.</strong> pfSense generaba CRLs con <strong>9999 días</strong> por defecto, lo que las llevaba más allá de <strong>2050</strong>. X.509 codifica las fechas hasta 2049 como <code>UTCTime</code> con año de dos cifras, y pfSense escribía <code>50</code> donde tocaba <code>GeneralizedTime</code>: OpenSSL lo lee como <strong>1950</strong> y la CRL &ldquo;expiró&rdquo; hace 75 años. Es el <a href="https://redmine.pfsense.org/issues/13424">bug #13424</a> de Redmine, y explica por qué instalaciones sanas empezaron a fallar en 2022–2023 sin que nadie tocara nada: las CRLs regeneradas por cualquier cambio cruzaron el 2050.</li>
</ol>
<p>El arreglo de Netgate bajó la vida por defecto a <strong>730 días</strong>, limitó el máximo (2050 en 64 bits, 2038 en 32 bits) y va incluido en las versiones actuales; para las viejas quedó como parche del paquete <em>System Patches</em>.</p>
<h2 id="comprobarlo">Comprobarlo</h2>
<p>pfSense escribe la CRL de cada servidor OpenVPN en su directorio de configuración:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">ls /var/etc/openvpn/server1/
</span></span><span class="line"><span class="cl">openssl crl -in /var/etc/openvpn/server1/crl-verify -noout -lastupdate -nextupdate
</span></span></code></pre></td></tr></table>
</div>
</div><p>Un <code>nextUpdate</code> en el pasado, o un año 1950, es el diagnóstico completo.</p>
<h2 id="arreglo">Arreglo</h2>
<ol>
<li><strong>Identifica qué CRL usa el servidor</strong>: VPN → OpenVPN → Servers → editar → <em>Peer Certificate Revocation list</em>.</li>
<li><strong>Regenérala</strong>: System → Certificates → Certificate Revocation → lápiz sobre esa CRL → <strong>Lifetime (Days)</strong> <code>730</code> → Save. Cualquier guardado la reescribe con <code>lastUpdate</code> = ahora.</li>
<li><strong>Reinicia OpenVPN</strong>: Status → Services. OpenVPN relee <code>crl-verify</code> al detectar el cambio, pero el reinicio evita esperar a que lo note.</li>
<li><strong>Vuelve a comprobar</strong> con el <code>openssl crl</code> de arriba.</li>
</ol>
<p>En una versión sin el fix, entre el paso 1 y el 2: System → Package Manager → instalar <em>System_Patches</em> → System → Patches → el parche aparece en la lista de recomendados → <strong>Apply</strong>. Sin él, la GUI vuelve a escribir 9999 y el problema se repite en cuanto guardes.</p>
<h2 id="trampas">Trampas</h2>
<ul>
<li><strong>No borres la CRL para &ldquo;arreglarlo&rdquo;</strong>: sin CRL, los certificados que revocaste vuelven a ser válidos. Edítala.</li>
<li><strong>Una CRL por CA</strong>: si tienes varios servidores OpenVPN con CAs distintas, revisa cada una.</li>
<li><strong>Las CRLs importadas</strong> (de una CA externa) no se pueden regenerar desde pfSense; pide una nueva a tu CA y vuelve a importarla.</li>
<li><strong>730 días también se acaban.</strong> Cualquier revocación, edición de la CRL o cambio en el servidor OpenVPN la regenera; si no tocas nada en dos años, vuelves aquí. Un aviso en el calendario cuesta poco.</li>
<li><strong>Pasado 2038 en hardware de 32 bits</strong> aplica el otro límite; en la práctica, ninguno de esos equipos debería seguir siendo tu firewall.</li>
</ul>
<p>Referencias: <a href="https://docs.netgate.com/pfsense/en/latest/certificates/crl.html">Certificate Revocation List Management</a> en la documentación de Netgate y el <a href="https://blog.pasqualefiorillo.it/how-to-fix-crl-has-expired-openvpn-error-on-pfsense/">análisis de Pasquale Fiorillo</a>.</p>
]]></content:encoded></item></channel></rss>