<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PKI on Adrián Lois</title><link>https://adrianlois.com/tags/pki/</link><description>Recent content in PKI on Adrián Lois</description><generator>Hugo</generator><language>es</language><lastBuildDate>Sat, 08 Feb 2025 12:03:00 +0000</lastBuildDate><atom:link href="https://adrianlois.com/tags/pki/index.xml" rel="self" type="application/rss+xml"/><item><title>2FA: segundo factor de autenticación en conexiones SSH</title><link>https://adrianlois.com/posts/2fa-segundo-factor-autenticacion-ssh/</link><pubDate>Wed, 22 Jun 2022 11:53:00 +0000</pubDate><guid>https://adrianlois.com/posts/2fa-segundo-factor-autenticacion-ssh/</guid><description>&lt;p&gt;Implementar un segundo factor de autenticación 2FA en servicios SSH sin duda es una muy buena opción de seguridad no solo para servidores expuestos a internet sino para aquellos usuarios que pueden elevarse a un contexto privilegiado de sudo y servidores críticos en una red interna corporativa.&lt;/p&gt;
&lt;p&gt;Con este mecanismo de autenticación en dos pasos se estaría reduciendo en gran medida la superficie de ataque de los vectores de entrada a estos sistemas por parte de un posible atacante.&lt;/p&gt;</description></item><item><title>Firmar scripts PowerShell [Parte 2 de 2]: hardening con CA ADCS y despliegue por GPO</title><link>https://adrianlois.com/posts/firmar-scripts-powershell-parte-2-hardening-ca-adcs-gpo/</link><pubDate>Thu, 25 Mar 2021 19:02:00 +0000</pubDate><guid>https://adrianlois.com/posts/firmar-scripts-powershell-parte-2-hardening-ca-adcs-gpo/</guid><description>&lt;h3 id="firmar-scripts-powershell"&gt;
 Firmar scripts PowerShell
 &lt;a class="heading-link" href="#firmar-scripts-powershell"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.zonasystem.com/2021/02/firmar-scripts-powershell.html" target="_blank" rel="noopener"&gt;[Parte 1 de 2]: Hardening en la política de ejecución&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zonasystem.com/2021/03/firmar-scripts-powershell-entidad-certificacion-ca-despliegue-certificado-gpo-integridad-firma.html" target="_blank" rel="noopener"&gt;[Parte 2 de 2]: Entidad de certificación CA (ADCS), despliegue de certificado vía GPO e integridad de firma&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Continuando con el artículo sobre cómo &lt;a href="https://www.zonasystem.com/2021/02/firmar-scripts-powershell.html" target="_blank" rel="noopener"&gt;firmar scripts PowerShell&lt;/a&gt; estableciendo una política de ejecución &lt;em&gt;AllSigned&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;En este post comentaré cómo hacer uso de las plantillas de certificados para el propósito de &amp;ldquo;Firma de código&amp;rdquo; emitidas por una Entidad de certificación CA implementada en un entorno de dominio haciendo uso del servicio &lt;a href="https://docs.microsoft.com/es-es/windows-server/networking/core-network-guide/cncg/server-certs/install-the-certification-authority" target="_blank" rel="noopener"&gt;ADCS&lt;/a&gt; &lt;em&gt;(Active Directory Certificate Services)&lt;/em&gt;, desplegando el certificado vía GPO y finalmente realizar una comprobación de integridad del script PowerShell firmado.&lt;/p&gt;</description></item><item><title>Firmar scripts PowerShell [Parte 1 de 2]: hardening de ExecutionPolicy</title><link>https://adrianlois.com/posts/firmar-scripts-powershell-1-hardening-executionpolicy/</link><pubDate>Tue, 09 Feb 2021 16:49:00 +0000</pubDate><guid>https://adrianlois.com/posts/firmar-scripts-powershell-1-hardening-executionpolicy/</guid><description>&lt;h3 id="firmar-scripts-powershell"&gt;
 Firmar scripts PowerShell
 &lt;a class="heading-link" href="#firmar-scripts-powershell"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.zonasystem.com/2021/02/firmar-scripts-powershell.html" target="_blank" rel="noopener"&gt;[Parte 1 de 2]: Hardening en la política de ejecución&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.zonasystem.com/2021/03/firmar-scripts-powershell-entidad-certificacion-ca-despliegue-certificado-gpo-integridad-firma.html" target="_blank" rel="noopener"&gt;[Parte 2 de 2]: Entidad de certificación CA (ADCS), despliegue de certificado vía GPO e integridad de firma&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por motivos de seguridad Windows PowerShell establece unas políticas de ejecución de scripts. Con el fin de evitar posibles ejecuciones de scripts no deseadas. Para poder ejecutar scripts en PowerShell sin problemas, se tendrá que cambiar la política de ejecución (ExecutionPolicy). Por defecto no están definidas y vienen deshabilitadas (Restricted) para todos los scopes.&lt;/p&gt;</description></item><item><title>Renovar SSL: comprobar coincidencia certificado/clave/CSR (OpenSSL)</title><link>https://adrianlois.com/posts/renovar-certificados-ssl-coincidencia-clave-csr-openssl/</link><pubDate>Thu, 01 Aug 2019 07:27:00 +0000</pubDate><guid>https://adrianlois.com/posts/renovar-certificados-ssl-coincidencia-clave-csr-openssl/</guid><description>&lt;p&gt;Al renovar los certificados de un servidor web podemos encontrarnos con errores en el momento de sustitución de los ficheros de certificados.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Apache + configuración SSLCipher strong&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-apacheconf" data-lang="apacheconf"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# SSLCiphers strong encryption&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSLProtocol &lt;span style="color:#ff7b72"&gt;all&lt;/span&gt; -SSLv3 -TLSv1 -TLSv1.1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSLHonorCipherOrder &lt;span style="color:#ff7b72"&gt;on&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSLCompression &lt;span style="color:#ff7b72"&gt;off&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSLSessionTickets &lt;span style="color:#ff7b72"&gt;off&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# SSL certs config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSLEngine &lt;span style="color:#ff7b72"&gt;on&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSLCertificateFile &lt;span style="color:#a5d6ff"&gt;/etc/apache2/ssl/web/public.crt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSLCertificateKeyFile &lt;span style="color:#a5d6ff"&gt;/etc/apache2/ssl/web/private.key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SSLCertificateChainFile &lt;span style="color:#a5d6ff"&gt;/etc/apache2/ssl/web/intermediate.crt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Nginx + configuración SSLCipher strong&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;ssl&lt;/span&gt; &lt;span style="color:#79c0ff;font-weight:bold"&gt;on&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;ssl_protocols&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;TLSv1&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;TLSv1.1&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;TLSv1.2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# Fix &amp;#39;The Logjam Attack&amp;#39;.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;ssl_ciphers&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span style="color:#79c0ff;font-weight:bold"&gt;on&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;ssl_dhparam&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;/etc/ssl/dh2048_param.pem&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#SSL certs config
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;ssl_certificate&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;/etc/nginx/ssl/web/intermediate.crt&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;ssl_certificate_key&lt;/span&gt; &lt;span style="color:#a5d6ff"&gt;/etc/nginx/ssl/web/private.key&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ca-bundle"&gt;
 CA Bundle
 &lt;a class="heading-link" href="#ca-bundle"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Si disponemos de un fichero &lt;a href="https://es.wikipedia.org/wiki/Autoridad_de_certificaci%C3%B3n" target="_blank" rel="noopener"&gt;CA Bundle&lt;/a&gt; no es otra cosa que un &lt;a href="https://es.wikipedia.org/wiki/Certificado_ra%C3%ADz" target="_blank" rel="noopener"&gt;certificado intermediate y raíz&lt;/a&gt; de la CA en un solo archivo, uno detrás del otro, debes combinarlos en uno solo para tener un CA_bundle completo. Los certificados raíz no son necesarios cuando se instala el certificado, para la instalación es suficiente activar en el servidor el correspondiente certificado intermediate.&lt;/p&gt;</description></item><item><title>Licencias RDP entre Windows Server 2016 y Windows Mobile (RDM, Windows CE, RDP 5.x/6.x)</title><link>https://adrianlois.com/posts/solucion-licencias-rdp-windows-server-2016-windows-mobile-rdm/</link><pubDate>Thu, 19 Jul 2018 19:30:00 +0000</pubDate><guid>https://adrianlois.com/posts/solucion-licencias-rdp-windows-server-2016-windows-mobile-rdm/</guid><description>&lt;p&gt;Actualmente &lt;a href="https://es.wikipedia.org/wiki/Remote_Desktop_Protocol" target="_blank" rel="noopener"&gt;RDP&lt;/a&gt; (&lt;em&gt;Remote Desktop Protocol&lt;/em&gt;) está en versión 10.x y versiones más actualizadas que incluyen importantes mejoras de seguridad. Mejoras como una mayor longitud de clave generada por el servidor de licencias RDS 4096 bits con un algoritmo de seguridad SHA256 soportando SSL/TLS y &lt;a href="https://en.wikipedia.org/wiki/Network_Level_Authentication" target="_blank" rel="noopener"&gt;NLA&lt;/a&gt; (&lt;em&gt;Network Level Authentication&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Versiones iguales o inferiores a RDP 6.x no soportan las características anteriores&lt;/strong&gt;. El límite de longitud para las claves es de 2048 bits con algoritmo de seguridad &lt;a href="https://en.wikipedia.org/wiki/SHA-1" target="_blank" rel="noopener"&gt;SHA1&lt;/a&gt; (&lt;em&gt;Secure Hash Algorithm 1&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>Exportar certificados no-exportables a PFX (PKCS #12) con Jailbreak y Mimikatz</title><link>https://adrianlois.com/posts/exportar-certificados-no-exportables-pfx-pkcs-12-jailbreak-mimikatz/</link><pubDate>Wed, 04 Jul 2018 19:30:00 +0000</pubDate><guid>https://adrianlois.com/posts/exportar-certificados-no-exportables-pfx-pkcs-12-jailbreak-mimikatz/</guid><description>&lt;p&gt;En el momento de importar un certificado digital, ya sea para el usuario actual &lt;em&gt;(certmgmt.msc)&lt;/em&gt; como para el equipo &lt;em&gt;(certlm.msc)&lt;/em&gt;, tenemos la opción de establecer dicho certificado como exportable. Esto nos permite exportar el certificado (clave pública) con la clave privada en un mismo fichero en formato pfx.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.zonasystem.com/2017/09/convertir-certificados-digitales-pfx-pem-cer-crt-openssl-pkcs12.html" target="_blank" rel="noopener"&gt;Más información sobre algunos tipos de formatos de certificados&lt;/a&gt;.&lt;/p&gt;
&lt;div align="center"&gt;
&lt;p&gt;&lt;img src="exportar-certificados-no-exportables-pfx-pkcs-12-jailbreak-mimikatz_01.png" alt="Figura 1: Checkbox &amp;ldquo;Marcar clave como exportable&amp;rdquo; al importar un certificado digital."&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Figura 1: Checkbox &amp;ldquo;Marcar clave como exportable&amp;rdquo; al importar un certificado digital.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Descifrar tráfico SSL/TLS en Wireshark con la clave privada</title><link>https://adrianlois.com/posts/descifrar-trafico-ssl-tls-wireshark-clave-privada/</link><pubDate>Wed, 13 Sep 2017 10:00:00 +0000</pubDate><guid>https://adrianlois.com/posts/descifrar-trafico-ssl-tls-wireshark-clave-privada/</guid><description>&lt;p&gt;Para poder descifrar tráfico SSL/TLS &lt;strong&gt;necesitamos la clave privada sin passphrase del certificado digital del servidor&lt;/strong&gt;. No se trata de ningún &amp;ldquo;&lt;em&gt;hack mágico&lt;/em&gt;&amp;rdquo; con el que podremos descifrar el tráfico SSL/TLS.&lt;/p&gt;
&lt;p&gt;Si necesitamos analizar el tráfico de un servidor al que tenemos un acceso legítimo, este es un método que nos permitirá poder ver en texto plano todo el tráfico cifrado que pasa por el servidor &lt;strong&gt;con el fin de detectar posibles anomalías en una red local&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>OpenSSL: convertir certificados digitales (PFX, CSR, PEM, CRT, CER) y clave privada</title><link>https://adrianlois.com/posts/openssl-convertir-certificados-digitales-pfx-csr-pem-crt-cer-clave-privada/</link><pubDate>Sat, 09 Sep 2017 18:29:00 +0000</pubDate><guid>https://adrianlois.com/posts/openssl-convertir-certificados-digitales-pfx-csr-pem-crt-cer-clave-privada/</guid><description>&lt;p&gt;En Windows Server cuando se genera un certificado autofirmado por el propio servidor este se puede exportar por defecto en formato .pfx. Los certificados en formato .pfx contienen tanto la clave pública como la privada.&lt;/p&gt;
&lt;h2 id="tipos-de-formatos-más-frecuentes-de-certificados"&gt;
 Tipos de formatos más frecuentes de certificados
 &lt;a class="heading-link" href="#tipos-de-formatos-m%c3%a1s-frecuentes-de-certificados"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.CSR&lt;/code&gt; &lt;em&gt;(Certificate Signing Request)&lt;/em&gt;: Sería el archivo generado normalmente por el servidor que usará el certificado SSL. El CSR contiene información relativa a la organización.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.KEY&lt;/code&gt;: Es el archivo de clave privada para cifrar las solicitudes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.DER&lt;/strong&gt; &lt;em&gt;(Distinguish Encoding Rules)&lt;/em&gt;: Suelen tener la extensión CRT o CER. Es un tipo de codificación de certificados X.509, NO un tipo de certificado. Es un formato binario o raw.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.CRT .CERT .CER&lt;/strong&gt; &lt;code&gt;.PEM&lt;/code&gt; &lt;em&gt;(Privacy Enhanced Mail)&lt;/em&gt;: Ambos son usados indistintamente. .pem contiene el certificado y la clave, mientras que un fichero .crt solo contiene el certificado. Generalmente codificado en Base64, encerrado entre &amp;ldquo;&amp;mdash;BEGIN CERTIFICATE&amp;mdash;&amp;rdquo; y &amp;ldquo;&amp;mdash;END CERTIFICATE&amp;mdash;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.CRL&lt;/strong&gt; &lt;em&gt;(Certificate Revocation List)&lt;/em&gt;: Fichero que contiene una lista de revocación de certificados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.P7B .P7C&lt;/strong&gt;: Estructura PKCS#7 SignedData sin datos, solo certificado(s) o CRL(s)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.PKCS12 (PKCS #12) .P12 .PFX&lt;/strong&gt;: Se usa en servidores Windows. Contiene todos los archivos en un único archivo, tanto la clave pública como la clave privada asociada, generada por el servidor en el momento en el que se generó el CSR.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si necesitamos extraer la clave privada podemos usar &lt;a href="https://www.openssl.org/" target="_blank" rel="noopener"&gt;OpenSSL&lt;/a&gt; el cual utilizará uno de los estándares de criptografía &lt;a href="https://es.wikipedia.org/wiki/PKCS" target="_blank" rel="noopener"&gt;PKCS&lt;/a&gt; (&lt;em&gt;Public-Key Cryptography Standards&lt;/em&gt;) concretamente &lt;a href="https://en.wikipedia.org/wiki/PKCS_12" target="_blank" rel="noopener"&gt;PKCS#12&lt;/a&gt; (formatos .PFX) que define un formato de fichero usado comúnmente para almacenar claves privadas con su certificado de clave pública protegido mediante clave simétrica (es decir, una passphrase o contraseña).&lt;/p&gt;</description></item></channel></rss>