{"id":282,"date":"2025-08-03T11:43:12","date_gmt":"2025-08-03T10:43:12","guid":{"rendered":"https:\/\/www.jgt.me.uk\/?p=282"},"modified":"2025-08-03T11:43:12","modified_gmt":"2025-08-03T10:43:12","slug":"ssl-stuff","status":"publish","type":"post","link":"https:\/\/www.jgt.me.uk\/?p=282","title":{"rendered":"SSL Stuff"},"content":{"rendered":"\n<p>Well that was&#8230; &#8230;fun? <\/p>\n\n\n\n<p>TL;DR; Updating SSL certs is a pain.<\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-5.png\" alt=\"\" class=\"wp-image-292\"\/><figcaption class=\"wp-element-caption\">Oooh, AI generated Image!<\/figcaption><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>When checking my SSL certs, I discovered that with chromium based browsers this site worked. But Firefox decided that the certificate was not secure. It then gave you no options to, &#8216;I know what I&#8217;m doing please let me go there&#8217;. That would have then allowed me to check the certificate in Firefox to tell you what was wrong with it. Doesn&#8217;t this sound like something Microsoft would do as well?<\/p>\n\n\n\n<p>So, i had to get the details from my CA server:<\/p>\n\n\n<p>\n<code><br \/>\ncurl -vI https:\/\/jgt.me.uk<br \/>\n* Host jgt.me.uk:443 was resolved.<br \/>\n* IPv6: (none)<br \/>\n* IPv4: 194.164.95.67<br \/>\n*   Trying 194.164.95.67:443...<br \/>\n* Connected to jgt.me.uk (194.164.95.67) port 443<br \/>\n* ALPN: curl offers h2,http\/1.1<br \/>\n* TLSv1.3 (OUT), TLS handshake, Client hello (1):<br \/>\n*  CAfile: \/etc\/ssl\/certs\/ca-certificates.crt<br \/>\n*  CApath: \/etc\/ssl\/certs<br \/>\n* TLSv1.3 (IN), TLS handshake, Server hello (2):<br \/>\n* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):<br \/>\n* TLSv1.3 (IN), TLS handshake, Certificate (11):<br \/>\n* TLSv1.3 (OUT), TLS alert, unknown CA (560):<br \/>\n* SSL certificate problem: unable to get local issuer certificate<br \/>\n* Closing connection<br \/>\ncurl: (60) SSL certificate problem: unable to get local issuer certificate<br \/>\nMore details here: https:\/\/curl.se\/docs\/sslcerts.html<\/p>\n<p>curl failed to verify the legitimacy of the server and therefore could not<br \/>\nestablish a secure connection to it. To learn more about this situation and<br \/>\nhow to fix it, please visit the web page mentioned above.<br \/>\n<\/code>\n<\/p>\n\n\n<p><\/p>\n\n\n\n<p><strong>So, there&#8217;s a problem.<\/strong><\/p>\n\n\n\n<p>I then had to log onto my plesk instance and the WordPress section, which told me nothing. Going to the &#8216;domains&#8217; section allowed me to get to the server hosting it.  Via the &#8220;SSL \/TLS Certificates&#8221; button, I could finally see that&#8230; &#8230;There was no issue!<\/p>\n\n\n\n<p>Well, at least as far as plesk was concerned.<\/p>\n\n\n\n<p>It turns out that the The <strong>leaf certificate<\/strong> was ok. But the <strong>intermediate certificate<\/strong> from &#8221; GeoTrust TLS RSA CA G1&#8243; was not included.<\/p>\n\n\n\n<p>Therefore, <code>curl<\/code> cannot validate the trust chain even though chromium based browsers like Chrome <em>might<\/em> accept it by filling in missing intermediates from their own stores.<\/p>\n\n\n\n<p>So, I needed to regenerate the <code>jgt.me.uk<\/code> cert. <\/p>\n\n\n\n<p>Could I find it on the 1&amp;1 IONOS site? Could I heck! This is despite using them last time to generate it. <\/p>\n\n\n\n<p>Ok, so I used one of the spare ones in my &#8220;Geotrust QuickSSL Premium&#8221;.  IONOS seem to be really focused on trying to make me spend more money with them. Almost every time i click on something it results in a &#8220;Do you want to buy this&#8221;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"656\" src=\"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-1-1024x656.png\" alt=\"\" class=\"wp-image-286\" srcset=\"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-1-1024x656.png 1024w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-1-300x192.png 300w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-1-768x492.png 768w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-1.png 1173w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Note that the &#8220;Recommended&#8221; is the one that asks you to shell out more cash to them.<\/p>\n\n\n\n<p>So when you &#8216;Activate&#8217; you get the choice to download the private key.  <\/p>\n\n\n\n<p>You&#8217;re then taken to the SSL Certificates page to download your crt and intermediate certs. No problem there either.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"191\" src=\"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-2-1024x191.png\" alt=\"\" class=\"wp-image-287\" srcset=\"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-2-1024x191.png 1024w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-2-300x56.png 300w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-2-768x144.png 768w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-2.png 1193w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The fun starts when you try to use this certificate in plesk after removing the old one:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"356\" src=\"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-3-1024x356.png\" alt=\"\" class=\"wp-image-288\" srcset=\"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-3-1024x356.png 1024w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-3-300x104.png 300w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-3-768x267.png 768w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-3-1536x534.png 1536w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-3-2048x712.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>What the Heck?<\/p>\n\n\n\n<p>You used to be able to chose something from the SSL Cert store in Plesk from that screen but now all you get is &#8220;buy something!&#8221;<\/p>\n\n\n\n<p>The observant among you probably are saying, &#8216;but there&#8217;s a &#8220;Upload Already Purchased Certificate&#8221; &#8216; option. Correct:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"525\" height=\"318\" src=\"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-4.png\" alt=\"\" class=\"wp-image-289\" srcset=\"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-4.png 525w, https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image-4-300x182.png 300w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/figure>\n\n\n\n<p>A <code>.pem<\/code> file, really? They don&#8217;t even tell you what&#8217;s expected in the file. <\/p>\n\n\n\n<p>After a bit of trial and error, you need to use:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your <code>.key<\/code><\/li>\n\n\n\n<li>Your <code>.cer<\/code><\/li>\n\n\n\n<li>The <code>intermediate1.cer<\/code><\/li>\n\n\n\n<li>And <code>intermediate1.cer<\/code><\/li>\n<\/ul>\n\n\n\n<p>All mashed up together and that&#8217;s your <code>.pem<\/code> file. I suppose if you&#8217;re doing this all the time you should probably know this, but I only do this once a year. (see: <a href=\"https:\/\/docs.progress.com\/bundle\/datadirect-hybrid-data-pipeline-installation-46\/page\/PEM-file-format.html\">https:\/\/docs.progress.com\/bundle\/datadirect-hybrid-data-pipeline-installation-46\/page\/PEM-file-format.html<\/a> ) for an example.<\/p>\n\n\n\n<p>After you have done this, and no got a working certificate, you <em><strong>then<\/strong> <\/em>can use the &#8216;Advanced&#8217; button to add that certificate to the site&#8217;s SSL store. <\/p>\n\n\n\n<p>I suppose its my fault for assuming I needed to remove the cert before I could add a new one. <\/p>\n\n\n\n<p>Anyways, its all working again. <\/p>\n\n\n\n<p>&#8216;Til next year.<\/p>\n\n\n\n<p>This was written to vent a little over how annoyingly difficult something seemingly simple like renewing your own certificate can be. If it&#8217;d used &#8220;Let&#8217;s Encrypt&#8221; (like I do for many of my other hosted sites), I would not be writing this!<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Well that was&#8230; &#8230;fun? TL;DR; Updating SSL certs is a pain. When checking my SSL certs, I discovered that with chromium based browsers this site worked. But Firefox decided that the certificate was not secure. It then gave you no <a class=\"more-link\" href=\"https:\/\/www.jgt.me.uk\/?p=282\">Continue reading <span class=\"screen-reader-text\">  SSL Stuff<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":283,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[45,44,1],"tags":[43,41,42,40,39,31],"class_list":["post-282","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-security","category-ssl","category-uncategorized","tag-43","tag-https","tag-ionos","tag-plesk","tag-ssl","tag-website"],"jetpack_featured_media_url":"https:\/\/www.jgt.me.uk\/wp-content\/uploads\/2025\/08\/image.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=\/wp\/v2\/posts\/282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=282"}],"version-history":[{"count":9,"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=\/wp\/v2\/posts\/282\/revisions"}],"predecessor-version":[{"id":297,"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=\/wp\/v2\/posts\/282\/revisions\/297"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=\/wp\/v2\/media\/283"}],"wp:attachment":[{"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jgt.me.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}