<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>ssl &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/ssl/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Mon, 25 Aug 2025 13:29:25 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>ssl &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Should you use Let's Encrypt for internal hostnames?]]></title>
		<link>https://shkspr.mobi/blog/2022/01/should-you-use-lets-encrypt-for-internal-hostnames/</link>
					<comments>https://shkspr.mobi/blog/2022/01/should-you-use-lets-encrypt-for-internal-hostnames/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 05 Jan 2022 12:34:08 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssl]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=41580</guid>

					<description><![CDATA[Julien Savoie has written a brilliant post explaining how you can enable https on your intranet.  This is useful for several reasons. It means your employees aren&#039;t constantly fighting browser warnings when trying to submit stuff internally. All your http traffic is encrypted. You don&#039;t need to install a self-generated root certificate on devices. Lovely!  But there&#039;s a downside. Every TLS…]]></description>
										<content:encoded><![CDATA[<p>Julien Savoie has written a brilliant post explaining <a href="https://jsavoie.github.io/2021/06/01/letsencrypt.html">how you can enable https on your <em>intra</em>net</a>.</p>

<p>This is useful for several reasons. It means your employees aren't constantly fighting browser warnings when trying to submit stuff internally. All your http traffic is encrypted. You don't need to install a self-generated root certificate on devices. Lovely!</p>

<p>But there's a downside. Every TLS certificate created by Let's Encrypt is recorded in a <a href="https://letsencrypt.org/docs/ct-logs/">Certificate Transparency log</a>.  These CT logs are primarily to detect <a href="https://certificate.transparency.dev/">maliciously or mistakenly issued certificates</a>. For example, you can look through them and see that someone unauthorised has created a cert for your domain - or its sub-domains.</p>

<p>But there is a downside. The CT logs are <em>public</em> and can be searched. Here's <a href="https://crt.sh/?q=twitter.com">all the certificates issued for Twitter's sub-domains</a>.</p>

<p>There are a few ways that this can be dangerous for use with <em>internal</em> services.</p>

<p>Firstly, it aides reconnaissance for attackers. Having a "map" of your internal infrastructure is useful. Especially if you have "obviously" named servers like <code>exchange.example.com</code> or <code>customerdata.example.com</code>.  Also handy for social engineering - who else but someone internal would know that <code>gandalf.example.com</code> was a valid server?</p>

<p>Secondly, it might expose some vulnerabilities - depending on how you name things. Let's hope you don't have <code>log4j.example.com</code>!</p>

<p>Thirdly, there's the potential for espionage. Do you want your competitors knowing that you've got <code>olympics-campaign.staging.example.com</code>?</p>

<p>I'm sure you can think of a few other ways this could be used for mischief and mayhem.</p>

<p>As I wrote a few years ago, "<a href="https://shkspr.mobi/blog/2017/11/theres-no-https-for-the-internet-of-things/">There's no HTTPS for the Internet of Things</a>". Internal networks which only have IP addresses cannot use TLS certificates. OK, so you decide to have an internal DNS - now the whole world knows you have <code>doorbell-model-xyz.myhome.example.com</code>!</p>

<p>The only real answer to this is to use <a href="https://community.letsencrypt.org/t/acme-v2-production-environment-wildcards/55578">Wildcard Certificates</a>.  You can get a TLS certificate for <code>*.internal.example.com</code></p>

<p>This requires setting up a <a href="https://letsencrypt.org/docs/challenge-types/#dns-01-challenge">DNS-01 Challenge</a> - which can be more difficult to configure and has some non-obvious risks. And, sadly, <a href="https://blog.sean-wright.com/wildcard-certs-not-quite-the-star/">Wildcard certificates come with their own difficulties</a>.</p>

<h2 id="recap"><a href="https://shkspr.mobi/blog/2022/01/should-you-use-lets-encrypt-for-internal-hostnames/#recap">Recap</a></h2>

<p>I don't think there's a good solution to this.</p>

<ul>
<li>Self-signed certificates require something to be installed on all clients. Not always possible with BYOD.</li>
<li>Named LE certificates expose details of your infrastructure which you may wish to keep private.</li>
<li>Wildcard certificates require a heightened level of co-ordination and management.</li>
</ul>

<p>These problems <a href="https://news.ycombinator.com/item?id=19353294">have all been discussed before</a>. But I can't help but wishing that there was something obvious I'm missing.</p>

<p>How would you solve this knotty problem?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=41580&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/01/should-you-use-lets-encrypt-for-internal-hostnames/feed/</wfw:commentRss>
			<slash:comments>29</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Minor Reddit Security Bug Fixed]]></title>
		<link>https://shkspr.mobi/blog/2014/12/minor-reddit-security-bug-fixed/</link>
					<comments>https://shkspr.mobi/blog/2014/12/minor-reddit-security-bug-fixed/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 02 Dec 2014 12:11:46 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[reddit]]></category>
		<category><![CDATA[ssl]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=20114</guid>

					<description><![CDATA[I&#039;m the sort of hip cat who frequents Internet Bulletin Boards. Recently I found myself needing to verify the email address associated with my Reddit account.  The email I received from Reddit was charmingly lo-fi and eschewed those bourgeois capital letters.    Notice the (teensy tiny) flaw?  Yup, it&#039;s using vanilla &#34;http&#34; rather than the super secure &#34;https&#34;.  Earlier this year, Reddit switched …]]></description>
										<content:encoded><![CDATA[<p>I'm the sort of hip cat who frequents Internet Bulletin Boards. Recently I found myself needing to verify the email address associated with my Reddit account.</p>

<p>The email I received from Reddit was charmingly lo-fi and eschewed those bourgeois capital letters.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2014/11/Reddit-Email-Verification-fs8.png" alt="Reddit Email Verification" width="600" height="242" class="aligncenter size-full wp-image-20115">

<p>Notice the (teensy tiny) flaw?  Yup, it's using vanilla "http" rather than the super secure "https".</p>

<p>Earlier this year, <a href="https://web.archive.org/web/20141028032945/http://www.redditblog.com/2014/09/hell-its-about-time-reddit-now-supports.html">Reddit switched on SSL for their entire site</a>.  Somewhat annoyingly though, they do not <em>force</em> SSL for the site.  If you want to ensure all your sessions are encrypted, you have to <a href="https://ssl.reddit.com/prefs/security">manually set it up in your preferences</a>.</p>

<p>I find that a little disappointing. I know that there is a cost associated with 100% SSL coverage on a major site like Reddit, but surely <em>because</em> of the site's popularity they should mandate it?</p>

<p>Anyway, I reported this minor problem to the <a href="https://www.reddit.com/r/Bugs">security email address listed on their bugs page</a>.  A few minutes later, they replied.</p>

<blockquote><p>Thanks for the report! While I don't believe there's any vulnerability introduced if we leak the verification token here (being that the intended recipient must have wanted to verify it if they clicked it, and tokens are tied to both the email and account,) I've got a fix for this that should go out this week.</p></blockquote>

<p>A day or two later and <a href="https://github.com/reddit/reddit/commit/9f1f5a29fa5ded19f6a5ab0a42fa9841d1e72460">it was fixed</a>.</p>

<p>I'm trying <strong>really</strong> hard to come up with a malicious use for a MITM attack on this.  There's not much.</p>

<p>The "dest" parameter doesn't appear to be hackable. It won't point to any site other than Reddit.  So you can't redirect the user to a malicious site.  What you <em>can</em> do is redirect to any Reddit post or page.  Perhaps sending someone to a particularly disgusting post could be <em>legally disadvantageous</em>?</p>

<p>Of course, a malicious actor on the network could sniff the user's login credentials if the user hadn't noticed the lack of HTTPS.</p>

<p>So, there we are. A minor bug, swiftly fixed - and a general reminder that when you switch on HTTPS, make sure <em>all</em> of your communications with your users are updated to reflect that fact.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=20114&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2014/12/minor-reddit-security-bug-fixed/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[WebDAV, SSL Handshake, OwnCloud, CloudFlare, and Ubuntu 12.04]]></title>
		<link>https://shkspr.mobi/blog/2014/11/webdav-ssl-handshake-owncloud-cloudflare-and-ubuntu-12-04/</link>
					<comments>https://shkspr.mobi/blog/2014/11/webdav-ssl-handshake-owncloud-cloudflare-and-ubuntu-12-04/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 01 Nov 2014 11:33:39 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=11212</guid>

					<description><![CDATA[Right, that&#039;s enough keyword stuffing!  I&#039;ve been trying to mount an OwnCloud instance via WebDAV.  I kept receiving the error  Mounting failed. SSL handshake failed: SSL error: sslv3 alert handshake failure  Or  SSL handshake failed: SSL alert received: Handshake failed  The route of this problem seems to be that the version of libneon (the WebDAVS connector library) shipped with Ubuntu 12.04…]]></description>
										<content:encoded><![CDATA[<p><img src="https://shkspr.mobi/blog/wp-content/uploads/2014/11/OwnCloud-Logo.png" alt="OwnCloud Logo" width="595" height="311" class="aligncenter size-full wp-image-11215">
Right, that's enough keyword stuffing!</p>

<p>I've been trying to mount an OwnCloud instance via WebDAV.  I kept receiving the error</p>

<pre>Mounting failed. SSL handshake failed: SSL error: sslv3 alert handshake failure</pre>

<p>Or</p>

<pre>SSL handshake failed: SSL alert received: Handshake failed</pre>

<p>The route of this problem seems to be that the version of libneon (the WebDAVS connector library) shipped with Ubuntu 12.04 doesn't play nicely with the SSL certificates issued by CloudFlare.</p>

<p>Here's the solution I discovered.</p>

<p>Grab <a href="http://www.webdav.org/neon/neon-0.30.1.tar.gz">libneon 30.1</a> - and extract it to a directory.</p>

<p>Compile</p>

<pre>./configure --prefix=/usr --enable-shared --with-ssl=openssl --disable-static
make
sudo make install
</pre>

<p>We now need to replace the old libneon-gnutls.so - and we want the end result to look like</p>

<pre>/usr/lib/libneon-gnutls.so.27 -&gt; /usr/lib/libneon.so.27
/usr/lib/libneon.so -&gt; libneon.so.27.3.1
/usr/lib/libneon.so.27 -&gt; libneon.so.27.3.1
</pre>

<p>First, back up the old version.</p>

<pre>sudo mv /usr/lib/libneon-gnutls.so.27 /usr/lib/libneon-gnutls.so.27.old</pre>

<p>Then, in /usr/lib/</p>

<pre>sudo ln -s /usr/lib/libneon.so.27.3.1 libneon.so.27
sudo ln -s /usr/lib/libneon-gnutls.so.27.3.1 libneon.so
sudo ln -s /usr/lib/libneon.so.27 libneon-gnutls.so.27
</pre>

<p>Then, to mount the directory.</p>

<pre>sudo mount -t davfs -o uid=me,gid=users https://example/owncloud/remote.php/webdav/ /mount/remote</pre>

<p>(Where "me" is your user name.)</p>

<p>That made everything work!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=11212&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2014/11/webdav-ssl-handshake-owncloud-cloudflare-and-ubuntu-12-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Path - Privacy & Security Problems]]></title>
		<link>https://shkspr.mobi/blog/2012/01/path-privacy-security-problems/</link>
					<comments>https://shkspr.mobi/blog/2012/01/path-privacy-security-problems/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 16 Jan 2012 11:19:43 +0000</pubDate>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssl]]></category>
		<guid isPermaLink="false">http://shkspr.mobi/blog/?p=5261</guid>

					<description><![CDATA[I&#039;m trying out the new Android app for Path - the new social networking service.  I&#039;ve discovered something rather troubling...  Most of the app&#039;s communication with the Path servers is over SSL.  This means that no-one can see the data you&#039;re sending and receiving.  If there are snoops on your network, they will only be able to see the encrypted data flowing back and forth.  In general, this is…]]></description>
										<content:encoded><![CDATA[<p>I'm trying out the new Android app for Path - the new social networking service.  I've discovered something rather troubling...</p>

<p>Most of the app's communication with the Path servers is over SSL.  This means that no-one can see the data you're sending and receiving.  If there are snoops on your network, they will only be able to see the encrypted data flowing back and forth.  In general, this is a good thing.</p>

<p>Apart from images.  If your friends are posting images, they are sent over http.  <strong>No security</strong>.  Anyone monitoring your network connection will be able to see all the images you're viewing.</p>

<p>Now, that's bad enough - but it turns out that all the images you <em>send</em> are visible to the the world even if you've set your post to private.</p>

<p>The images are sent over SSL, but as soon as you return to your "Path", a thumbnail is shown of what you've just posted!</p>

<p>Here's a picture of the logs, so you can see what's happening.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2012/01/path-ssl.png" alt="path ssl" title="path ssl" width="600" height="339" class="aligncenter size-full wp-image-5262">

<p>So, every image you post or see - including the avatars of your friends - are visible to all.  A rather serious security and privacy problem.</p>

<p>Oh, does anyone know what the unencrypted call to "sendgrid.net" is all about?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=5261&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2012/01/path-privacy-security-problems/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[A (Minor) Twitter Privacy Bug?]]></title>
		<link>https://shkspr.mobi/blog/2011/05/a-minor-twitter-privacy-bug/</link>
					<comments>https://shkspr.mobi/blog/2011/05/a-minor-twitter-privacy-bug/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 09 May 2011 12:00:03 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[twitter]]></category>
		<guid isPermaLink="false">http://shkspr.mobi/blog/?p=4045</guid>

					<description><![CDATA[Quick Summary  Twitter&#039;s secure API hides the contents of the tweets you are reading. But it doesn&#039;t hide the images of those you converse with.  Raised as Issue 2175.  A Bit More Detail  Twitter has a secure (HTTPS) and insecure (HTTP) API.  When calling the secure API, all the content of the returned message (tweets) are encrypted.  Eavesdroppers only see the cipher-text - essentially garbage.  …]]></description>
										<content:encoded><![CDATA[<h2 id="quick-summary"><a href="https://shkspr.mobi/blog/2011/05/a-minor-twitter-privacy-bug/#quick-summary">Quick Summary</a></h2>

<p>Twitter's secure API hides the contents of the tweets you are reading. But it doesn't hide the images of those you converse with.</p>

<p><a href="http://code.google.com/p/twitter-api/issues/detail?id=2175">Raised as Issue 2175</a>.</p>

<h2 id="a-bit-more-detail"><a href="https://shkspr.mobi/blog/2011/05/a-minor-twitter-privacy-bug/#a-bit-more-detail">A Bit More Detail</a></h2>

<p>Twitter has a secure (HTTPS) and insecure (HTTP) API.</p>

<p>When calling the secure API, all the content of the returned message (tweets) are encrypted.  Eavesdroppers only see the cipher-text - essentially garbage.</p>

<p>However, within that cipher-text are links to <em>insecure</em> resources.</p>

<p>For example, a user requesting my tweets will get an object which contains a link to my avatar image.</p>

<p>Twitter is currently returning the <em>insecure</em> link:</p>

<pre>"profile_image_url" :
    "http://a2.twimg.com/profile_images/1283757621/Sketch_Avatar.jpg"</pre>

<p>Twitter should be returning the <em>secure</em> link:</p>

<pre>"profile_image_url" :
    "https://si0.twimg.com/profile_images/1283757621/Sketch_Avatar.jpg"</pre>

<h2 id="exploiting-this-weakness"><a href="https://shkspr.mobi/blog/2011/05/a-minor-twitter-privacy-bug/#exploiting-this-weakness">Exploiting This Weakness</a></h2>

<p>A user (Anna) will request the <em>encrypted</em> text of my tweets
She then requests the <em>unencrypted</em> image.
An eavesdropper (Eve) is listening in on the connection between Anna and Twitter.</p>

<pre>Anna ----&gt;Eve----&gt;Twitter  (Secure request)
Anna &lt;----Eve&lt;----Twitter  (Secure response)</pre>

<p>When Anna makes the initial request to Twitter, the malicious Eve can't see what they're talking about.</p>

<ul>
    <li>The request "http<strong>s</strong>://example.com/twitter/edent" is itself encrypted.  Eve only sees an encrypted request to example.com - not "twitter/edent</li>
    <li>The response containing all the tweets is also encrypted</li>
</ul>

<pre>Anna ----&gt;Eve----&gt;Images  (insecure request)
Anna &lt;----Eve&lt;----Twitter  (insecure response)
</pre>

<p>Anna then makes the subsequent request for the twitter user's image, a malicious user can see</p>

<ul>
    <li>The URI of the request.</li>
    <li>The content of the image.</li>
</ul>

<h2 id="impact"><a href="https://shkspr.mobi/blog/2011/05/a-minor-twitter-privacy-bug/#impact">Impact</a></h2>

<p>Truth is, this has a pretty low security impact.</p>

<ul>
    <li>There is no way to determine a user's name based on the URI for their image. (Unless you already have both).</li>
    <li>An eavesdropper has no way of knowing if the image is from the timeline, a reply, a DM, a search, a retweet, or the public timeline.</li>
    <li>Images may be locally cached by the user's browser - so frequency analysis isn't reliable.</li>
    <li>A malicious user <em>could</em> alter the image in transit.</li>
</ul>

<p>Worst case scenario is that if a malicious man-in-the-middle knows which images relate to which Twitter users, they know the intercepted user has seen at least one tweet from that user.</p>

<p>Let's say Anna is communicating with Bob.  Eve is trying to eavesdrop.
If Bob has never tweeted, and Eve sees repeated requests from Anna for Bob's avatar, she may reasonably surmise that they are exchanging DMs.</p>

<h2 id="overall"><a href="https://shkspr.mobi/blog/2011/05/a-minor-twitter-privacy-bug/#overall">Overall</a></h2>

<p>This is a pretty low-impact privacy risk.
It can be fixed by Twitter's API returning HTTPS URIs where possible.
In the meantime, developers can replace "http://a2.twimg.com/" with "https://si0.twimg.com".</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=4045&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2011/05/a-minor-twitter-privacy-bug/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
