If you were to go do a search on the internet for “configuring SSL” you would find a ton of references on configuring your favorite web server to do SSL some of it good and some of it not so good. But what you don’t see a lot of content on is how to deploy it successfully.
What do I mean by successfully? These articles ignore the larger picture, for example:
- Are there changes to your content you will need to make?
- What about external content and script references?
- Are there any SEO considerations?
- Are there other related considerations?
To some these things may be common-sense but even for those a refresher never hurt so lets go over them again briefly.
Are there changes to your content you will need to make?
Probably, lots of content I encounter explicitly references a protocol serving it (aka href=”http://…” and src=”http://…”) and if that’s the way your content looks then yes you will want to update your content to use relative references, for example
href=”//{hostname}/{uri}”
src=”/{uri}”
This way your content is independent of what protocols are used to transport it, it will also help prevent your users from encountering “mixed content” warnings.
What about external content and script references?
Another scenario that causes mixed content warnings is when sites use of scripts and content hosted on other servers that is explicitly referenced over HTTP. The two most common I encounter are YouTube Embeds and Google Analytics but there are lots of different third-party content and scripts out there and each one you embed will also need to support SSL.
Thankfully I have never encountered one that does not support SSL and in most cases you will just need to make the reference relative (“//”) and let the browser decide what protocol to use to get the reference. In the very rare cases where this does not work a quick email to support at the content/script provider will get you the URL to the SSL version of the content/script.
Though this has always been the case one thing to keep in mind is that the perceived performance and actual security of your site is dependent on the performance and security of the providers you include in it. I strongly recommend you check their performance and SSL configuration and ask them to make any changes necessary to address issues this might identify.
Are there any SEO considerations?
Aren’t there always? So to achieve all of security benefits of SSL you have to deploy SSL across your entire site (this is commonly referred to as Always On SSL). This means that as far as a search engine is concerned there could be two copies of the same content. This is treated as a negative condition in most page ranking schemes, we address this in a few ways:
1. Tell the search engine which content is authoritative (aka which one we want them to index), we do this using:
- Updating <link rel=”canonical”> to point to the HTTPS version.
- Updating the XML Sitemap to refer to the HTTPS version of the content.
Making these two changes ensures the search engine will index the SSL version of the site so the first link the user visits will be your HTTPS version.
These things not only improve the users experience by making them get at the content quicker (instead of relying on a rewrite rule to get them to the HTTPS content) but also help to mitigate MITM attacks that would be possible for organic traffic based on your HTTP urls.
2. Ensure the robots.txt is available over SSL.
3. Redirect all HTTP requests to your site to the HTTPs version using a permanent redirect (a HTTP 301), this will transfer your PageRank to the SSL url.
4. Update the search engine webmaster tools to refer to the HTTPS url instead of the HTTP URL.
Are there other considerations?
There are a few, for one there is performance. There is a myth that SSL is computationally expensive, it’s simply not true (at least today) but that doesn’t mean you don’t need to be concerned with performance.
There are several settings you care about, for example it’s common for websites to use domain sharding means when you’re using SSL is each one of those requests represents a new SSL negotiation and the negotiation is the most costly part of the SSL session. While we can’t eliminate this cost we can ensure that the servers terminating our SSL sessions implement session caching and reuse to reduce the impact of the SSL overhead. We can also try to limit the number of domains we use when sharding so reduce the number of SSL sessions needed to finish rendering a site.
You may also want to look at deploying a forward proxy in front of your web servers where all SSL would be terminated; this can give you performance benefits beyond SSL and can simplify key and SSL management in your environment at the same time.
Then there is the question of cookies, while all sensitive cookies should already be marked “secure” so they won’t get sent over non-secure sessions you should consider marking all cookies as “secure” since the whole site is now supposed to be served over SSL.
Depending on how you have authored your rewrite rules there may be static references to HTTP buried in there, you will want to review your rewites to ensure they are protocol independent (where appropriate) so that you don’t end up forcing users through an unnecessary redirect.
And finally setting the HTTP Strict Transport Security header means browsers will visit you over HTTPS the every time, even if not from search results; this will improve relative perceived performance and help protect from MITM attacks.
Ryan
Resources
1. Choose the Right Certificate, CA Security
2. Deploying SSL – How to get your server configuration right, Ryan Hurst
3. SSL Configuration Checker, X509 Labs
4. SSL Pulse, Trustworthy Internet Movement
5. Bulletproof SSL/TLS and PKI, Ivan Ristic
6. High Performance Browser Networking, Ilya Grigorik
7. How to get the latest stable OpenSSL, Apache and Nginx, Ryan Hurst
8. Always On SSL, OTA
9. Revocation Report, X509 Labs
10. SSL/TLS Deployment Best Practices, Qualys Labs
11. Transport Layer Security, WikiPedia
12. How to botch TLS forward secrecy, AGL