<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: WRVault</title>
    <description>The latest articles on DEV Community by WRVault (@wrtech).</description>
    <link>https://dev.to/wrtech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3936527%2F001793a2-3df0-444e-aa87-549747db7302.png</url>
      <title>DEV Community: WRVault</title>
      <link>https://dev.to/wrtech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wrtech"/>
    <language>en</language>
    <item>
      <title>Managing TLS certificates and JWT keys is still a mess in 2026 — so I built a tool</title>
      <dc:creator>WRVault</dc:creator>
      <pubDate>Sun, 17 May 2026 16:22:44 +0000</pubDate>
      <link>https://dev.to/wrtech/managing-tls-certificates-and-jwt-keys-is-still-a-mess-in-2026-so-i-built-a-tool-259f</link>
      <guid>https://dev.to/wrtech/managing-tls-certificates-and-jwt-keys-is-still-a-mess-in-2026-so-i-built-a-tool-259f</guid>
      <description>&lt;p&gt;Not my finest moment, but I was the person who let a prod cert expire because the renewal reminder was buried in an email thread from six months ago. One nginx 502, one very unhappy on-call rotation, and a genuinely embarrassing post-mortem.&lt;/p&gt;

&lt;p&gt;The fix took about 20 minutes. The conversation about "why don't we have a proper process for this" took two hours and went nowhere. The answer was always some variation of "we'll automate it eventually" or "just use Vault" — as if standing up HashiCorp Vault is something you do on a Tuesday afternoon.&lt;/p&gt;

&lt;p&gt;That stuck with me. Not because certificate management is particularly hard, but because the gap between "I have a cron job and a wiki page" and "I have actual infrastructure" is enormous, and nobody's really filled it for smaller teams.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://wrvault.com" rel="noopener noreferrer"&gt;WRVault&lt;/a&gt;. Took about two months working evenings and weekends.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually does
&lt;/h2&gt;

&lt;p&gt;The core of it is managing two things that are more related than people treat them: mTLS certificates and JWT signing keys. Both expire. Both need to be distributed somewhere. Both break things silently when you forget about them.&lt;/p&gt;

&lt;p&gt;For certs you get generation (PEM, DER, PKCS#12), configurable expiry alerts over Slack or Discord or email, and auto-rotation. For JWT keys you get RSA/ECDSA key pairs with a live JWKS endpoint — so your consumers hit a URL instead of you manually pushing a new public key every time you rotate.&lt;/p&gt;

&lt;p&gt;There's a REST API and a GitHub Actions step (&lt;code&gt;wrvault-action@v1&lt;/code&gt;) if you want to pull certs or keys in CI without thinking about it.&lt;/p&gt;

&lt;p&gt;That's mostly it. I deliberately didn't try to build the next Vault. The scope is narrow on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  The free tools
&lt;/h2&gt;

&lt;p&gt;While I was building, I kept hitting the same annoyance: needing to quickly inspect a JWT or decode a CSR, opening some sketchy website, and pasting in something I probably shouldn't be pasting into a random server.&lt;/p&gt;

&lt;p&gt;I ended up adding a set of tools that run entirely client-side — Web Crypto API, no backend calls, nothing leaves the browser. Partly because they're useful, partly because I wanted SEO surface area, I'll be honest about that.&lt;/p&gt;

&lt;p&gt;The ones I actually use day to day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://wrvault.com/tools/jwt-decode" rel="noopener noreferrer"&gt;JWT Decoder&lt;/a&gt;&lt;/strong&gt; — paste a token, see the header and payload. I know you can do this with &lt;code&gt;atob&lt;/code&gt; in the console but this is faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://wrvault.com/tools/csr-decoder" rel="noopener noreferrer"&gt;CSR Decoder&lt;/a&gt;&lt;/strong&gt; — shows subject, key type, SANs. Useful when you're handed a CSR and need to verify it before signing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://wrvault.com/tools/cert-chain" rel="noopener noreferrer"&gt;Cert Chain Validator&lt;/a&gt;&lt;/strong&gt; — paste your leaf + intermediates + root, tells you if the ordering is wrong. This one's saved me twice already.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://wrvault.com/tools/pem-to-jwk" rel="noopener noreferrer"&gt;PEM ↔ JWK converter&lt;/a&gt;&lt;/strong&gt; — does what it says, handles RSA and EC, also extracts the public key from an X.509 cert if you need the JWK for a JWKS endpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full list is &lt;a href="https://wrvault.com" rel="noopener noreferrer"&gt;here&lt;/a&gt; if you want the rest (UUID generator, AES encrypt/decrypt, hash generator, JWE, Base64).&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it's at
&lt;/h2&gt;

&lt;p&gt;It's live, it's in production, I'm using it myself. Free tier exists. Pro is $3.99/month if you want more than the basics.&lt;/p&gt;

&lt;p&gt;I'm not going to pretend it's for everyone — if you're already running Vault or your cloud provider handles all of this, you probably don't need it. But if you're a small team and your current cert management is "one person who knows where the files are," it might be worth a look.&lt;/p&gt;

&lt;p&gt;Curious if anyone else has a setup they're happy with for this, or if the 3am cert expiry story is as universal as I suspect it is.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>devops</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
