<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SSL on Upsonar Blog</title><link>https://upsonar.io/blog/categories/ssl/</link><description>Recent content in SSL on Upsonar Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 19 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://upsonar.io/blog/categories/ssl/index.xml" rel="self" type="application/rss+xml"/><item><title>Why Most SSL Certificate Monitors Are Blind (And How to Fix It)</title><link>https://upsonar.io/blog/why-most-ssl-monitors-are-blind/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><guid>https://upsonar.io/blog/why-most-ssl-monitors-are-blind/</guid><description>&lt;p>Google &amp;ldquo;golang check ssl certificate&amp;rdquo; and every example looks like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">conn&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">_&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">tls&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Dial&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;tcp&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;example.com:443&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="nx">tls&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Config&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nx">InsecureSkipVerify&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">cert&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">conn&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">ConnectionState&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="nx">PeerCertificates&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">fmt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">cert&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">NotAfter&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// 2026-03-16&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>53 days left. Great. Ship it.&lt;/p>
&lt;p>But your monitor just became blind to 3 out of 4 certificate problems.&lt;/p>
&lt;h2 id="the-insecureskipverify-trap">The InsecureSkipVerify trap&lt;/h2>
&lt;p>&lt;code>InsecureSkipVerify: true&lt;/code> skips all certificate validation - expiry, trust chain, hostname match. The connection is still encrypted, but Go won&amp;rsquo;t check if the cert is actually valid.&lt;/p>
&lt;p>Why do examples use it? Without it, Go refuses to connect if anything is wrong. You get an error instead of certificate details. For a quick script, that&amp;rsquo;s inconvenient.&lt;/p></description></item></channel></rss>