<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" 
  xmlns:atom="http://www.w3.org/2005/Atom" 
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>JMRP Blog RSS Feed</title>
    <description>Blog and portfolio of José Manuel Requena Plens, firmware and software engineer in Valencia, Spain: embedded systems, open-source tooling and self-hosting.</description>
    <link>https://jmrp.io/</link>
    <atom:link href="https://jmrp.io/rss.xml" rel="self" type="application/rss+xml" />
    <language>en-us</language>
    <copyright>© 2026 José Manuel Requena Plens. Articles are licensed CC BY 4.0: https://creativecommons.org/licenses/by/4.0/</copyright>
    <managingEditor>mail@jmrp.io (José Manuel Requena Plens)</managingEditor>
    <webMaster>mail@jmrp.io (José Manuel Requena Plens)</webMaster>
    <ttl>60</ttl>
    <lastBuildDate>Thu, 15 Oct 2026 02:43:17 GMT</lastBuildDate>
    <generator>Astro RSS Generator (Manual)</generator>
    <docs>https://www.rssboard.org/rss-specification</docs>
    <image>
      <url>https://jmrp.io/favicon.png</url>
      <title>JMRP Blog RSS Feed</title>
      <link>https://jmrp.io/</link>
      <width>144</width>
      <height>144</height>
    </image>
    
    <item>
      <title>What building a GitLab MCP server taught me about GitLab&apos;s API</title>
      <link>https://jmrp.io/blog/013-gitlab-mcp-server-api-lessons/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/013-gitlab-mcp-server-api-lessons/</guid>
      <description>Building and checking an MCP server against GitLab found a 401 that meant 403 and writes answered as successes that saved nothing; each went upstream.</description>
      <content:encoded><![CDATA[Building and checking an MCP server against GitLab found a 401 that meant 403 and writes answered as successes that saved nothing; each went upstream.<br/><br/><a href="https://jmrp.io/blog/013-gitlab-mcp-server-api-lessons/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>GitLab</category><category>API</category><category>Testing</category><category>MCP</category>
      <enclosure url="https://jmrp.io/_astro/gitlab-api-referee.DSh6ncax_aITfY.jpeg" length="109756" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/gitlab-api-referee.DSh6ncax_aITfY.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/gitlab-api-referee.DSh6ncax_ErTUk.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>GitLab fine-grained personal access tokens, one action at a time</title>
      <link>https://jmrp.io/blog/014-gitlab-fine-grained-tokens-per-action/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/014-gitlab-fine-grained-tokens-per-action/</guid>
      <description>A GitLab fine-grained token holds a grant, not scopes: REST refuses outside it, GraphQL answers null. I derive what each API action needs, ahead of time.</description>
      <content:encoded><![CDATA[A GitLab fine-grained token holds a grant, not scopes: REST refuses outside it, GraphQL answers null. I derive what each API action needs, ahead of time.<br/><br/><a href="https://jmrp.io/blog/014-gitlab-fine-grained-tokens-per-action/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>GitLab</category><category>API</category><category>Security</category><category>Authentication</category>
      <enclosure url="https://jmrp.io/_astro/gitlab-fine-grained-tokens.CMnvrSyG_17M0DG.jpeg" length="79797" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/gitlab-fine-grained-tokens.CMnvrSyG_17M0DG.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/gitlab-fine-grained-tokens.CMnvrSyG_2l8uIQ.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>Your 4-Digit PIN Is Fine: Device-Bound Keys on ESP32-S3</title>
      <link>https://jmrp.io/blog/012-device-bound-key-derivation/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/012-device-bound-key-derivation/</guid>
      <description>Why PBKDF2 iterations can&apos;t protect a 4-digit PIN on a microcontroller, and how an eFuse-HMAC device secret plus HKDF stops offline brute force.</description>
      <content:encoded><![CDATA[Why PBKDF2 iterations can&apos;t protect a 4-digit PIN on a microcontroller, and how an eFuse-HMAC device secret plus HKDF stops offline brute force.<br/><br/><a href="https://jmrp.io/blog/012-device-bound-key-derivation/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>Security</category><category>Cryptography</category><category>Firmware</category><category>ESP32</category>
      <enclosure url="https://jmrp.io/_astro/device-bound-keys.Du7Q7Xo9_Z1DTWxs.jpeg" length="116251" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/device-bound-keys.Du7Q7Xo9_Z1DTWxs.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/device-bound-keys.Du7Q7Xo9_1nyNDM.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>A Vault File That Fails Closed: Encrypt-then-MAC on an MCU</title>
      <link>https://jmrp.io/blog/011-encrypt-then-mac-vault/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/011-encrypt-then-mac-vault/</guid>
      <description>How a hardware password manager authenticates every vault file before it decrypts: encrypt-then-MAC, verify-before-decrypt, and fail-closed reads.</description>
      <content:encoded><![CDATA[How a hardware password manager authenticates every vault file before it decrypts: encrypt-then-MAC, verify-before-decrypt, and fail-closed reads.<br/><br/><a href="https://jmrp.io/blog/011-encrypt-then-mac-vault/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>Security</category><category>Cryptography</category><category>Firmware</category><category>ESP32</category><category>C++</category>
      <enclosure url="https://jmrp.io/_astro/etm-vault.C8o0yMe6_Z17XS9E.jpeg" length="118821" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/etm-vault.C8o0yMe6_Z17XS9E.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/etm-vault.C8o0yMe6_ZM0bjg.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>What the Linker Won&apos;t Do: Packing i18n Strings on an MCU</title>
      <link>https://jmrp.io/blog/010-packed-i18n-string-pool/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/010-packed-i18n-string-pool/</guid>
      <description>A build-time generator packs firmware UI translations into one string pool indexed by uint16 offsets, halving the index table on a 32-bit MCU.</description>
      <content:encoded><![CDATA[A build-time generator packs firmware UI translations into one string pool indexed by uint16 offsets, halving the index table on a 32-bit MCU.<br/><br/><a href="https://jmrp.io/blog/010-packed-i18n-string-pool/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>Firmware</category><category>C++</category><category>Embedded</category><category>ESP32</category>
      <enclosure url="https://jmrp.io/_astro/string-pool.BGewPjZw_Z1M04tm.jpeg" length="67301" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/string-pool.BGewPjZw_Z1M04tm.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/string-pool.BGewPjZw_ZQDXfb.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>Running a Tor Bridge on Linux: obfs4 and WebTunnel Guide</title>
      <link>https://jmrp.io/blog/009-running-tor-bridge/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/009-running-tor-bridge/</guid>
      <description>Guide to running obfs4 and WebTunnel Tor bridges on Linux with Nginx camouflage, firewall hardening, Prometheus monitoring, and CrowdSec.</description>
      <content:encoded><![CDATA[Guide to running obfs4 and WebTunnel Tor bridges on Linux with Nginx camouflage, firewall hardening, Prometheus monitoring, and CrowdSec.<br/><br/><a href="https://jmrp.io/blog/009-running-tor-bridge/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>Privacy</category><category>Linux</category><category>Security</category><category>Nginx</category>
      <enclosure url="https://jmrp.io/_astro/tor-bridge.BiQHZ2_S_ZBQgTr.jpeg" length="72564" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/tor-bridge.BiQHZ2_S_ZBQgTr.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/tor-bridge.BiQHZ2_S_ZOe5LX.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>MikroTik PPPoE + DHCPv6-PD: Dual-Stack for DIGI Spain</title>
      <link>https://jmrp.io/blog/008-mikrotik-pppoe-dualstack-digi/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/008-mikrotik-pppoe-dualstack-digi/</guid>
      <description>Configure PPPoE with DHCPv6 Prefix Delegation on MikroTik RouterOS for DIGI Spain. VLAN tagging, SLAAC, prefix change handling, and firewall rules.</description>
      <content:encoded><![CDATA[Configure PPPoE with DHCPv6 Prefix Delegation on MikroTik RouterOS for DIGI Spain. VLAN tagging, SLAAC, prefix change handling, and firewall rules.<br/><br/><a href="https://jmrp.io/blog/008-mikrotik-pppoe-dualstack-digi/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>MikroTik</category><category>IPv6</category><category>Networking</category>
      <enclosure url="https://jmrp.io/_astro/pppoe-dualstack.C44lrFBg_1gdnIu.jpeg" length="101633" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/pppoe-dualstack.C44lrFBg_1gdnIu.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/pppoe-dualstack.C44lrFBg_scX1F.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>MikroTik WireGuard VPN: Dual-Stack IPv4/IPv6 Configuration</title>
      <link>https://jmrp.io/blog/007-mikrotik-wireguard-dual-stack-vpn/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/007-mikrotik-wireguard-dual-stack-vpn/</guid>
      <description>Configure WireGuard VPN on MikroTik RouterOS with full IPv4/IPv6 dual-stack. Access your home network with native IPv6 from any connection.</description>
      <content:encoded><![CDATA[Configure WireGuard VPN on MikroTik RouterOS with full IPv4/IPv6 dual-stack. Access your home network with native IPv6 from any connection.<br/><br/><a href="https://jmrp.io/blog/007-mikrotik-wireguard-dual-stack-vpn/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>MikroTik</category><category>Networking</category><category>IPv6</category><category>Security</category>
      <enclosure url="https://jmrp.io/_astro/wireguard-vpn.DdPgKY21_8aNN7.jpeg" length="77801" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/wireguard-vpn.DdPgKY21_8aNN7.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/wireguard-vpn.DdPgKY21_Z1601EH.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>MikroTik Honeypot: Trap &amp; Auto-Block Port Scanners</title>
      <link>https://jmrp.io/blog/006-implementing-mikrotik-honeypot/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/006-implementing-mikrotik-honeypot/</guid>
      <description>Configure a MikroTik honeypot to detect port scanners, log malicious activity, and auto-block attackers using firewall address lists and the RAW table.</description>
      <content:encoded><![CDATA[Configure a MikroTik honeypot to detect port scanners, log malicious activity, and auto-block attackers using firewall address lists and the RAW table.<br/><br/><a href="https://jmrp.io/blog/006-implementing-mikrotik-honeypot/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Mon, 19 Jan 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>MikroTik</category><category>Security</category><category>Networking</category>
      <enclosure url="https://jmrp.io/_astro/mikrotik-honeypot.YuBOt8fe_ZFtDIy.jpeg" length="81169" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/mikrotik-honeypot.YuBOt8fe_ZFtDIy.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/mikrotik-honeypot.YuBOt8fe_Z2bDQpw.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>Implementing a Tarpit in Nginx: Trap Malicious Scanners</title>
      <link>https://jmrp.io/blog/005-implementing-tarpit-nginx/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/005-implementing-tarpit-nginx/</guid>
      <description>Implement an Nginx tarpit to slow down and trap malicious bots, vulnerability scanners, and brute-force attackers. Includes CrowdSec integration.</description>
      <content:encoded><![CDATA[Implement an Nginx tarpit to slow down and trap malicious bots, vulnerability scanners, and brute-force attackers. Includes CrowdSec integration.<br/><br/><a href="https://jmrp.io/blog/005-implementing-tarpit-nginx/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Fri, 16 Jan 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>Nginx</category><category>Security</category><category>Networking</category>
      <enclosure url="https://jmrp.io/_astro/tarpit-nginx.DfrqdDoq_Z1HoCY.jpeg" length="89898" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/tarpit-nginx.DfrqdDoq_Z1HoCY.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/tarpit-nginx.DfrqdDoq_Z2vg8KN.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>Mastering QUIC and HTTP/3 with Nginx: The Complete Guide</title>
      <link>https://jmrp.io/blog/004-enabling-quic-http3-nginx/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/004-enabling-quic-http3-nginx/</guid>
      <description>Deep dive into QUIC and HTTP/3 — technical architecture, security features, and step-by-step Nginx configuration for production deployment.</description>
      <content:encoded><![CDATA[Deep dive into QUIC and HTTP/3 — technical architecture, security features, and step-by-step Nginx configuration for production deployment.<br/><br/><a href="https://jmrp.io/blog/004-enabling-quic-http3-nginx/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Wed, 14 Jan 2026 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>Nginx</category><category>Networking</category><category>Security</category>
      <enclosure url="https://jmrp.io/_astro/http3-quic.C8KLxICs_Z1IMt6T.jpeg" length="53634" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/http3-quic.C8KLxICs_Z1IMt6T.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2026 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/http3-quic.C8KLxICs_Z1Ps7S6.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>Content Security Policy (CSP) with Nginx: The Complete Guide</title>
      <link>https://jmrp.io/blog/003-implementing-content-security-policy-nginx/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/003-implementing-content-security-policy-nginx/</guid>
      <description>Master Content Security Policy from zero to A+ — nonces, hashes, strict-dynamic, Trusted Types, bypass prevention, and production Nginx configs.</description>
      <content:encoded><![CDATA[Master Content Security Policy from zero to A+ — nonces, hashes, strict-dynamic, Trusted Types, bypass prevention, and production Nginx configs.<br/><br/><a href="https://jmrp.io/blog/003-implementing-content-security-policy-nginx/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Fri, 19 Dec 2025 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>Nginx</category><category>Security</category><category>Cryptography</category>
      <enclosure url="https://jmrp.io/_astro/csp-shield.CvlyYtvT_15HwsQ.jpeg" length="76174" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/csp-shield.CvlyYtvT_15HwsQ.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2025 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/csp-shield.CvlyYtvT_2bfIdg.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>Mastering Virtual Files in Nginx: A Complete Guide</title>
      <link>https://jmrp.io/blog/002-serve-virtual-files-nginx/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/002-serve-virtual-files-nginx/</guid>
      <description>Serve virtual files in Nginx without disk I/O. Covers root vs alias vs try_files, named locations, Kubernetes health endpoints, and containers.</description>
      <content:encoded><![CDATA[Serve virtual files in Nginx without disk I/O. Covers root vs alias vs try_files, named locations, Kubernetes health endpoints, and containers.<br/><br/><a href="https://jmrp.io/blog/002-serve-virtual-files-nginx/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>Nginx</category><category>DevOps</category><category>Security</category>
      <enclosure url="https://jmrp.io/_astro/virtual-files.DAK3Yu55_Z2tJmKC.jpeg" length="94102" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/virtual-files.DAK3Yu55_Z2tJmKC.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2025 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/virtual-files.DAK3Yu55_7SpNL.jpeg" width="400" height="267" />

    </item>
    <item>
      <title>Mastering Mutual TLS (mTLS) with Nginx: A Deep Dive</title>
      <link>https://jmrp.io/blog/001-secure-nginx-client-certificates/</link>
      <guid isPermaLink="true">https://jmrp.io/blog/001-secure-nginx-client-certificates/</guid>
      <description>Implement Mutual TLS (mTLS) with Nginx — create a CA, generate client certificates, configure CRL and OCSP revocation, and enable Zero Trust.</description>
      <content:encoded><![CDATA[Implement Mutual TLS (mTLS) with Nginx — create a CA, generate client certificates, configure CRL and OCSP revocation, and enable Zero Trust.<br/><br/><a href="https://jmrp.io/blog/001-secure-nginx-client-certificates/">Continue reading on jmrp.io →</a>]]></content:encoded>
      <pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate>
      <author>mail@jmrp.io (José Manuel Requena Plens)</author>
      <category>Nginx</category><category>Security</category><category>Cryptography</category>
      <enclosure url="https://jmrp.io/_astro/mtls-auth.CdKubsth_Z1KUGkY.jpeg" length="44712" type="image/jpeg" />
<media:content url="https://jmrp.io/_astro/mtls-auth.CdKubsth_Z1KUGkY.jpeg" medium="image" type="image/jpeg" width="1200" height="800">
      <media:credit role="author">José Manuel Requena Plens</media:credit>
      <media:copyright url="https://jmrp.io/license/#covers">© 2025 José Manuel Requena Plens</media:copyright>
      <media:license type="text/html" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</media:license>
      </media:content>
<media:thumbnail url="https://jmrp.io/_astro/mtls-auth.CdKubsth_Ztf2ub.jpeg" width="400" height="267" />

    </item>
  </channel>
</rss>