
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Mon, 13 Apr 2026 18:14:27 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Automatic (secure) transmission: taking the pain out of origin connection security]]></title>
            <link>https://blog.cloudflare.com/securing-origin-connectivity/</link>
            <pubDate>Mon, 03 Oct 2022 13:00:00 GMT</pubDate>
            <description><![CDATA[ Today we’re excited to announce that we will soon be offering a zero-configuration option for security on Cloudflare. If we find that we can automatically upgrade the security connection between Cloudflare and a user’s origin, we will ]]></description>
            <content:encoded><![CDATA[ <p><i></i></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/629MTo8freJ9xGG3KoHyvO/ac03192ec0ce5eb78c1396361a95d73b/image1-4.png" />
            
            </figure><p>In 2014, Cloudflare set out to encrypt the Internet by introducing <a href="/introducing-universal-ssl/">Universal SSL</a>. It made <a href="https://www.cloudflare.com/application-services/products/ssl/">getting an SSL/TLS certificate free and easy</a> at a time when doing so was neither free, nor easy. Overnight millions of websites had a secure connection between the user’s browser and Cloudflare.</p><p>But getting the connection encrypted from Cloudflare to the customer’s origin server was more complex. Since Cloudflare and all browsers supported SSL/TLS, the connection between the browser and Cloudflare could be instantly secured. But back in 2014 configuring an origin server with an SSL/TLS certificate was complex, expensive, and sometimes not even possible.</p><p>And so we relied on users to configure the best security level for their origin server. Later we added a service that detects and <a href="/ssl-tls-recommender/">recommends the highest level of security</a> for the connection between Cloudflare and the origin server. We also introduced free <a href="/cloudflare-ca-encryption-origin/">origin server certificates</a> for customers who didn’t want to get a certificate elsewhere.</p><p>Today, we’re going even further. Cloudflare will shortly find the most secure connection possible to our customers’ origin servers and use it, automatically. Doing this correctly, at scale, while not breaking a customer’s service is very complicated. This blog post explains how we are automatically achieving that highest level of security possible for those customers who don’t want to spend time configuring their SSL/TLS set up manually.</p>
    <div>
      <h3>Why configuring origin SSL automatically is so hard</h3>
      <a href="#why-configuring-origin-ssl-automatically-is-so-hard">
        
      </a>
    </div>
    <p>When we announced Universal SSL, we knew the <a href="/universal-ssl-encryption-all-the-way-to-the-origin-for-free/">backend security of the connection</a> between Cloudflare and the origin was a different and harder problem to solve.</p><p>In order to <a href="https://www.cloudflare.com/learning/security/glossary/website-security-checklist/">configure the tightest security</a>, customers had to procure a certificate from a third party and upload it to their origin. Then they had to indicate to Cloudflare that we should use this certificate to verify the identity of the server while also indicating the connection security capabilities of their origin. This could be an expensive and tedious process. To help alleviate this high set up cost, in 2015 Cloudflare <a href="/universal-ssl-encryption-all-the-way-to-the-origin-for-free/">launched a beta Origin CA service</a> in which we provided free limited-function certificates to customer origin servers. We also provided guidance on how to correctly configure and upload the certificates, so that secure connections between Cloudflare and a customer’s origin could be established quickly and easily.</p><p>What we discovered though, is that while this service was useful to customers, it still required a lot of configuration. We didn’t see the change we did with Universal SSL because customers still had to fight with their origins in order to upload certificates and test to make sure that they had configured everything correctly. And when you throw things like load balancers into the mix or servers mapped to different subdomains, handling server-side SSL/TLS gets even more complicated.</p><p>Around the same time as that announcement, <a href="https://letsencrypt.org/how-it-works/">Let’s Encrypt</a> and other services began offering certificates as a public CA for free, making TLS easier and paving the way for widespread adoption. Let’s Encrypt and Cloudflare had come to the same conclusion: by offering certificates for free, simplifying server configuration for the user, and working to streamline certificate renewal, they could make a tangible impact on the overall security of the web.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4ZURjaGV7W20VQb5GDkM0T/489e9677c3fb842e40273c8ad4563c52/image3-1.png" />
            
            </figure><p>The announcements of free and easy to configure certificates correlated with an increase in attention on origin-facing security. Cloudflare customers began requesting more documentation to configure origin-facing certificates and SSL/TLS communication that were performant and intuitive. In response, in 2016 we <a href="/cloudflare-ca-encryption-origin/">announced the GA of origin certificate authority</a> to provide cheap and easy origin certificates along with <a href="https://developers.cloudflare.com/ssl/origin-configuration/origin-ca/">guidance on how to best configure backend security</a> for any website.</p><p>The increased customer demand and attention helped pave the way for additional features that focused on backend security on Cloudflare. For example, <a href="https://developers.cloudflare.com/ssl/origin-configuration/authenticated-origin-pull">authenticated origin pull</a> ensures that only HTTPS requests from Cloudflare will receive a response from your origin, preventing an origin response from requests outside of Cloudflare. Another option, <a href="/tunnel-for-everyone/">Cloudflare Tunnel</a> can be set up to run on the origin servers, proactively establishing secure and private tunnels to the nearest Cloudflare data center. This configuration allows customers to completely lock down their origin servers to only receive requests routed through our network. For customers unable to lock down their origins using this method, we still encourage adopting the strongest possible security when configuring how Cloudflare should connect to an origin server.</p><p>Cloudflare currently offers five options for SSL/TLS configurability that we use when communicating with origins:</p><ul><li><p>In <b>Off</b> mode, as you might expect, traffic from browsers to Cloudflare and from Cloudflare to origins are not encrypted and will use plain text HTTP.</p></li><li><p>In <b>Flexible</b> mode, traffic from browsers to Cloudflare can be encrypted via HTTPS, but traffic from Cloudflare to the site's origin server is not. This is a common selection for origins that cannot support TLS, even though we recommend upgrading this origin configuration wherever possible. A guide for upgrading can be found <a href="https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/full/#required-setup">here</a>.</p></li><li><p>In <b>Full</b> mode, Cloudflare follows whatever is happening with the browser request and uses that same option to connect to the origin. For example, if the browser uses HTTP to connect to Cloudflare, we’ll establish a connection with the origin over HTTP. If the browser uses HTTPS, we’ll use HTTPS to communicate with the origin; however we will not validate the certificate on the origin to prove the identity and trustworthiness of the server.</p></li><li><p>In <b>Full (strict)</b> mode, traffic between Cloudflare follows the same pattern as in Full mode, however Full (strict) mode adds validation of the origin server’s certificate. The origin certificate can either be issued by a public CA like Let’s Encrypt or by <a href="https://developers.cloudflare.com/ssl/origin-configuration/origin-ca">Cloudflare Origin CA.</a></p></li><li><p>In <b>Strict</b> mode, traffic from the browser to Cloudflare that is HTTP or HTTPS will always be connected to the origin over HTTPS with a validation of the origin server’s certificate.</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4WSh4V7JAEnrGqsw6z6y89/ddabb274f5ceb7c55930b8429d17f5dd/image2-3.png" />
            
            </figure><p>What we have found in a lot of cases is that when customers initially signed up for Cloudflare, the origin they were using could not support the most advanced versions of encryption, resulting in origin-facing communication using unencrypted HTTP. These default values persisted over time, even though the origin has become more capable. We think the time is ripe to re-evaluate the entire concept of default SSL/TLS levels.</p><p>That’s why we will reduce the configuration burden for origin-facing security by <b>automatically</b> managing this on behalf of our customers. Cloudflare will provide a zero configuration option for how we will communicate with origins: we will simply look at an origin and use the most-secure option available to communicate with it.</p><p>Re-evaluating default SSL/TLS modes is only the beginning. Not only will we automatically upgrade sites to their best security setting, <b>we will also open up all SSL/TLS modes to all plan levels</b>. Historically, Strict mode was reserved for enterprise customers only. This was because we released this mode in 2014 when few people had origins that were able to communicate over SSL/TLS, and we were nervous about customers breaking their configurations. But this is 2022, and we think that Strict mode should be available to anyone who wants to use it. So we will be opening it up to everyone with the launch of the automatic upgrades.</p>
    <div>
      <h3>How will automatic upgrading work?</h3>
      <a href="#how-will-automatic-upgrading-work">
        
      </a>
    </div>
    <p>To upgrade the origin-facing security of websites, we first need to determine the highest security level the origin can use. To make this determination, we will use the <a href="/ssl-tls-recommender/">SSL/TLS Recommender</a> tool that we released a year ago.</p><p>The recommender performs a series of requests from Cloudflare to the customer’s origin(s) to determine if the backend communication can be upgraded beyond what is currently configured. The recommender accomplishes this by:</p><ul><li><p>Crawling the website to collect links on different pages of the site. For websites with large numbers of links, the recommender will only examine a subset. Similarly, for sites where the crawl turns up an insufficient number of links, we augment our results with a sample of links from recent visitors requests to the zone. All of this is to get a representative sample to where requests are going in order to know how responses are served from the origin.</p></li><li><p>The crawler uses the user agent <code>Cloudflare-SSLDetector</code> and has been added to Cloudflare’s list of <a href="https://developers.cloudflare.com/firewall/known-issues-and-faq#bots-currently-detected">known “good bots</a>”.</p></li><li><p>Next, the recommender downloads the content of each link over both HTTP and HTTPS. The recommender makes only idempotent GET requests when scanning origin servers to avoid modifying server resource state.</p></li><li><p>Following this, the recommender runs a content similarity algorithm to determine if the content collected over HTTP and HTTPS matches.</p></li><li><p>If the content that is downloaded over HTTP matches the content downloaded over HTTPS, then it’s known that we can upgrade the security of the website without negative consequences.</p></li><li><p>If the website is already configured to Full mode, we will perform a certificate validation (without the additional need for crawling the site) to determine whether it can be updated to Full (strict) mode or higher.</p></li></ul><p>If it can be determined that the customer’s origin is able to be upgraded without breaking, we will upgrade the origin-facing security automatically.</p><p>But that’s not all. Not only are we removing the configuration burden for services on Cloudflare, but we’re also <b>providing more precise security settings by moving from per-zone SSL/TLS settings to per-origin SSL/TLS settings</b>.</p><p>The current implementation of the backend SSL/TLS service is related to an entire website, which works well for those with a single origin. For those that have more complex setups however, this can mean that origin-facing security is defined by the lowest capable origin serving a part of the traffic for that service. For example, if a website uses img.example.com and api.example.com, and these subdomains are served by different origins that have different security capabilities, we would not want to limit the SSL/TLS capabilities of both subdomains to the least secure origin. By using our new service, we will be able to set per-origin security more precisely to allow us to maximize the security posture of each origin.</p><p>The goal of this is to maximize the origin-facing security of everything on Cloudflare. However, if any origin that we attempt to scan blocks the SSL recommender, has a non-functional origin, or opts-out of this service, we will not complete the scans and will not be able to upgrade security. Details on how to opt-out will be provided via email announcements soon.</p>
    <div>
      <h3>Opting out</h3>
      <a href="#opting-out">
        
      </a>
    </div>
    <p>There are a number of reasons why someone might want to configure a lower-than-optimal security setting for their website. One common reason customers provide is a fear that having higher security settings will negatively impact the performance of their site. Others may want to set a suboptimal security setting for testing purposes or to debug some behavior. Whatever the reason, we will provide the tools needed to continue to configure the SSL/TLS mode you want, even if that’s different from what we think is the best.</p>
    <div>
      <h3>When is this going to happen?</h3>
      <a href="#when-is-this-going-to-happen">
        
      </a>
    </div>
    <p>We will begin to roll this change out before the end of the year. If you read this and want to make sure you’re at the highest level of backend security already, we recommend <a href="https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/full-strict/">Full (strict)</a> or <a href="https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/ssl-only-origin-pull/">Strict mode</a>. If you prefer to wait for us to automatically upgrade your origin security for you, please keep your eyes peeled to your inbox for the date we will begin rolling out this change for your group.</p><p>At Cloudflare, we believe that the Internet needs to be secure and private. If you’d like to help us achieve that, we’re hiring across the <a href="https://www.cloudflare.com/careers/jobs/?department=Engineering">engineering organization</a>.</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[CDN]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">74aHWDdU28HyUkx2We1M02</guid>
            <dc:creator>Alex Krivit</dc:creator>
            <dc:creator>Mikey Sleevi</dc:creator>
            <dc:creator>Suleman Ahmad</dc:creator>
        </item>
        <item>
            <title><![CDATA[End-to-End Integrity with IPFS]]></title>
            <link>https://blog.cloudflare.com/e2e-integrity/</link>
            <pubDate>Mon, 17 Sep 2018 13:02:00 GMT</pubDate>
            <description><![CDATA[ Use Cloudflare’s IPFS gateway to set up a website which is end-to-end secure, while maintaining the performance and reliability benefits of being served from Cloudflare’s edge network. ]]></description>
            <content:encoded><![CDATA[ <p>This post describes how to use Cloudflare's IPFS gateway to set up a website which is end-to-end secure, while maintaining the performance and reliability benefits of being served from Cloudflare’s edge network. If you'd rather read an introduction to the concepts behind IPFS first, you can find that in <a href="/distributed-web-gateway/">our announcement</a>. Alternatively, you could skip straight to the <a href="https://developers.cloudflare.com/distributed-web/">developer docs</a> to learn how to set up your own website.</p><p>By 'end-to-end security', I mean that neither the site owner nor users have to trust Cloudflare to serve the correct documents, like they do now. This is similar to how using HTTPS means you don't have to trust your ISP to not modify or inspect traffic.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6TAh0shMDYcLioHSrr05YS/9df521abdbf0ddc64596066f864466a4/ipfs-blog-post-image-1-copy_3.5x--1-.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/75MIGMU5KJSYIZudpdJcNM/666111e79475ef39ca6701ad7e0cc27e/ipfs-blog-post-image-2-copy_3.5x--1-.png" />
            
            </figure>
    <div>
      <h3>CNAME Setup with Universal SSL</h3>
      <a href="#cname-setup-with-universal-ssl">
        
      </a>
    </div>
    <p>The first step is to choose a <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name/">domain name</a> for your website. Websites should be given their own domain name, rather than served directly from the gateway by root hash, so that they are considered a distinct origin by the browser. This is primarily to prevent cache poisoning, but there are several functional advantages as well. It gives websites their own instance of localStorage and their own cookie jar which are sandboxed from inspection and manipulation by malicious third-party documents. It also lets them run Service Workers without conflict, and request special permissions of the user like access to the webcam or GPS. But most importantly, having a domain name makes a website easier to identify and remember.</p><p>Now that you've <a href="https://www.cloudflare.com/products/registrar/">chosen a domain</a>, rather than using it as-is, you’ll need to add "ipfs-sec" as the left-most subdomain. So for example, you'd use "ipfs-sec.example.com" instead of just "example.com". The ipfs-sec subdomain is special because it signals to the user and to their browser that your website is capable of being served with end-to-end integrity.</p><p>In addition to that, ipfs-sec domains require <a href="/dnssec-an-introduction/">DNSSEC</a> to be properly setup to prevent spoofing. Unlike with standard HTTPS, where DNS spoofing can't usually result in a on-path attacker attack, this is exactly what DNS spoofing does to IPFS because the root hash of the website is stored in DNS. Many <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name-registrar/">registrars</a> make enabling DNSSEC as easy as the push of a button, though some don't support it at all.</p><p>With the ipfs-sec domain, you can now follow the <a href="https://developers.cloudflare.com/distributed-web/ipfs-gateway/connecting-website/">developer documentation</a> on how to serve a generic static website from IPFS. Note that you'll need to use a CNAME setup and retain control of your <a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a>, rather than the easier method of just signing up for Cloudflare. This helps maintain a proper separation between the party managing the DNSSEC signing keys and the party serving content to end-users. Keep in mind that CNAME setups tend to be problematic and get into cases that are difficult to debug, which is why we reserve them for technically sophisticated customers.</p><p>You should now be able to access your website over HTTP and HTTPS, backed by our gateway.</p>
    <div>
      <h3>Verifying what the Gateway Serves</h3>
      <a href="#verifying-what-the-gateway-serves">
        
      </a>
    </div>
    <p>HTTPS helps makes sure that nobody between the user and Cloudflare's edge network has tampered with the connection, but it does nothing to make sure that Cloudflare actually serves the content the user asked for. To solve this, we built two connected projects: a modified gateway service and a browser extension.</p><p>First, we <a href="https://github.com/cloudflare/go-ipfs">forked the go-ipfs repository</a> and gave it the ability to offer cryptographic proofs that it was serving content honestly, which it will do whenever it sees requests with the HTTP header <code>X-Ipfs-Secure-Gateway: 1</code>. The simplest case for this is when users request a single file from the gateway by its hash -- all the gateway has to do is serve the content and any metadata that might be necessary to re-compute the given hash.</p><p>A more complicated case is when users request a file from a directory. Luckily, directories in IPFS are just files containing a mapping from file name to the hash of the file, and very large directories can be transparently split up into several smaller files, structured into a search tree called a <a href="https://idea.popcount.org/2012-07-25-introduction-to-hamt/">Hash Array Mapped Trie (HAMT)</a>. To convince the client that the gateway is serving the contents of the correct file, the gateway first serves the file corresponding to the directory, or every node in the search path if the directory is a HAMT. The client can hash this file (or search tree node), check that it equals the hash of the directory they asked for, and look up the hash of the file they want from within the directory's contents. The gateway then serves the contents of the requested file, which the client can now verify because it knows the expected hash.</p><p>Finally, the most complicated case by far is when the client wants to access content by domain name. It's complicated because the protocol for authenticating DNS, called DNSSEC, has very few client-side implementations. DNSSEC is also not widely deployed, even though some registrars make it even easier than setting up HTTPS. In the end, we ended up writing our own simple DNSSEC-validating resolver that's capable of outputting a cryptographically-convincing proof that it did some lookup correctly.</p><p>It works the same way as certificate validation in HTTPS: we start at the bottom, with a signature from some authority claiming to be example.com over the DNS records they want us to serve. We then lookup a delegation (DS record) from an authority claiming to be .com, that says "example.com is the authority with these public keys" which is in turn signed by the .com authority's private key. And finally, we lookup a delegation from the root authority, ICANN (whose public keys we already have), attesting to the public keys used by the .com authority. All of these lookups bundled together form an authenticated chain starting at ICANN and ending at the exact records we want to serve. These constitute the proof.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4qVP41QjM9flXihnLEj4CH/441ee5dd840fbac451e12854248da9cd/IPFS-tech-post-_3.5x.png" />
            
            </figure><p><i>Chain of trust in DNSSEC.</i></p><br /><p>The second project we built out was a browser extension that requests these proofs from IPFS gateways and ipfs-sec domains, and is capable of verifying them. The extension uses the <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest">webRequest API</a> to sit between the browser's network stack and its rendering engine, preventing any unexpected data from being show to the user or unexpected code from being executed. The code for the browser extension is <a href="https://github.com/cloudflare/ipfs-ext">available on Github</a>, and can be installed through <a href="https://addons.mozilla.org/en-US/firefox/addon/cloudflare-ipfs-validator/">Firefox's add-on store</a>. We’re excited to add support for Chrome as well, but that can’t move forward until <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=487422">this ticket</a> in their bug tracker is addressed.</p><p>On the other hand, if a user doesn't have the extension installed, the gateway won't see the <code>X-Ipfs-Secure-Gateway</code> header and will serve the page like a normal website, without any proofs. This provides a graceful upgrade path to using IPFS, either through our extension that uses a third-party gateway or perhaps another browser extension that runs a proper IPFS node in-browser.</p>
    <div>
      <h3>Example Application</h3>
      <a href="#example-application">
        
      </a>
    </div>
    <p>My favorite website on IPFS so far has been the <a href="https://cloudflare-ipfs.com/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/">mirror of English Wikipedia</a> put up by <a href="https://ipfs.io/blog/24-uncensorable-wikipedia/">the IPFS team at Protocol Labs</a>. It's fast, fun to play with, and above all has practical utility. One problem that stands out though, is that the mirror has no search feature so you either have to know the URL of the page you want to see or try to find it through Google. The <a href="https://ipfs.io/ipfs/QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX/wiki/Anasayfa.html">Turkish-language mirror</a> has in-app search but it requires a call to a dynamic API on the same host, and doesn't work through Cloudflare's gateway because we only serve static content.</p><p>I wanted to provide an example of the kinds of secure, performant applications that are possible with IPFS, and this made building a search engine seem like a prime candidate. Rather than steal Protocol Labs' idea of 'Wikipedia on IPFS', we decided to take the <a href="http://www.kiwix.org/">Kiwix</a> archives of all the different StackExchange websites and build a distributed search engine on top of that. You can play with the finished product here: <a href="https://ipfs-sec.stackexchange.cloudflare-ipfs.com">ipfs-sec.stackexchange.cloudflare-ipfs.com</a>.</p><p>The way it's built is actually really simple, at least as far as search engines go: We build an inverted index and publish it with the rest of each StackExchange, along with a JavaScript client that can read the index and quickly identify documents that are relevant to a user's query. Building the index takes two passes over the data:</p><ol><li><p>The first pass decides what words/tokens we want to allow users to search by. Tokens shouldn't be too popular (like the top 100 words in English), because then the list of all documents containing that token is going to be huge and it's not going to improve the search results anyways. They also shouldn't be too rare (like a timestamp with sub-second-precision), because then the index will be full of meaningless tokens that occur in only one document each. You can get a good estimate of the most frequent K tokens, using only constant-space, with the really simple space-saving algorithm from <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.114.9563&amp;rep=rep1&amp;type=pdf">this paper</a>.</p></li><li><p>Now that the first pass has given us the tokens we want to track, the second pass through the data actually builds the inverted index. That is, it builds a map from every token to the list of documents that contain that token, called a postings list. When a client wants to find only documents that contain some set of words/tokens, they download the list for each individual token and intersect them. It sounds less efficient than it is -- in reality, the postings lists are unnoticeably small (&lt;30kb) even in the worst case. And the browser can 'pipeline' the requests for the postings lists (meaning, send them all off at once) which makes getting a response to several requests about as fast as getting a response to one.</p></li></ol><p>We also store some simple statistics in each postings list to help rank the results. Essentially, documents that contain a query token more often are ranked higher than those that don't. And among the tokens in a query, those tokens that occur in fewer documents have a stronger effect on ranking than tokens that occur in many documents. That's why when I search for <a href="https://ipfs-sec.stackexchange.cloudflare-ipfs.com/crypto/search.html?q=AES+SIV">"AES SIV"</a> the first result that comes back is:</p><ul><li><p><a href="https://ipfs-sec.stackexchange.cloudflare-ipfs.com/crypto/A/question/54413.html">"Why is SIV a thing if MAC-and-encrypt is not the most secure way to go?"</a></p></li></ul><p>while the following is the fourth result, even though it has a higher score and greater number of total hits than first result:</p><ul><li><p><a href="https://ipfs-sec.stackexchange.cloudflare-ipfs.com/crypto/A/question/31835.html">"Why is AES-SIV not used, but AESKW, AKW1?"</a></p></li></ul><p>(AES is a very popular and frequently discussed encryption algorithm, while SIV is a lesser-known way of using AES.)</p><p>But this is what really makes it special: because the search index is stored in IPFS, the user can convince themselves that no results have been modified, re-arranged, or omitted without having to download the entire corpus. There's one small trick to making this statement hold true: All requests made by the search client must succeed, and if they don't, it outputs an error and no search results.</p><p>To understand why this is necessary, think about the search client when it first gets the user's query. It has to tokenize the query and decide which postings lists to download, where not all words in the user's query may be indexed. A naive solution is to try to download the postings list for every word unconditionally, and interpret a non-200 HTTP status code as "this postings list must not exist". In this case, a network adversary could block the search client from being able to access postings lists that lead to undesirable results, causing the client to output misleading search results either through omission or re-arranging.</p><p>What we do instead is store the dictionary of every indexed token in a file in the root of the index. The client can download the dictionary once, cache it, and use it for every search afterwards. This way, the search client can consult the dictionary to find out which requests should succeed and only send those.</p>
    <div>
      <h3>From Here</h3>
      <a href="#from-here">
        
      </a>
    </div>
    <p>We were incredibly excited when we realized the new avenues and types of applications that combining IPFS with Cloudflare open up. Of course, our IPFS gateway and the browser extension we built will need time to mature into a secure and reliable platform. But the ability to securely deliver web pages through third-party hosting providers and CDNs is incredibly powerful, and its something cryptographers and internet security professionals have been working towards for a long time. As much fun as we had building it, we're even more excited to see what you build with it.</p><p><a href="/subscribe/"><i>Subscribe to the blog</i></a><i> for daily updates on our announcements.</i></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/Zg5pDJxaCCTQXzqquORuu/1a2f514eff601ee0f88f245945a3ea54/CRYPTO-WEEK-banner-plus-logo_2x.png" />
            
            </figure><p></p> ]]></content:encoded>
            <category><![CDATA[Crypto Week]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[IPFS]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[DNSSEC]]></category>
            <category><![CDATA[Cryptography]]></category>
            <guid isPermaLink="false">2ZSYs23n0hZhgRFnzpS5O1</guid>
            <dc:creator>Brendan McMillion</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare goes InterPlanetary - Introducing Cloudflare’s IPFS Gateway]]></title>
            <link>https://blog.cloudflare.com/distributed-web-gateway/</link>
            <pubDate>Mon, 17 Sep 2018 13:01:00 GMT</pubDate>
            <description><![CDATA[ Today we’re excited to introduce Cloudflare’s IPFS Gateway, an easy way to access content from the the InterPlanetary File System (IPFS) that doesn’t require installing and running any special software on your computer. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Today we’re excited to introduce Cloudflare’s IPFS Gateway, an easy way to access content from the InterPlanetary File System (IPFS) that doesn’t require installing and running any special software on your computer. We hope that our gateway, hosted at <a href="https://cloudflare-ipfs.com">cloudflare-ipfs.com</a>, will serve as the platform for many new highly-reliable and security-enhanced web applications. The IPFS Gateway is the first product to be released as part of our <a href="https://www.cloudflare.com/distributed-web-gateway">Distributed Web Gateway</a> project, which will eventually encompass all of our efforts to support new distributed web technologies.</p><p>This post will provide a brief introduction to IPFS. We’ve also written an accompanying blog post <a href="/e2e-integrity">describing what we’ve built</a> on top of our gateway, as well as <a href="https://developers.cloudflare.com/distributed-web/">documentation</a> on how to serve your own content through our gateway with your own custom hostname.</p>
    <div>
      <h3>Quick Primer on IPFS</h3>
      <a href="#quick-primer-on-ipfs">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3hS4Q3j1BBgCA4If6fFImz/d25f3b24017cb8dfcfa9208a68f8ed03/spaaaace-ipfs_3.5x-1.png" />
            
            </figure><p>Usually, when you access a website from your browser, your browser tracks down the origin server (or servers) that are the ultimate, centralized repository for the website’s content. It then sends a request from your computer to that origin server, wherever it is in the world, and that server sends the content back to your computer. This system has served the Internet well for decades, but there’s a pretty big downside: centralization makes it impossible to keep content online any longer than the origin servers that host it. If that origin server is hacked or taken out by a natural disaster, the content is unavailable. If the site owner decides to take it down, the content is gone. In short, mirroring is not a first-class concept in most platforms (<a href="https://www.cloudflare.com/always-online/">Cloudflare’s Always Online</a> is a notable exception).</p><p>The InterPlanetary File System aims to change that. IPFS is a peer-to-peer file system composed of thousands of computers around the world, each of which stores files on behalf of the network. These files can be anything: cat pictures, 3D models, or even entire websites. Over 5,000,000,000 files had been uploaded to <a href="https://cloudflare-ipfs.com/ipfs/QmWimYyZHzChb35EYojGduWHBdhf9SD5NHqf8MjZ4n3Qrr/Filecoin-Primer.7-25.pdf">IPFS already</a>.</p>
    <div>
      <h3>IPFS vs. Traditional Web</h3>
      <a href="#ipfs-vs-traditional-web">
        
      </a>
    </div>
    <p>There are two key differences between IPFS and the web as we think of it today.</p><p>The first is that with IPFS anyone can cache and serve any content—for free. Right now, with the traditional web, most typically rely on big hosting providers in remote locations to store content and serve it to the rest of the web. If you want to set up a website, you have to pay one of these major services to do this for you. With IPFS, anyone can sign up their computer to be a node in the system and start serving data. It doesn’t matter if you’re working on a Raspberry Pi or running the world’s biggest server. You can still be a productive node in the system.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/66pmjeMDzYrBDczI8gesbH/8b9b8588bd3bf911aa71bc5e87bbd671/Decentralized-Network-1.png" />
            
            </figure><p>The second key difference is that data is content-addressed, rather than location-addressed. That’s a bit of a subtle difference, but the ramifications are substantial, so it’s worth breaking down.</p><p>Currently, when you open your browser and navigate to example.com, you’re telling the browser “fetch me the data stored at example.com’s IP address” (this happens to be 93.184.216.34). That IP address marks where the content you want is stored in the network. You then send a request to the server at that IP address for the “example.com” content and the server sends back the relevant information. So at the most basic level, you tell the network where to look and the network sends back what it found.</p><p>IPFS turns that on its head.</p><p>With IPFS, every single block of data stored in the system is addressed by a cryptographic hash of its contents, i.e., a long string of letters and numbers that is unique to that block. When you want a piece of data in IPFS, you request it by its hash. So rather than asking the network “get me the content stored at 93.184.216.34,” you ask “get me the content that has a hash value of <code>QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy</code>.” (<code>QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy</code> happens to be the hash of a .txt file containing the string “I’m trying out IPFS”).</p>
    <div>
      <h3>How is this so different?</h3>
      <a href="#how-is-this-so-different">
        
      </a>
    </div>
    <p>Remember that with IPFS, you tell the network what to look for, and the network figures out where to look.</p>
    <div>
      <h3>Why does this matter?</h3>
      <a href="#why-does-this-matter">
        
      </a>
    </div>
    <p>First off, it makes the network more resilient. The content with a hash of <code>QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy</code> could be stored on dozens of nodes, so if one node that was caching that content goes down, the network will just look for the content on another node.</p><p>Second, it introduces an automatic level of security. Let’s say you know the hash value of a file you want. So you ask the network, “get me the file with hash <code>QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy</code>” (the example.txt file from above). The network responds and sends the data. When you receive all the data, you can rehash it. If the data was changed at all in transit, the hash value you get will be different than the hash you asked for. You can think of the hash as like a unique fingerprint for the file. If you’re sent back a different file than you were expecting to receive, it’s going to have a different fingerprint. This means that the system has a built-in way of knowing whether or not content has been tampered with.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/14TxfLu3bArvharLWoFCJY/64e2fadd810da7c0a51149d8f71a9f95/ipfs-blog-post-image-1-copy_3.5x.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4hO98vSSGsM8wh0r4w10GO/d4c1d501a571e241c1632a4645cfc8a3/ipfs-blog-post-image-2-copy_3.5x.png" />
            
            </figure>
    <div>
      <h3></h3>
      <a href="#">
        
      </a>
    </div>
    <p>A Note on IPFS Addresses and Cryptographic Hashes</p><p>Since we’ve spent some time going over why this content-addressed system is so special, it’s worth talking a little bit about how the IPFS addresses are built. Every address in IPFS is a <a href="https://github.com/multiformats/multihash">multihash</a>, which means that the address combines information about both the hashing algorithm used and the hash output into one string. IPFS multihashes have three distinct parts: the first byte of the mulithash indicates which hashing algorithm has been used to produce the hash; the second byte indicates the length of the hash; and the remaining bytes are the value output by the hash function. By default, IPFS uses the <a href="https://en.wikipedia.org/wiki/SHA-2">SHA-256</a> algorithm, which produces a 32-byte hash. This is represented by the string “Qm” in <a href="https://en.wikipedia.org/wiki/Base58">Base58</a> (the default encoding for IPFS addresses), which is why all the example IPFS addresses in this post are of the form “Qm…”.</p><p>While SHA-256 is the standard algorithm used today, this multihash format allows the IPFS protocol to support addresses produced by other hashing algorithms. This allows the IPFS network to move to a different algorithm, should the world discover flaws with SHA-256 sometime in the future. If someone hashed a file with another algorithm, the address of that file would start some characters other than “Qm”.</p><p>The good news is that, at least for now, SHA-256 is believed to have a number of qualities that make it a strong cryptographic hashing algorithm. The most important of these is that SHA-256 is collision resistant. A collision occurs when there are two different files that produce the same hash when run through the SHA-256 algorithm. To understand why it’s important to prevent collisions, consider this short scenario. Imagine some IPFS user, Alice, uploads a file with some hash, and another user, Bob, uploads a different file that happens to produce the exact same hash. If this happened, there would be two different files in the network with the exact same address. So if some third person, Carol, sent out an IPFS request for the content at that address, she wouldn't necessarily know whether she was going to receive Bob’s file or Alice’s file.</p><p>SHA-256 makes collisions extremely unlikely. Because SHA-256 computes a 256-bit hash, there are 2^256 possible IPFS addresses that the algorithm could produce. Hence, the chance that there are two files in IPFS that produce a collision is low. Very low. If you’re interested in more details, the <a href="https://en.wikipedia.org/wiki/Birthday_attack#Mathematics">birthday attack</a> Wikipedia page has a cool table showing exactly how unlikely collisions are, given a sufficiently strong hashing algorithm.</p>
    <div>
      <h3>How exactly do you access content on IPFS?</h3>
      <a href="#how-exactly-do-you-access-content-on-ipfs">
        
      </a>
    </div>
    <p>Now that we’ve walked through all the details of what IPFS is, you’re probably wondering how to use it. There are a number of ways to access content that’s been stored in the IPFS network, but we’re going to address two popular ones here. The first way is to download IPFS onto your computer. This turns your machine into a node of the IPFS network, and it’s the best way to interact with the network if you want to get down in the weeds. If you’re interested in playing around with IPFS, the Go implementation can be downloaded <a href="https://ipfs.io/docs/install/">here</a>.</p><p>But what if you want access to content that’s stored on IPFS without the hassle of operating a node locally on your machine? That’s where IPFS gateways come into play. IPFS gateways are third-party nodes that fetch content from the IPFS network and serve it to you over <a href="https://www.cloudflare.com/learning/ssl/what-is-https/">HTTPS</a>. To use a gateway, you don’t need to download any software or type any code. You simply open up a browser and type in the gateway’s name and the hash of the content you’re looking for, and the gateway will serve the content in your browser.</p><p>Say you know you want to access the example.txt file from before, which has the hash <code>QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy</code>, and there’s a public gateway that is accessible at <code>https://example-gateway.com</code></p><p>To access that content, all you need to do is open a browser and type</p>
            <pre><code>https://example-gateway.com/ipfs/QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy</code></pre>
            <p>and you’ll get back the data stored at that hash. The combination of the /ipfs/ prefix and the hash is referred to as the file path. You always need to provide a full file path to access content stored in IPFS.</p>
    <div>
      <h3>What can you do with Cloudflare’s Gateway?</h3>
      <a href="#what-can-you-do-with-cloudflares-gateway">
        
      </a>
    </div>
    <p>At the most basic level, you can access any of the billions of files stored on IPFS from your browser. But that’s not the only cool thing you can do. Using Cloudflare’s gateway, you can also build a website that’s hosted entirely on IPFS, but still available to your users at a custom domain name. Plus, we’ll issue any website connected to our gateway a <a href="https://www.cloudflare.com/application-services/products/ssl/">free SSL certificate</a>, ensuring that each website connected to Cloudflare's gateway is secure from snooping and manipulation. For more on that, check out the <a href="https://developers.cloudflare.com/distributed-web/">Distributed Web Gateway developer docs</a>.</p><p>A fun example we’ve put together using the <a href="http://www.kiwix.org/">Kiwix</a> archives of all the different StackExchange websites and build a distributed search engine on top of that using only IPFS. Check it out <a href="https://ipfs-sec.stackexchange.cloudflare-ipfs.com/">here</a>.</p>
    <div>
      <h3>Dealing with abuse</h3>
      <a href="#dealing-with-abuse">
        
      </a>
    </div>
    <p>IPFS is a peer-to-peer network, so there is the possibility of users sharing abusive content. This is not something we support or condone. However, just like how Cloudflare works with more traditional customers, Cloudflare’s IPFS gateway is simply a cache in front of IPFS. Cloudflare does not have the ability to modify or remove content from the IPFS network. If any abusive content is found that is served by the Cloudflare IPFS gateway, you can use the standard abuse reporting mechanism described <a href="https://www.cloudflare.com/abuse/">here</a>.</p>
    <div>
      <h3>Embracing a distributed future</h3>
      <a href="#embracing-a-distributed-future">
        
      </a>
    </div>
    <p>IPFS is only one of a family of technologies that are embracing a new, decentralized vision of the web. Cloudflare is excited about the possibilities introduced by these new technologies and we see our gateway as a tool to help bridge the gap between the traditional web and the new generation of distributed web technologies headlined by IPFS. By enabling everyday people to explore IPFS content in their browser, we make the ecosystem stronger and support its growth. Just like when Cloudflare launched back in 2010 and changed the game for web properties by providing the <a href="https://www.cloudflare.com/security/">security</a>, <a href="https://www.cloudflare.com/performance/">performance</a>, and <a href="https://www.cloudflare.com/performance/ensure-application-availability/">availability</a> that was previously only available to the Internet giants, we think the IPFS gateway will provide the same boost to content on the distributed web.</p><p>Dieter Shirley, CTO of Dapper Labs and Co-founder of CryptoKitties said the following:</p><blockquote><p>We’ve wanted to store CryptoKitty art on IPFS since we launched, but the tech just wasn’t ready yet. Cloudflare’s announcement turns IPFS from a promising experiment into a robust tool for commercial deployment. Great stuff!</p></blockquote><p>The IPFS gateway is exciting, but it’s not the end of the road. There are other equally interesting distributed web technologies that could benefit from Cloudflare’s massive global network and we’re currently exploring these possibilities. If you’re interested in helping build a better internet with Cloudflare, <a href="https://www.cloudflare.com/careers/"><b>we’re hiring!</b></a></p><p><a href="/subscribe/"><i>Subscribe to the blog</i></a><i> for daily updates on our announcements.</i></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2kIF9JJRHMU2pmS0vA2xbc/4261d639ac630d4c0f55e676621ddd51/Crypto-Week-1-1.png" />
            
            </figure> ]]></content:encoded>
            <category><![CDATA[Crypto Week]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[IPFS]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[DNSSEC]]></category>
            <category><![CDATA[HTTPS]]></category>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[Cryptography]]></category>
            <guid isPermaLink="false">3gBDsqNt0ufJh5O7aQBBxd</guid>
            <dc:creator>Andy Parker</dc:creator>
        </item>
        <item>
            <title><![CDATA[CAA of the Wild: Supporting a New Standard]]></title>
            <link>https://blog.cloudflare.com/caa-of-the-wild/</link>
            <pubDate>Thu, 07 Dec 2017 14:00:00 GMT</pubDate>
            <description><![CDATA[ One thing we take pride in at Cloudflare is embracing new protocols and standards that help make the Internet faster and safer. Sometimes this means that we’ll launch support for experimental features or standards still under active development, as we did with TLS 1.3. ]]></description>
            <content:encoded><![CDATA[ <p>One thing we take pride in at Cloudflare is embracing new protocols and standards that help make the Internet faster and safer. Sometimes this means that we’ll launch support for experimental features or standards still under active development, <a href="/introducing-tls-1-3/">as we did</a> with TLS 1.3. Due to the not-quite-final nature of some of these features, we limit the availability at the onset to only the most ardent users so we can observe how these cutting-edge features behave in the wild. Some of our observations have helped the community propose revisions to the corresponding RFCs.</p><p>We began supporting the DNS <a href="https://tools.ietf.org/html/rfc6844">Certification Authority Authorization (CAA) Resource Record</a> in June behind a beta flag. Our goal in doing so was to see how the presence of these records would affect <a href="https://www.cloudflare.com/application-services/products/ssl/">SSL certificate</a> issuance by publicly-trusted certification authorities. We also wanted to do so in advance of the <a href="https://cabforum.org/2017/03/08/ballot-187-make-caa-checking-mandatory/">8 September 2017 enforcement date</a> for mandatory CAA checking at certificate issuance time, without introducing a new and externally unproven behavior to millions of Cloudflare customers at once. This beta period has provided invaluable insight as to how CAA records have changed and will continue to change the commercial public-key infrastructure (PKI) ecosystem.</p><p>As of today, we’ve removed this beta flag and all users are welcome to add CAA records as they see fit—without having to first contact support. Note that if you’ve got Universal SSL enabled, we’ll automatically augment your CAA records to allow issuance from our CA partners; if you’d like to disable Universal SSL and provide your own certificates, you’re welcome to do that too.Below are some additional details on CAA, the purpose of this record type, and how its use has evolved since it was first introduced. If you’d rather just jump to the details of our implementation, <a href="#caa-and-cloudflare">click here</a> and we’ll take you to the relevant section of the post.</p>
    <div>
      <h4>The Publicly-Trusted PKI Ecosystem — Abridged</h4>
      <a href="#the-publicly-trusted-pki-ecosystem-abridged">
        
      </a>
    </div>
    <p>Before diving into CAA it’s helpful to understand the purpose of a public key infrastructure (PKI). Quite simply, PKI is a framework that’s used to secure communications between parties over an insecure public network. In “web PKI”, the PKI system that’s used to secure communications between your web browser and this blog (for example), the TLS protocol is used with SSL certificates and private keys to protect against eavesdropping and tampering.</p><p>While TLS handles the sanctity of the connection, ensuring that nobody can snoop on or mess with HTTPS requests, how does your browser know it’s talking to the actual owner of blog.cloudflare.com and not some imposter? Anyone with access to OpenSSL or a similar tool can generate a certificate purporting to be valid for this hostname but fortunately your browser only trusts certificates issued (or “signed by”) by certain well-known parties.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/tTMIE50NuXq1J2phXhoPr/3d2d302cf9e84a7dbdf6e268f9b55360/illustration-ssl-certificate.png" />
            
            </figure><p>These well-known parties are known as certification authorities (CAs). The private and public key that form the certificate for <code>blog.cloudflare.com</code> were generated on Cloudflare hardware, but the stamp of approval—the signature—was placed on the certificate by a CA. When your browser receives this “leaf” certificate, it follows the issuer all the way to a “root” that it trusts, validating the signatures along the way and deciding whether to accept the certificate as valid for the requested hostname.</p><p>Before placing this stamp of approval, CAs are supposed to take steps to ensure that the certificate requester can demonstrate control over the hostname. (In some cases, as you’ll learn below, this is not always the case, and is one of the reasons that CAA was introduced.)</p>
    <div>
      <h4>Anthropogenic Threats</h4>
      <a href="#anthropogenic-threats">
        
      </a>
    </div>
    <p>Given that people are imperfect beings and prone to making mistakes or poor judgement calls, it should come to the surprise of no one that the PKI ecosystem has a fairly blemished track-record when it comes to maintaining trust. Clients, CAs, servers, and certificate requesters are all created or operated by people who have made mistakes.</p><p><i>Jurassic Park. 1993, Stephen Spielberg [Film] Universal Pictures.</i></p><p>Client providers have been known to <a href="https://en.wikipedia.org/wiki/Superfish">add compromising certificates to the local trust store</a> or <a href="/understanding-the-prevalence-of-web-traffic-interception/">install software to intercept secure connections</a>; servers have been demonstrated to <a href="/answering-the-critical-question-can-you-get-private-ssl-keys-using-heartbleed/">leak private keys</a> or <a href="/microsoft-tls-downgrade-schannel-bug/">be unable to properly rotate session ticket keys</a>; CAs have <a href="https://security.googleblog.com/2016/10/distrusting-wosign-and-startcom.html">knowingly mis-issued certificates</a> or <a href="https://security.googleblog.com/2017/09/chromes-plan-to-distrust-symantec.html">failed to validate hostname ownership or control reliably</a>; and individuals requesting certificates include phishers creating convincing imposter versions of popular domains and <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1332714">obtaining valid and trusted certificates</a>. Every party in this ecosystem is not completely without blame in contributing to a diminished sense of trust.</p><p>Of these many problems (most of which have already been addressed or are in the process of being resolved), perhaps the most unsettling is the willful mis-issuance of certificates by trusted CAs. Knowingly issuing certificates to parties who haven't demonstrated ownership, or issuance outside the parameters defined by the <a href="https://cabforum.org/about-us/">CA/Browser Forum</a> (a voluntary and democratic governing body for publicly-trusted certificates) by CAs who have certificates present in trust stores severely undermines the value of that trust store, all certificates issued by that CA, and the publicly-trusted PKI ecosystem as a whole.</p>
    <div>
      <h4>Solving One Problem...</h4>
      <a href="#solving-one-problem">
        
      </a>
    </div>
    <p>To help prevent future mis-issuance by publicly trusted CAs, a new DNS resource record was proposed by those CAs to help reduce the risk of certificate mis-issuance: The Certification Authority Authorization (CAA) Resource Record.</p><p>The general idea is that the owner of any given domain (e.g., example.com) would add CAA records at their authoritative DNS provider, specifying one or more CAs who are authorized to issue certificates for their domain.</p><p><a href="https://tools.ietf.org/html/rfc6844">RFC6844</a> currently specifies three property tags for CAA records: <code>issue</code>, <code>issuewild</code>, and <code>iodef</code>.</p><ul><li><p>The <code>issue</code> property tag specifies CAs who are authorized to issue certificates for a domain. For example, the record <code>example.com. CAA 0 issue "certification-authority.net"</code> allows the "Certification Authority" CA to issue certificates for example.com.</p></li><li><p>The <code>issuewild</code> property tag specifies CAs that are only allowed to issue certificates that specify a wildcard domain. E.g., the record <code>example.com. CAA 0 issuewild "certification-authority.net"</code> only allows the "Certification Authority" CA to issue certificates containing wildcard domains, such as <code>*.example.com</code>.</p></li><li><p>The <code>iodef</code> property tag specifies a means of reporting certificate issue requests or cases of certificate issuance for the corresponding domain that violate the security policy of the issuer or the domain name holder. E.g., the record <code>example.com. CAA 0 iodef "mailto:example@example.com"</code> instructs the issuing CA to send violation reports via email to the address provided at the attempted time of issuance.</p></li></ul><p>CAA records with the <code>issue</code> and <code>issuewild</code> tags are additive; if more than one are returned as the response for a <a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS query</a> for a given hostname, the CAs specified in both records are both considered authorized.</p><p>If the authoritative DNS provider does not yet support CAA records or none are present in the zone file, the issuing CA is still authorized to issue when no records are present, largely preserving the issuance behavior before CAA records were an adopted standard.</p><p>As of 8 September 2017, all publicly-trusted CAs are now required to check CAA at issuance time for all certificates issued, thereby enabling certificate requestors (domain owners) to dictate which CAs can issue certificates for their domain.</p>
    <div>
      <h4>... with More Problems.</h4>
      <a href="#with-more-problems">
        
      </a>
    </div>
    <p>RFC6844 specifies a very curious CAA record processing algorithm:</p>
            <pre><code>The search for a CAA record climbs the DNS name tree from the
   specified label up to but not including the DNS root '.'.

   Given a request for a specific domain X, or a request for a wildcard
   domain *.X, the relevant record set R(X) is determined as follows:

   Let CAA(X) be the record set returned in response to performing a CAA
   record query on the label X, P(X) be the DNS label immediately above
   X in the DNS hierarchy, and A(X) be the target of a CNAME or DNAME
   alias record specified at the label X.

   o  If CAA(X) is not empty, R(X) = CAA(X), otherwise

   o  If A(X) is not null, and R(A(X)) is not empty, then R(X) =
      R(A(X)), otherwise

   o  If X is not a top-level domain, then R(X) = R(P(X)), otherwise

   o  R(X) is empty.</code></pre>
            <p>While the above algorithm is not easily understood at first, the example immediately following it is much easier to comprehend:</p>
            <pre><code>For example, if a certificate is requested for X.Y.Z the issuer will
   search for the relevant CAA record set in the following order:

      X.Y.Z

      Alias (X.Y.Z)

      Y.Z

      Alias (Y.Z)

      Z

      Alias (Z)

      Return Empty</code></pre>
            <p>In plain English, this means that if the owner of example.com requests a certificate for <code>test.blog.example.com</code>, the issuing CA must</p><ol><li><p>Query for a CAA record at <code>test.blog.example.com.</code>. If a CAA record exists for this hostname, the issuing CA stops checking for CAA records and issues accordingly. If no CAA record exists for this hostname and this hostname exists as an A or AAAA record, the CA then moves up the DNS tree to the next highest label.</p></li><li><p>Query for a CAA record at <code>blog.example.com.</code>. Just like the first check, if no CAA record exists for this hostname and this hostname exists as an A or AAAA record, the CA then continues traversing the DNS tree.</p></li><li><p>Query for a CAA record at <code>example.com.</code></p></li><li><p>Query for a CAA record at <code>com.</code></p></li></ol><p>At the end of the last step, the issuing CA has climbed the entire DNS tree (excluding the root) checking for CAA records. This functionality allows a domain owner to create CAA records at the root of their domain and have those records apply to any and all subdomains.</p><p>However, the CAA record processing algorithm has an additional check if the hostname exists as a CNAME (or DNAME) record. In this case, the issuing CA must also check the <b>target</b> of the CNAME record. Revisiting the example above for <code>test.blog.example.com.</code> where this hostname exists as a CNAME record, the issuing CA must</p><ol><li><p>Query for a CAA record at <code>test.blog.example.com.</code>. Since <code>test.blog.example.com.</code> exists as the CNAME <code>test.blog.example.com. CNAME test.blog-provider.net.</code>, the issuing CA must next check the target for the presence of a CAA record before climbing the DNS tree.</p></li><li><p>Query for a CAA record at <code>test.blog-provider.net.</code></p></li></ol><p>The issuing CA in this example is only at step two in the CAA processing algorithm and it has already come across two separate issues.</p><p>First, the issuing CA has checked the hostname requested on the certificate (<code>test.blog.example.com.</code>) and since that hostname exists as a CNAME record, it has also checked the target of that record (<code>test.blog-provider.net.</code>). However, if <code>test.blog-provider.net.</code> itself is also a CNAME record, the the CAA record processing algorithm states that the issuing CA must check the target of that CNAME as well.</p><p>In this case it is fairly simple to create a CNAME loop (or very long CNAME chain) either via an accidental misconfiguration or with malicious intent to prevent the issuing CA from completing the CAA check.</p><p>Second, <code>example.com</code> and <code>blog-provider.net</code> might not be owned and operated by the same entity or even exist in the same network. The RFC authors appear to be operating under the assumption that CNAME records are still used as they were in <a href="https://tools.ietf.org/html/rfc1034#3.6.2">November 1987</a>:</p><blockquote><p>A CNAME RR identifies its owner name as an alias, and specifies the corresponding canonical name in the RDATA section of the RR.</p></blockquote><p>This behavior may have been true thirty years ago, but consider the number and prevalence of SaaS providers in 2017; who truly is authoritative for the content addressed by a DNS record, the content creator (and likely <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name/">domain name</a> owner who is using a CNAME) or the SaaS provider to whom the content creator subscribes?</p><p>Many if not all major service or application providers include clauses in their respective terms of service with regards to content added by the user to their account for the service. Intellectual property must be user-generated, properly licensed, or otherwise lawfully obtained. As content uploaded by users is difficult to control, liability limitations, indemnification, and service termination are all commonly used when the intellectual property added to the service is owned by another party, is unlawful, or is outside the definition of acceptable use. From a content perspective within the scope of a service provider's terms of service, it’s difficult to consider the service provider canonical for the content hosted there.</p><p>Using a real world example, there are currently 401,716 CNAME records in the zone files for domains on Cloudflare whose target is <code>ghs.google.com</code>. <a href="https://support.google.com/blogger/answer/58317?hl=en">This hostname</a> is given to subscribers of Google's Blogger service to use as the target of a CNAME so that a Blogger subscriber may use their own domain name in front of Google's service. With one CAA record, Google could dictate that nearly half a million blogs with a vanity domain name can only have one CA or no CAs issue certificates unless each of those hostnames created their own CAA records to allow issuance.</p><p>Even without following CNAMEs to their targets, the DNS climbing algorithm is not unproblematic. Operators of <a href="https://en.wikipedia.org/wiki/Top-level_domain">top-level domains</a> may decide that only certain issuing CAs are trustworthy or certain CAs are advantageous for business and create CAA records only allowing those CAs to issue. We already see this in action today with the pseudo-top level domain <a href="https://nl.eu.org/">nl.eu.org</a> which has the CAA record <code>nl.eu.org. CAA 0 issue "letsencrypt.org"</code>, which only allows issuance through Let's Encrypt without CAA records being present at the subdomains of <code>nl.eu.org</code>.</p><p>The authors of RFC6844 were also unwilling to secure their record and its use from any potential on-path attacks—</p><blockquote><p>Use of DNSSEC to authenticate CAA RRs is strongly RECOMMENDED but not required.</p></blockquote><p>Without DNSSEC, DNS responses are returned to the requestor in plain-text. Anyone in a privileged network position (a recursive DNS provider or ISP) could alter the response to a CAA query to allow or deny issuance as desired. As only about <a href="http://scoreboard.verisignlabs.com/">820,000</a> <code>.com</code> domain names out of the more than <a href="http://research.domaintools.com/statistics/tld-counts/">130 million</a> registered <code>.com</code> domain names are secured with DNSSEC, perhaps the low adoption rates influenced the decision to not make DNSSEC with CAA mandatory.</p><p>Moving beyond the RFC, the CA/Browser Forum's <a href="https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.5.0.pdf">Baseline Requirements</a> (BR) attempt to clarify aspects regarding the behavior a CA should take when checking for CAA.</p><blockquote><p>CAs are permitted to treat a record lookup failure as permission to issue if:</p></blockquote><ul><li><p>the failure is outside the CA's infrastructure;</p></li><li><p>the lookup has been retried at least once; and</p></li><li><p>the domain's zone does not have a DNSSEC validation chain to the ICANN root</p></li></ul><p>Effectively, this means that if the CAA response is either a <code>SERVFAIL</code>, <code>REFUSED</code>, or the query times out, regardless of whether or not a CAA record exists, the CA is permitted to issue if this query fails more than once while attempting to issue a certificate. However, multiple CAs have told us that DNS lookup failures will prevent issuance regardless of the above conditions in the BR. In this case, something as benign as a transient network error could result in a denial of issuance or worse, any recursor that doesn’t understand and a query for CAA record will prevent issuance. We actually saw this with Comcast’s resolvers and reported the bug to their DNS provider.</p><p>There’s an additional security gap in that neither the RFC nor the BR indicate where the issuing CA should query for CAA records. It is acceptable within the current standards to query any DNS recursor for these records as well as the authoritative DNS provider for a domain. For example, an issuing CA could query <a href="https://www.cloudflare.com/cloudflare-vs-google-dns/">Google’s Public DNS</a> or a DNS recursor provided by their ISP for these responses. This enables compromised DNS recursors or one run by a rogue operator to alter these responses, either denying issuance or allowing issuance by a CA not approved by the domain owner. The RFC and BR should be amended so that an issuing CA must always query these records at the authoritative provider to close this gap.</p>
    <div>
      <h4>CAA and Cloudflare</h4>
      <a href="#caa-and-cloudflare">
        
      </a>
    </div>
    <p>As of today, CAA records are no longer in beta and all customers are able to add CAA records for their zones. This can be done in the DNS tab of the Cloudflare dashboard or via our <a href="https://api.cloudflare.com/#dns-records-for-a-zone-create-dns-record">API</a>.</p><p>When creating CAA records in the dashboard, an additional modal appears to help clarify the different CAA tag options and format the record correctly as an incorrectly formatted record would result in every CA not being able to issue a certificate.</p><p>Cloudflare is in a unique position to be able to complete SSL validation for a domain and have certificates issued on the domain owner's behalf. This is how Cloudflare is able to automatically provision and have our <a href="/introducing-universal-ssl/">Universal SSL</a> certificates issued for every domain active on Cloudflare for free.</p><p>Cloudflare partners with multiple CAs to issue certificates for our managed SSL products: Universal SSL, <a href="/dedicated-ssl-certificates/">Dedicated Certificates</a>, and <a href="/introducing-ssl-for-saas/">SSL for SaaS</a>. Since CAA record checking is now mandatory for publicly-trusted CAs, Cloudflare automatically adds the requisite CAA records to the zone when a user adds one or more CAA records in the Cloudflare dashboard for their domain in order to allow our partner CAs to continue to be able to issue certificates for each of our SSL products.</p><p>Some site owners may want to manage their own SSL certificates in order to be compliant with their own standard operating procedures or policies. Alternately, domain owners may only want to trust specific CAs that are not the CAs Cloudflare currently partners with to issue Universal SSL certificates. In the latter case, users now have the ability to disable Universal SSL.</p><p>When Universal SSL is disabled, the CAA records added to allow our partner CAs to issue certificates are deleted and all Universal SSL certificates available for the zone are removed from our edge. Dedicated certificates, custom certificates, as well as <a href="https://www.cloudflare.com/application-services/products/ssl-for-saas-providers/">SSL for SaaS certificates</a> are all individually managed by each customer and can be added or removed as needed.</p>
    <div>
      <h4>A Bright and Hopefully Not-Too-Distant Future</h4>
      <a href="#a-bright-and-hopefully-not-too-distant-future">
        
      </a>
    </div>
    <p>CAA as it exists today does very little to <a href="https://www.cloudflare.com/application-services/products/securitycenter/">reduce the attack surface</a> around certificate issuance while making it more difficult for well-intended parties to participate. That said, CAA is a young standard recently adopted by the web PKI community with many involved individuals as well as active parties working toward addressing some of the gaps present in the current RFC and committed to making the overall CAA experience better for both the certificate requesters and CAs.</p><p>To start, an <a href="https://www.rfc-editor.org/errata/eid5065">errata report</a> exists to clarify the CAA record processing algorithm and to reduce the degree in which the targets of CNAME records should be checked. Similarly, the DNS tree-climbing behavior of the CAA record processing algorithm is still <a href="https://mailarchive.ietf.org/arch/search/?email_list=spasm&amp;gbt=1&amp;index=QkL2PKWUadWpXBZULetCbk-9ViU">up for debate</a>. There are also <a href="https://mailarchive.ietf.org/arch/search/?email_list=spasm&amp;gbt=1&amp;index=ewf8iAv2cqS1_5ZmvfuK57goLYI">active discussions</a> around implementation issues, such as the recognition that some authoritative DNS resolvers incorrectly sign empty responses to CAA queries when DNSSEC is enabled for a zone and how to handle these cases in a way that would still allow CAs to issue. <a href="https://www.ietf.org/id/draft-hoffman-andrews-caa-simplification-02.txt">Proposals exist</a> suggesting new tags or property fields in CAA records, such as a CA requiring an account number in the property value for issue tags, or only allowing specific validation types (e.g., DV, OV, or EV). The Electronic Frontier Foundation (EFF) has expressed interest in hardening CAs against non-cryptographic attacks, particularly with a focus on the domain validation process for obtaining certificates. While not directly pertaining to CAA, any ideas or proposed hardening solutions might increase reliance on CAA or completely obviate the need for it altogether.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/35HzvskNIkHkztXA9Eq8fp/79076092e3540a211612ff53bc723d5b/standards.png" />
            
            </figure><p> <a href="https://creativecommons.org/licenses/by-nc/2.5/">CC BY-NC 2.5</a> by <a href="https://xkcd.com/about/">xkcd.com</a></p><p>As with all internet standards, none are perfect and all are far from permanent—CAA included. Being in the position to implement new standards at scale, seeing what effect adoption of those standards has, and working with the Internet community to address any issues or gaps is a privilege and allows us to live up to our mission of building a better Internet.</p><p>We're thrilled to be involved in efforts to make CAA (and any other standard) better for anyone and everyone.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[TLS 1.3]]></category>
            <category><![CDATA[TLS]]></category>
            <category><![CDATA[Reliability]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[Certificate Authority]]></category>
            <guid isPermaLink="false">3mWSshxk3v9PwoHKztcjAp</guid>
            <dc:creator>Max Nystrom</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Dedicated SSL Certificates]]></title>
            <link>https://blog.cloudflare.com/dedicated-ssl-certificates/</link>
            <pubDate>Fri, 30 Sep 2016 05:42:00 GMT</pubDate>
            <description><![CDATA[ When we launched Universal SSL in September 2014 we eliminated the costly and confusing process of securing a website or app with SSL, and replaced it with one free step: sign up for Cloudflare. ]]></description>
            <content:encoded><![CDATA[ <p>When we launched <a href="/introducing-universal-ssl/">Universal SSL</a> in September 2014 we eliminated the costly and confusing process of securing a website or application with SSL, and replaced it with one free step: sign up for Cloudflare.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/oB3OlsBKmitIgZsur5oUb/e6a5c960a0ab85197d6afd9334f1e932/3574716051_8d8c6c7eec_b.jpg" />
            
            </figure><p><a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0</a> <a href="https://www.flickr.com/photos/jdhancock/3574716051/in/album-72157618524893239/">image</a> by <a href="https://www.flickr.com/photos/jdhancock/">JD Hancock</a></p><p>When you complete the sign-up process, we batch your domain together with a few dozen other recently signed-up domains, and fire off a request to one of our Certificate Authority (CA) partners. The CA then sends us back a shared certificate covering the root (e.g. example.com) and top-level wildcard (e.g. *.example.com) of your domain, along with the hostnames of the other customers in the request. We then package this shared certificate with its encrypted private key and distribute it to our <a href="/amsterdam-to-zhuzhou-cloudflare-global-network/">datacenters</a> around the world, ensuring that your visitors’ HTTPS sessions are speedy no matter where they originate.</p><p>Since that process was created, we have used it to secure millions of domains with <a href="https://www.cloudflare.com/application-services/products/ssl/">free Universal SSL certificates</a> and helped make the Internet a <a href="https://istlsfastyet.com/">faster</a> and <a href="/introducing-tls-1-3/">more secure</a> place.</p>
    <div>
      <h2>More control and personalization</h2>
      <a href="#more-control-and-personalization">
        
      </a>
    </div>
    <p>But along the way we heard from customers who wanted more control over the certificates used for their domains. They want control of when they’re issued, whether other customers’ (or Cloudflare’s) hostnames appear on them, the breadth of subdomains they <a href="https://www.cloudflare.com/application-services/solutions/domain-protection-services/">protect</a> and which SSL/TLS versions and encryption options they support.</p><p>In short, customers want a service that provides a non-shared, customizable certificate for their domain.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/38aFHz9vUVYfj4USGPywkx/61de2b085dc8b0de3ffbc22ac9f546ac/3432525439_1d23baa7de_b.jpg" />
            
            </figure><p><a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0</a> <a href="https://www.flickr.com/photos/jdhancock/3432525439/in/album-72157618524893239/">image</a> by <a href="https://www.flickr.com/photos/jdhancock/">JD Hancock</a></p><p>Perhaps the most common request we heard was "<i>I love your Universal SSL product, but how can I use it on my website in a way that the certificate shows my domain name instead of cloudflaressl.com? And how can I prevent the certificate from being shared with other customers (all without upgrading my plan)?</i>".</p><p>A close second was “*Why do I have to disable Cloudflare on my extra.long.name.example.com or risk my users experiencing browser errors? Your Universal SSL certificates cover only one level of wildcard but I also want my hosts at <i>.staging.example.com protected.</i>”</p><p>Lastly, as we’ve rolled out exciting encryption features like <a href="/introducing-tls-1-3/">TLS 1.3</a>, <a href="/fixing-the-mixed-content-problem-with-automatic-https-rewrites/">Automatic HTTPS Rewrites</a>, <a href="/opportunistic-encryption-bringing-http-2-to-the-unencrypted-web/">Opportunistic Encryption</a>, we’ve heard that you want granular control over which certificates and subdomains have these new features enabled.</p>
    <div>
      <h2>Dedicated SSL</h2>
      <a href="#dedicated-ssl">
        
      </a>
    </div>
    <p>Today we’re excited to announce two new products to meet all of these needs and many more to come: <a href="https://www.cloudflare.com/ssl/dedicated-certificates/">Dedicated SSL Certificates</a> and <a href="https://www.cloudflare.com/ssl/dedicated-certificates/">Dedicated SSL Certificates with Custom Hostnames</a>. These new certificate offerings are issued on-demand, with a new private key generated exclusively for your domain, and branded prominently with your <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name/">domain name</a>.</p><p>A customer owning the domain dedicatedcerts.xyz would have shared certificate with a name like ssl329744.cloudflaressl.com under Universal SSL, but their own certificate with Dedicated SSL Certificates.</p><p><b>Dedicated Certificate as rendered in Google Chrome</b></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1SckEdxYOecZOCqcXTPW2s/38294446a5e6d2842d437ddfe341640d/dedicated-upgrade.png" />
            
            </figure><p><b>Universal SSL Certificate as rendered in Google Chrome</b></p><p>Dedicated Certificates combine the benefits of Universal SSL certificates—automated renewal and <a href="/the-heartbleed-aftermath-all-cloudflare-certificates-revoked-and-reissued/">rapid revocation/reissuance</a> to address nascent <a href="https://www.openssl.org/news/vulnerabilities.html">crypto vulnerabilities</a>—without having to upload (and manage the renewal of) certificates purchased elsewhere.</p><p>They’re also the first step in our plan to provide true subdomain-level customization of your HTTPS settings, whether <a href="https://support.cloudflare.com/hc/en-us/articles/206029258-How-to-use-Cloudflare-s-Require-Modern-TLS-Feature">requiring</a> <a href="https://support.cloudflare.com/hc/en-us/articles/206029258-How-to-use-Cloudflare-s-Require-Modern-TLS-Feature">Modern TLS</a> or selectively enabling new and upcoming features such as Automatic HTTPS Rewrites or HTTPS from within China using separate keys.</p><p>Unlike custom certificates that you acquire and upload yourself, Dedicated Certificates free you from the complexity and monotony of safely generating and storing private keys; crafting certificate signing requests (CSRs); requesting, downloading, and building certificate chains; and regularly renewing and re-installing certificates on your server. Why risk letting a certificate expire and show errors to users, or not reissuing your key pair fast enough when the next <a href="/searching-for-the-prime-suspect-how-heartbleed-leaked-private-keys/">Heartbleed</a> pops up?</p>
    <div>
      <h2>Sounds great. How do I order one?</h2>
      <a href="#sounds-great-how-do-i-order-one">
        
      </a>
    </div>
    <p>The process is incredibly easy and quick. Simply log in to the Cloudflare Dashboard, click on the Crypto tab, and then click the "Order SSL Certificate" button. You’ll be asked whether you need to add custom hostnames, given a chance to input them, and then confirm your billing information. The cost for a Dedicated Certificate is $5 per month and the cost of a Dedicated Certificate with Custom Hostnames is $10 per month.</p><p>As soon as you hit "Next" we’ll validate your domain name with one of our Certificate Authorities, charge your account for the remainder of the month, and then order the certificate and distribute it to our edge. The whole process takes just a minute or two to order and send your certificate to all 100 of our datacenters, where it’ll be ready and waiting to accelerate and protect your visitors’ HTTPS sessions.</p>
    <div>
      <h2>Use cases for Dedicated Certificates</h2>
      <a href="#use-cases-for-dedicated-certificates">
        
      </a>
    </div>
    
    <div>
      <h4>Isolating certificates from other Cloudflare customers’ zones</h4>
      <a href="#isolating-certificates-from-other-cloudflare-customers-zones">
        
      </a>
    </div>
    <p>While there are no inherent security risks with a shared certificate, we’ve heard from quite a few customers that they do not want their hostnames listed alongside the hostnames of other customers (who may be in other, entirely unrelated industries). By ordering a Dedicated Certificate you can be sure that only your hostnames appear on your certificate.</p>
    <div>
      <h4>Isolating certificates for agencies and SaaS providers</h4>
      <a href="#isolating-certificates-for-agencies-and-saas-providers">
        
      </a>
    </div>
    <p>Similarly, Dedicated Certificates allows agencies, SaaS providers, and other businesses to isolate their customers onto separate certificates—a must for those serving competitive firms in the same industry. If you currently serve customer1 and customer2 on a sub-domain of your zone, example.com, you can issue a separate certificate to each, guaranteeing that neither customers’ domain name appears on the other’s certificate.</p>
    <div>
      <h4>A branded HTTPS experience</h4>
      <a href="#a-branded-https-experience">
        
      </a>
    </div>
    <p>Universal SSL certificates are issued using a common name that is a concatenation of "ssl", a six-digit sequence number, and “.cloudflaressl.com”. For example, ssl123456.cloudflaressl.com. With Dedicated Certificates you can use your domain name in this field, and be sure that no other domains—whether an unrelated site or yours or someone else’s—are ever shown to your visitors.</p>
    <div>
      <h4>Protecting multiple levels of subdomains</h4>
      <a href="#protecting-multiple-levels-of-subdomains">
        
      </a>
    </div>
    <p>Until today, if you had orange-clouded (proxied) entries in <a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a> for hosts such as <a href="http://www.staging.example.com">www.staging.example.com</a> and <a href="http://www.uat.example.com">www.uat.example.com</a>, you would need a Business or Enterprise plan to avoid showing your users SSL errors (that may or may not be dismissible, depending on other security settings). Using Dedicated Certificates with Custom Hostnames you can now order a certificate protecting *.staging.example.com, *.uat.example.com—with room for up to 50 total hostnames or wildcards.</p>
    <div>
      <h4>Control over reissuance frequency</h4>
      <a href="#control-over-reissuance-frequency">
        
      </a>
    </div>
    <p>Dedicated Certificates gives you control over how frequently you want their private keys to be regenerated and your certificate reissued. Want us to reissue your certificate immediately? Weekly? Simply delete it from the Edge Certificates table and request another one through our UI or API. You won’t be charged for the replacement unless you explicitly cancel your monthly subscription.</p>
    <div>
      <h4>Dedicated private keys for SSL in China (coming soon)</h4>
      <a href="#dedicated-private-keys-for-ssl-in-china-coming-soon">
        
      </a>
    </div>
    <p>Enterprise customers that want to <a href="https://www.cloudflare.com/network/china/">serve SSL within China</a> may have concerns about using the same private key there as the one that secures their HTTPS traffic in other parts of the world. We’re looking forward to giving you control over designating a specific Dedicated SSL Certificate to be used exclusively in China.</p>
    <div>
      <h3>What if I make a mistake during my order?</h3>
      <a href="#what-if-i-make-a-mistake-during-my-order">
        
      </a>
    </div>
    <p>Not a problem. Simply delete the certificate from the Edge Certificates card on the Crypto tab in your dashboard and re-order it. You will not be prompted for payment again unless you explicitly cancel the subscription from the Subscriptions page.</p>
    <div>
      <h2>Can Dedicated Certificates be used with all plans?</h2>
      <a href="#can-dedicated-certificates-be-used-with-all-plans">
        
      </a>
    </div>
    <p>Yes, all <a href="https://www.cloudflare.com/plans/">Cloudflare plans</a> can order Dedicated Certificates.</p><p>If you are a Free, Pro, or Business customer, simply follow the instructions above to place an order. If you are an Enterprise customer or want to order certificates for a Multi-User Organization, please contact your Customer Success Engineer to request that your account be provisioned with the desired number of certificates.</p><p>Note that in all cases you must have completed the onboarding process for your zone and have your nameservers pointed to Cloudflare DNS. We are working on adding support for those zones that use an external DNS provider, or have been onboarded through one of our partners.</p>
    <div>
      <h2>I have a Universal SSL certificate, a Dedicated Certificate, a Dedicated Certificate with Custom Hostnames, and an Uploaded Certificate all listed in the dashboard. Which one will be served to my web visitors?</h2>
      <a href="#i-have-a-universal-ssl-certificate-a-dedicated-certificate-a-dedicated-certificate-with-custom-hostnames-and-an-uploaded-certificate-all-listed-in-the-dashboard-which-one-will-be-served-to-my-web-visitors">
        
      </a>
    </div>
    <p>Certificates are served in the following priority order (from highest to lowest):</p><ol><li><p>Uploaded Certificates</p></li><li><p>Dedicated Certificates with Custom Hostnames</p></li><li><p>Dedicated Certificates</p></li><li><p>Universal Certificates</p></li></ol><p>However, if the highest priority certificate doesn’t have a hostname matching the incoming request, we’ll move on to the next certificate. If none of the certificates can handle the request, e.g., you’re serving traffic at <a href="http://www.staging.example.com">www.staging.example.com</a> but haven’t purchased a Dedicated Certificate with Custom Hostnames (or uploaded a certificate to a Business or Enterprise plan), your users will see an error.</p>
    <div>
      <h2>How do Dedicated Certificates differ from Let's Encrypt or another CA?</h2>
      <a href="#how-do-dedicated-certificates-differ-from-lets-encrypt-or-another-ca">
        
      </a>
    </div>
    <p>Cloudflare works with Let's Encrypt (and other CA certificates) in two ways: you can upload a Let's Encrypt certificate and we will serve it to your visitors, and when we make a connection to your origin server you can use a Let's Encrypt certificate to secure the connection.</p><p>Cloudflare's Dedicated Certificates totally automates the process of acquiring and distributing a certificate and has added advantages over using a third-party certificate.</p><ol><li><p>We optimize the certificate chain to maximize compatibility with browsers/user agents, and deploy <a href="/tls-certificate-optimization-technical-details/">multiple versions of your certificate</a>—SHA-2/ECDSA, SHA-2/RSA, and SHA-1/RSA—in a <a href="https://support.cloudflare.com/hc/en-us/articles/216532638-FAQ-Custom-Certificate-Packs-SHA-2-and-SHA-1-">certificate pack</a>. Based on the capabilities of the browser sending each incoming request, we’ll serve the most optimal certificate for that connection.</p></li><li><p>We support both custom names on the certificate and wildcard records (at multiple levels).</p></li><li><p>We handle renewal automatically and distributed renewed certificates without any work required by you.</p></li></ol>
    <div>
      <h2>How do Dedicated Certificates relate to Origin CA certificates?</h2>
      <a href="#how-do-dedicated-certificates-relate-to-origin-ca-certificates">
        
      </a>
    </div>
    <p>Dedicated Certificates encrypt traffic between your visitors’ web browsers and Cloudflare, while <a href="/cloudflare-ca-encryption-origin">Origin CA certificates</a> encrypt traffic between Cloudflare and your (origin) server.</p><p>When a user connects to your site hosted on Cloudflare, e.g., <a href="https://www.example.com">https://www.example.com</a>, a Dedicated Certificate will be used if it exists. When we need to fetch data from your origin server, we’ll look for an Origin CA (or other) certificate on your origin.</p><p>The two offerings are complementary and should be used together with Strict mode to create a validated, end-to-end encrypted connection.</p>
    <div>
      <h2>Can I put multiple domains on my Dedicated Certificate?</h2>
      <a href="#can-i-put-multiple-domains-on-my-dedicated-certificate">
        
      </a>
    </div>
    <p>No, these certificates are branded with the Common Name (CN) of the domain under which you placed the order. All custom hostnames or wildcard entries added must be subdomains of this parent zone.</p><p>If you would like a Dedicated Certificate for another domain, simply switch to that zone using the "Select Website" dropdown in the top-left corner of the Cloudflare Dashboard.</p><p><b>Want to work with the amazing group of Software Engineers and Product Designers that built this product?</b></p><p>We’d love to talk to you. And we’re always hiring. Reach out on whatever medium suits you, or find us at <a href="https://www.cloudflare.com/join-our-team/">https://www.cloudflare.com/join-our-team</a>!</p> ]]></content:encoded>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">3T0OOjZLlVHQ1rBGIFAPK3</guid>
            <dc:creator>Patrick R. Donahue</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing CloudFlare Origin CA]]></title>
            <link>https://blog.cloudflare.com/cloudflare-ca-encryption-origin/</link>
            <pubDate>Tue, 03 May 2016 11:40:25 GMT</pubDate>
            <description><![CDATA[ In the fall of 2014 CloudFlare launched Universal SSL and doubled the number of sites on the Internet accessible via HTTPS. In just a few days we issued certificates protecting millions of our customers’ domains and became the easiest way to secure your website with SSL/TLS. ]]></description>
            <content:encoded><![CDATA[ <p></p>
    <div>
      <h3>Free and performant encryption to the origin for CloudFlare customers</h3>
      <a href="#free-and-performant-encryption-to-the-origin-for-cloudflare-customers">
        
      </a>
    </div>
    <p>In the fall of 2014 CloudFlare <a href="/introducing-universal-ssl/">launched Universal SSL</a> and doubled the number of sites on the Internet accessible via HTTPS. In just a few days we issued certificates protecting millions of our customers’ domains and became the easiest way to <a href="https://www.cloudflare.com/application-services/products/ssl/">secure your website with SSL/TLS</a>.</p><p>At the time, we "strongly recommend[ed] that site owners install a certificate on their web servers so we can encrypt traffic to the origin." This recommendation was followed by a <a href="/origin-server-connection-security-with-universal-ssl/">blog post</a> describing two readily-available options for doing so—creating a self-signed certificate and purchasing a publicly trusted certificate—and a third, still-in-beta option: using our private CA. Even though out-of-pocket costs of acquiring public CA certificates <a href="https://letsencrypt.org">have since fallen to $0</a> since that post, we have continued to receive requests from our customers for an even easier (and more performant) option.</p><p>Operating a public certificate authority is difficult because you don't directly control either endpoint of the HTTPS connection (browser or web server). As a result, public CAs are limited both in their ability to issue certificates optimized for inter-server communication, as well as in their ability to revoke certificates if they are compromised. Our situation at CloudFlare is markedly different: we affirmatively control the edge of our network so we have the flexibility to build and operate a secure CA that’s capable of issuing highly streamlined certificates and ensuring they are utilized securely.</p>
    <div>
      <h3>Less is more: removing the extraneous</h3>
      <a href="#less-is-more-removing-the-extraneous">
        
      </a>
    </div>
    <p>With Origin CA, we questioned all aspects of certificate issuance and browser validation, from domain control validation (DCV) to path bundling and revocation checking. We asked ourselves what cruft public CAs would remove from certificates if they only needed to work with one browser, whose codebase they maintained? Questions such as "why bloat certificates with intermediate CAs when they only need to speak with our NGINX-based reverse proxy" and "why force customers to reconfigure their web or name server to pass DCV checks when they’ve already demonstrated control during zone onboarding?" helped shape our efforts.</p><p>The result of us asking these questions and removing anything not needed to secure the connection between our servers and yours is described below, along with the benefits you may see and the interfaces you may use. We’re excited to introduce this third option for protecting your origin—more secure than self-signed certificates and more convenient, performant, and cost effective than publicly trusted certificates—and look forward to hearing about all the various ways you may use it.</p>
    <div>
      <h3>What are the incremental benefits of Origin CA over public certificates?</h3>
      <a href="#what-are-the-incremental-benefits-of-origin-ca-over-public-certificates">
        
      </a>
    </div>
    
    <div>
      <h4>1. Ease of issuance and renewal</h4>
      <a href="#1-ease-of-issuance-and-renewal">
        
      </a>
    </div>
    <p>The most difficult and time-consuming part of securing your origin with TLS is obtaining—and renewing—a certificate. Or many certificates if you’re using a provider that doesn’t support wildcards. Often this process requires intimate knowledge of OpenSSL or related command line tools, a reconfiguration of your web or DNS server to accommodate domain control validation, and a regularly scheduled reminder or cron job to perform this process again every year (or even every few months). With Origin CA, we took the opportunity to remove as many of these obstacles as possible.</p><p>Customers more comfortable in the GUI can, with just two clicks, securely generate a private key and wildcard certificate that will be trusted by our systems for anywhere from 7 days to 15 years. And those who prefer more control over the process can use our API or CLI to issue certificates of specified validity, key type, and key size. Regardless of the user interface chosen, the potentially complicated validation process has been replaced by a simple API key now available in your account on the CloudFlare dashboard; we’ve already verified you control your zone, there’s no need to prove it again.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4aKKwwFmI91bim9WOmJ0HE/4709fb9705866b7185b4dccebdfe4865/strict-ssl.png" />
            
            </figure>
    <div>
      <h4>2. Wildcard certificates reduce complexity</h4>
      <a href="#2-wildcard-certificates-reduce-complexity">
        
      </a>
    </div>
    <p>If your origin server handles traffic for more than a few hostnames, it can get unwieldy to place a long list of SANs on each certificate request. The alternative—placing just one SAN on each certificate and using Server Name Indication (SNI) extension to lazy load the correct certificate—can easily get out of hand. In this deployment scenario the number of certificates required is a non-trivial fraction of the the number of hostnames you wish to protect (not to mention you may not even be allowed to do so on shared hosts).</p><p>Beyond provisioning efforts, placing too many SANs on a single certificate can <a href="https://cabforum.org/pipermail/performance/2014-May/000047.html">significantly increase the size</a> of the certificate. Larger certificates consume more bandwidth at your origin (which, unlike CloudFlare, may bill you for marginal bandwidth consumption). The obvious answer for protecting more than a few hostnames (or even domains) on your origin is to use wildcard certificates. With Origin CA, you can request a single certificate containing wildcards for any and all of the zones registered in your account; you can even add wildcards covering multiple levels of a domain, e.g., <code>*.example.com</code>, <code>*.secure.example.com</code>, and <code>*.another-example.com</code> can all co-exist on the same certificate.</p>
    <div>
      <h4>3. Speed and simplicity of revocation</h4>
      <a href="#3-speed-and-simplicity-of-revocation">
        
      </a>
    </div>
    <p>If you’ve ever tried revoking a publicly trusted certificate—or relying on browsers to distrust a revoked certificate—you know how unreliable the process can be. Take your pick of explanations from Google crypto-wunderkind Adam Langley—<a href="https://www.imperialviolet.org/2011/03/18/revocation.html">Revocation doesn’t work</a> (2011); <a href="https://www.imperialviolet.org/2014/04/19/revchecking.html">No, don’t enable revocation checking</a> (2014); or <a href="https://www.imperialviolet.org/2014/04/29/revocationagain.html">Revocation still doesn’t work</a> (2014)—they all reach the same conclusion: browser-based revocation checking is broken and useless without hard fails. (The advent of the OCSP Must-Staple extension should improve the situation, but if history is any indication it will be quite a while before sufficient browsers, certificate authorities, and issued certificates support it.)</p><p>Fortunately with Origin CA, we only need one "browser" to respect revocation: our edge. Failing hard—the only acceptable way to fail from a security perspective—is incredibly simple (and fast) when your user agent has an in-memory list of all valid certificates. (Try doing that with the millions of certificates issued by dozens of CAs over the past few years!) Rather than fire requests across the public Internet and praying they return quickly enough, our NGINX instances can just query a local database for each new HTTPS session and confirm in microseconds whether you’ve revoked the certificate for any reason.</p><p>And if/when the time comes to revoke, a single click and confirmation is all that’s required for our edge to distrust the certificate. If you expose or misplace your private key (and can’t find it under the couch or in the pockets of yesterday’s pants), simply navigate to the Crypto tab and click the "x" icon next to the compromised certificate. Within seconds we’ll push this revocation status worldwide and our edge servers will refuse to communicate with origins serving the revoked certificate. Such speed, security, and reliability is impossible without total control over the CA and browser ecosystem.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5k3l2VOBwjSwhRBAOEZLgw/ad92e85cee00d5e7e60c0e3a5945436a/revoke-modal.png" />
            
            </figure><p>Even if published to the world, to abuse your CloudFlare Origin CA certificate an attacker would either need to compromise your CloudFlare account or take control of your <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name-registrar/">registrar</a> or DNS provider account. In any case, you'd have a lot more to worry about than just a compromised certificate.</p>
    <div>
      <h4>4. Widely supported install base</h4>
      <a href="#4-widely-supported-install-base">
        
      </a>
    </div>
    <p>While most web server operators will elect to download the default PEM format for their certificate (as expected by Apache httpd and NGINX), many others will require a different variation. As illustrated in the screenshots below, certificates can be downloaded in several different formats, including DER, the binary equivalent of PEM’s ASCII, and PKCS#7, the Microsoft IIS Server and Apache Tomcat-compatible choice. Simply pick what works for your server and download it; there’s no need to learn cryptic command-line methods for converting.</p><p>Besides additional formats, we also have <a href="https://support.cloudflare.com/hc/en-us/articles/218408028">instructions for a wide variety of operating systems and web servers</a>. After generating your certificate simply select your desired destination from the 80+ different options and instructions specific to your environment will be displayed.</p>
    <div>
      <h4>5. Optimized certificates increase performance and reduce origin bandwidth consumption</h4>
      <a href="#5-optimized-certificates-increase-performance-and-reduce-origin-bandwidth-consumption">
        
      </a>
    </div>
    <p>Before a user agent can securely transmit HTTP actions like GET and POST to a web server, it must first establish the TLS session. To do so, the client kicks off a handshake by <a href="/tls-certificate-optimization-technical-details#step1clienthello">sending its own capabilities</a> and the server responds with the negotiated cipher suite and certificate that should be used to protect the conversation agreeing upon a symmetric key.</p><p>Until the client receives—and validates—the certificate(s) sent across the network by the origin, it is unable to complete the handshake and commence with requesting data. As such, it’s in the best interest of performance-sensitive users to make this certificate as small and unencumbered as possible. (Ideally the packet containing the certificate even fits within a single frame and is not fragmented during transmission.) One <a href="https://cabforum.org/pipermail/performance/2014-May/000047.html">brief survey</a> by a member of the <a href="https://cabforum.org/">CA/B Forum</a> found that while the majority of certificates were between 1-2 kB, several thousand were found in the wild at least 10 kB in size, with one even over 50(!) kB.</p><p>With Origin CA certificates, we’ve stripped everything that’s extraneous to communication between our servers and yours to produce the smallest possible certificate and handshake. For example, we have no need to bundle intermediate certificates to assist browsers in building paths to trusted roots; no need to include signed certificate timestamps (SCTs) for purposes of certificate transparency and EV treatment; no need to include links to Certification Practice Statements or other URLs; and no need to listen to Online Certificate Status Protocol (OCSP) responses from third-parties.</p><p>Eliminating these unnecessary components typically found in certificates from public CAs has allowed us to reduce the size of the handshake by up to 70%, from over 4500 bytes in some cases to under 1300. You can replicate this test yourself using the following two OpenSSL s_client calls:</p>
            <pre><code>$ for host in google.com bing.com cloudflare.com patriots.com; do echo -en "$host\t" &amp;&amp; openssl s_client -connect www.$host:443 -servername www.$host 2&gt;/dev/null &lt;/dev/null | grep "has read"; done
google.com      SSL handshake has read 3747 bytes and written 497 bytes
bing.com        SSL handshake has read 4252 bytes and written 583 bytes
cloudflare.com  SSL handshake has read 3845 bytes and written 501 bytes
patriots.com    SSL handshake has read 4507 bytes and written 499 bytes

$ openssl s_client -connect [ORIGIN_IP]:443 -servername [ORIGIN_HOSTNAME] 2&gt;/dev/null &lt;/dev/null | grep "has read"
SSL handshake has read 1289 bytes and written 496 bytes</code></pre>
            
    <div>
      <h3>How can Origin CA be used?</h3>
      <a href="#how-can-origin-ca-be-used">
        
      </a>
    </div>
    <p>Now that you've learned why you may want to use Origin CA-issued certificates on your origin, let’s explore the various interfaces you have for issuing (and revoking) them. Effective immediately, certificates for your origin can be issued in an automated fashion through our <a href="/cloudflare-ca-encryption-origin/#2apiapplicationprogramminginterface">API</a> or <a href="/cloudflare-ca-encryption-origin#3clicommandlineinterfacelinuxonly">CLI</a>, or through a guided wizard in the Crypto app on the <a href="https://www.cloudflare.com">CloudFlare Dashboard</a>. Each of the three available methods is described below along with examples:</p>
    <div>
      <h4>1. GUI: Crypto app in the CloudFlare Dashboard</h4>
      <a href="#1-gui-crypto-app-in-the-cloudflare-dashboard">
        
      </a>
    </div>
    <p>To get started, login to <a href="https://www.cloudflare.com/a/login">the dashboard</a> and click on the Crypto icon.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7aYmz9vQ74KDbgLUdkoghd/64ff7adf5ba2c6e24681462695baa923/heading.png" />
            
            </figure><p>Next, scroll down to the Origin Certificates card and click the "Create Certificate" button.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/16CIs13h8n6Utv9q0vzMFO/75e25e322034cdae1964ced74dc358a6/origin-certificates-emptytable.png" />
            
            </figure><p>At this point, you must decide whether you wish to provide your own certificate signing request (CSR) or let your browser create one using its cryptographic libraries.</p><p>If you’ve already generated a private key and CSR, select the radio button labeled "I have my own CSR" and paste the CSR contents into the textbox that appears. Alternatively, leave the default option of “Let CloudFlare generate a key pair using my browser” selected. (If you are accessing the dashboard using an older browser, i.e., one that does not support <a href="https://www.w3.org/TR/WebCryptoAPI/">Web Crypto API</a>, you will only see one option.)</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7tbWU0IOrjnp3dgQ1W2m5p/ac83f201c8f7b628f287b4b0456f1bfe/create-step1.png" />
            
            </figure><p>By default, the list of hostnames your origin certificate covers includes the apex of the currently selected zone (example.com) and one level of wildcard (*.example.com). If you’d like to protect additional hostnames outside this list (e.g., *.secure.example.com), simply type them in the input box at the bottom of the modal. You may add up to 100 hostnames (or wildcards) on a single certificate, spanning multiple zones, provided they are for zones active in your account. Please keep in mind that each additional SAN increases the size of your certificate, so applications requiring frequent updates to the origin (and thus TLS handshakes) you should use as few SANs as possible.</p><p>After entering additional hostnames (or confirming the defaults will suffice), click Next and your certificate will be generated. By default, it will be displayed in PEM format, which is what web servers such as Apache httpd and NGINX expect. If you require an alternative format, such as PKCS#7 for Microsoft’s IIS or Apache Tomcat, change the dropdown box appropriately and save the contents to your server. Or if you’d like to use a binary format such as DER, select that and click the download button.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ES61XNDaqGSGALF2KrHQn/be167e38324277b7c714b35fb48c8f1a/generated-cert.png" />
            
            </figure><p>Lastly, choose your web server from the select box at the bottom of the window and click "Show instructions". Doing so will open installation instructions in a new browser window that, once followed, will allow you to adjust your SSL setting (at the top of the Crypto app) to "Strict" mode.</p>
    <div>
      <h4>2. API: Application Programming Interface</h4>
      <a href="#2-api-application-programming-interface">
        
      </a>
    </div>
    <p>If you would like to automate the process of issuing certificates for your origin, or require more control over the parameters (e.g., shorter-lived certificates, greater key size, etc.), you can make use of our <a href="https://api.cloudflare.com/#origin-ca-properties">certificates API endpoint</a>.</p><p>Before calling the <a href="https://www.cloudflare.com/learning/security/api/what-is-an-api/">API</a> you will first need to generate a certificate signing request. To do so, you can use <a href="https://github.com/cloudflare/cfssl">cfssl</a> or <a href="https://www.openssl.org/">OpenSSL</a>. Instructions for the former can be <a href="/universal-ssl-encryption-all-the-way-to-the-origin-for-free/">found here</a>, while our friends at DigiCert have provided an <a href="https://www.digicert.com/easy-csr/openssl.htm">easy-to-use wizard</a> for the latter. Don't worry about including subject alternative names (SANs) in the CSR — we’ll take those in separately through the JSON payload.</p>
    <div>
      <h5>i. Generate a private key and CSR</h5>
      <a href="#i-generate-a-private-key-and-csr">
        
      </a>
    </div>
    
            <pre><code>$ openssl req -new -newkey rsa:2048 -nodes -out www_example_com.csr -keyout www_example_com.key -subj "/C=US/ST=California/L=/O=/CN=www.example.com"
Generating a 2048 bit RSA private key
.............................+++
.....................................................................................................................................+++
writing new private key to 'www_example_com.key'</code></pre>
            
    <div>
      <h5>ii. Obtain your Certificate API token</h5>
      <a href="#ii-obtain-your-certificate-api-token">
        
      </a>
    </div>
    <p>Log in to the CloudFlare dashboard, and click My Settings under your username in the top-right  hand corner. Scroll down to the API Key panel and click "View API Key".</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2R4UWX1Op2jBlpfPW5e6kU/85dbf029b7db0f52b415ad4ad25700c5/api-key-panel.png" />
            
            </figure><p>Click within the window that pops up and then copy the contents that is auto-selected to your clipboard. Save the key to an environment variable as it will be used in the subsequent curl command.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1dS3x5a8AGAuZcewhbA05d/4d7df94e75a9b613d05db037a372981e/scoped-token-data.png" />
            
            </figure>
            <pre><code>$   export CF_API_KEY="v1.0-c9..."</code></pre>
            
    <div>
      <h5>iii. Make the API call</h5>
      <a href="#iii-make-the-api-call">
        
      </a>
    </div>
    <p>Note that you will need to remove newlines from the CSR as newlines are not permitted in JSON and add them back into the certificate that’s returned. When you remove them you should replace the newline character (hex code 0A) with the string "\n".</p>
            <pre><code>$ curl -sX POST https://api.cloudflare.com/client/v4/certificates/ \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-AUTH-USER-SERVICE-KEY: $CF_API_KEY" \
--data '{"hostnames":["example.com","*.example.com"],"requested_validity":"365","request_type":"origin-rsa","csr":"-----BEGIN CERTIFICATE REQUEST-----...-----END CERTIFICATE REQUEST-----"}'</code></pre>
            
    <div>
      <h5>iv. Extract certificate from API response</h5>
      <a href="#iv-extract-certificate-from-api-response">
        
      </a>
    </div>
    
            <pre><code>{
  "success": true, "errors": [], "messages": [],
  "result": {
    "id": "0x47530d8f561faa08",
    "certificate": "-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----",
    "hostnames": [ "example.com", "*.example.com" ],
    "expires_on": "2014-01-01T05:20:00.12345Z",
    "request_type": "origin-rsa",
    "requested_validity": "365",
    "csr": "-----BEGIN CERTIFICATE REQUEST-----...-----END CERTIFICATE REQUEST-----"
  }
}</code></pre>
            
    <div>
      <h4>3. CLI: Command Line Interface (Linux only)</h4>
      <a href="#3-cli-command-line-interface-linux-only">
        
      </a>
    </div>
    <p>Lastly, if you’re using a Linux platform that supports RPM or DEB packages, the easiest way to request certificates is with the Origin CA CLI. Before proceeding, make sure you follow the instructions above in the API example to save your API key in the CF_API_KEY environment variable.</p><p>To get started, browse to <a href="https://pkg.cloudflare.com/">https://pkg.cloudflare.com/</a> and follow the instructions to add the CloudFlare Package Repository to your system. With the new package server in place, use apt or yum to install the "cfca" package (binary placed in /usr/local/bin on DEbian, e.g.,) and then issue a certificate in a manner similar to the following examples:</p>
    <div>
      <h5>i. Default parameters (RSA key, 15 year validity)</h5>
      <a href="#i-default-parameters-rsa-key-15-year-validity">
        
      </a>
    </div>
    
            <pre><code>$ /usr/local/bin/cfca getcert -hostnames example.com,*.example.com
2016/04/25 19:47:23 [INFO] generate received request
2016/04/25 19:47:23 [INFO] received CSR
2016/04/25 19:47:23 [INFO] generating key: rsa-2048
2016/04/25 19:47:24 [INFO] encoded CSR
2016/04/25 19:47:24 [INFO] Connecting to https://api.cloudflare.com/client/v4/certificates/
2016/04/25 19:47:25 [INFO] Successfully issued certificate for:
*.example.com
example.com
2016/04/25 19:47:25 [INFO] Saved generated private key to wildcard.example.com.key
2016/04/25 19:47:25 [INFO] Saved issued certificate to wildcard.example.com.pem</code></pre>
            
    <div>
      <h5>ii. Short-lived multi-zone ECC example (ECDSA key, 7 day validity)</h5>
      <a href="#ii-short-lived-multi-zone-ecc-example-ecdsa-key-7-day-validity">
        
      </a>
    </div>
    
            <pre><code>$ /usr/local/bin/cfca getcert -days 7 -hostnames *.foo.com,*.bar.com -key-type ecdsa -key-size 256
2016/04/26 12:24:24 [INFO] generate received request
2016/04/26 12:24:24 [INFO] received CSR
2016/04/26 12:24:24 [INFO] generating key: ecdsa-256
2016/04/26 12:24:24 [INFO] encoded CSR
2016/04/26 12:24:24 [INFO] Connecting to https://api.cloudflare.com/client/v4/certificates/
2016/04/26 12:24:28 [INFO] Successfully issued certificate for:
*.foo.com
*.bar.com
2016/04/26 12:24:28 [INFO] Saved generated private key to wildcard.foo.com.key
2016/04/26 12:24:28 [INFO] Saved issued certificate to wildcard.foo.com.pem

$ cat wildcard.foo.com.pem | openssl x509 -noout -text | grep "Not After\|Public Key Algorithm\|DNS"
Not After : May  3 19:19:00 2016 GMT
Public Key Algorithm: id-ecPublicKey
DNS:*.foo.com, DNS:*.bar.com</code></pre>
            
    <div>
      <h3>Final Recommendations &amp; Feedback</h3>
      <a href="#final-recommendations-feedback">
        
      </a>
    </div>
    <p>As you use Origin CA to generate certificates and secure your origin servers, keep these recommendations in mind:</p><ol><li><p>Use Origin CA to generate certificates for your origin servers, using wildcards for each zone to keep SANs to a minimum.</p></li><li><p>Upgrade each zone’s SSL setting from "Flexible" or "Full" to "Strict" mode you have Origin CA or public CA certificates installed protecting all hostnames in that zone.</p></li><li><p>If you were previously enrolled in our beta Origin CA program, you should issue new certificates so they include revocation endpoints.</p></li><li><p>When pausing CloudFlare or gray-clouding individual zones, be aware that you and your visitors may receive errors in their browsers until you orange-cloud (reverse proxy) them again.</p></li></ol><p>If you encounter any difficulty issuing certificates, or have any other concerns or suggestions, please open a <a href="https://support.cloudflare.com">support ticket</a> and we will be happy to assist you.</p> ]]></content:encoded>
            <category><![CDATA[HTTPS]]></category>
            <category><![CDATA[TLS]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">3MT7j1dVgl6kulh4PkOBRJ</guid>
            <dc:creator>Patrick R. Donahue</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare + WHMCS: faster websites for your customers]]></title>
            <link>https://blog.cloudflare.com/cloudflare-whmcs-faster-websites-for-your-customers/</link>
            <pubDate>Wed, 16 Sep 2015 17:47:41 GMT</pubDate>
            <description><![CDATA[ We’re at the cPanel Conference in Denver this week, so feel free to drop by our booth and say hello. It’s a great opportunity to connect with our partners and better understand their needs. ]]></description>
            <content:encoded><![CDATA[ <p><i>Update, Nov, 9, 2022: plugin support is </i><a href="https://support.cloudflare.com/hc/en-us/articles/360042380772-Partner-Plugin-Supportability"><i>discontinued</i></a><i> for WHMCS.</i></p><p>We’re at the cPanel Conference in Denver this week, so feel free to drop by our booth and say hello. It’s a great opportunity to connect with our partners and better understand their needs. We’re always trying to streamline our partners’ user experience, and we thought it would be a fitting time to walk through our recently updated WHMCS integration.</p><p>CloudFlare’s WHMCS 6.0 plugin lets hosting providers and registrars extend all the <a href="https://www.cloudflare.com/overview">benefits</a> of CloudFlare directly to their customers. You can offer your entire user base a global CDN with 62 points of presence, automatic <a href="https://www.cloudflare.com/features-optimizer">web content optimization</a>, basic DDoS protection, reputation-based threat protection, and much more with virtually no extra work.</p><p>These benefits are seamlessly integrated into your WHMCS client. All your customers need to do is click a button, and a new CloudFlare account will be configured for them.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3gsoGitSkCZ8XZ3GCMocFN/72c9c310fa452f8843cce2e628759c39/whmcs-cloudflare-integration.png" />
            
            </figure><p>While <a href="https://www.cloudflare.com/a/sign-up">signing up</a> for an account on <a href="http://www.cloudflare.com">www.cloudflare.com</a> only takes a few minutes, users do need to point the relevant DNS records to CloudFlare’s nameservers. Offerring a one-click solution via our WHMCS integration is a great opportunity for hosting providers and registrars to streamline the process for their customers.</p>
    <div>
      <h3>Universal SSL with WHMCS</h3>
      <a href="#universal-ssl-with-whmcs">
        
      </a>
    </div>
    <p>CloudFlare’s <a href="https://www.cloudflare.com/ssl">Universal SSL</a> offering provides free SSL encryption to all customers on its network. However, as a partner, Universal SSL is only available with <a href="https://support.cloudflare.com/hc/en-us/articles/203685674-Full-setup-versus-Partial-CNAME-setup">full DNS integration</a> (opposed to CNAME integration). Our WHMCS module comes with full DNS integration built-in, making it the fastest way to get up and running with Universal SSL.</p><p>So, in addition to the performance and basic security benefits of CloudFlare, you can also offer free SSL encryption to all of your customers.</p>
    <div>
      <h3>Getting started</h3>
      <a href="#getting-started">
        
      </a>
    </div>
    <p>Becoming a partner means you can offer your customers faster and more secure websites than providers that don’t have a CloudFlare integration.</p><p>To integrate CloudFlare into your WHMCS solution, start by visiting our <a href="https://www.cloudflare.com/certified-partners">partners page</a> and telling us a little bit about your company. We’ll provide an API key that you can use to install our <a href="http://www.cloudflare.com/static/misc/cloudflare_whmcs-latest.zip">WHMCS module</a>. For technical questions related to our integrations, please email us at <a>partnersupport@cloudflare.com</a>.</p> ]]></content:encoded>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Partners]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">5sSONuHkfoIPpj4rFpVwKL</guid>
            <dc:creator>Maria Karaivanova</dc:creator>
        </item>
        <item>
            <title><![CDATA[Universal SSL: Encryption all the way to the origin, for free]]></title>
            <link>https://blog.cloudflare.com/universal-ssl-encryption-all-the-way-to-the-origin-for-free/</link>
            <pubDate>Tue, 24 Feb 2015 20:15:12 GMT</pubDate>
            <description><![CDATA[ Last September, CloudFlare unveiled Universal SSL, enabling HTTPS support for all sites by default. All sites using CloudFlare now support strong cryptography from the browser to CloudFlare’s servers. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Last September, CloudFlare unveiled <a href="/introducing-universal-ssl/">Universal SSL</a>, enabling HTTPS support for all sites by default. All sites using CloudFlare now support strong cryptography from the browser to CloudFlare’s servers. One of the most popular requests for Universal SSL was to make it easier to encrypt the other half of the connection: from CloudFlare to the origin server.</p><p>Until today, encryption from CloudFlare to the origin required the purchase of a trusted certificate from a third party. The certificate purchasing process can be tedious and sometimes costly. To remedy this, CloudFlare has created a new Origin CA service in which we provide free limited-function certificates to customer origin servers.</p><p>Today we are excited to announce the public beta of this service, providing full encryption of all data from the browser to the origin, for free.</p>
    <div>
      <h3>Encrypted all the way</h3>
      <a href="#encrypted-all-the-way">
        
      </a>
    </div>
    <p>CloudFlare offers three modes for HTTPS: Flexible, Full and Strict. In Flexible mode, traffic from browsers to CloudFlare is encrypted, but traffic from CloudFlare to a site's origin server is not. In Full and Strict modes, traffic between CloudFlare and the origin server is encrypted. Strict mode adds validation of the origin server’s certificate. We strongly encourage customers to select Strict mode for their websites to ensure their visitors get the strongest data security possible.</p><p>As we <a href="/origin-server-connection-security-with-universal-ssl/">previously discussed</a>, sites on <a href="https://www.cloudflare.com/plans/free/">CloudFlare’s Free plan</a> default to Flexible SSL mode. To take advantage of our Strict SSL mode it’s necessary to install a certificate on the origin server, which until now required them to buy one from a third party. Now customers can get that certificate directly from CloudFlare, for free.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1uVSxqXR6vUpUQ6ugD42yo/79d259ee62d60e2105efd2e36ec13cbf/illustration-strict-ssl--2-.png" />
            
            </figure><p>This certificate is only used to protect the traffic between the origin server and CloudFlare; it is never presented to browsers. For now you should only use it behind orange-clouded sites on CloudFlare.</p><p>If you are a CloudFlare customer and want to sign up for the beta, just send an email to <a>origin-ca-beta@cloudflare.com</a> with the following:</p><ul><li><p>A certificate signing request (CSR)</p></li><li><p>The domain name of the orange-clouded zone you want to install the certificate on</p></li></ul><p>The first <i>ten</i> brave beta customers will get a shiny new certificate to install on their web server. Note: do <i>not</i> send your private key to CloudFlare, only the CSR is needed.</p><p><i>Update: The beta is full! Thanks to those who are participating.</i></p>
    <div>
      <h3>CloudFlare’s Origin Certificate Authority</h3>
      <a href="#cloudflares-origin-certificate-authority">
        
      </a>
    </div>
    <p>In order to grant certificates to customer origins, CloudFlare had to create its own Certificate Authority. This consists of a set of processes and systems to validate certificate requests and create new certificates. For the Origin CA, CloudFlare created a private key and certificate for the specific purpose of signing certificates for origin servers.</p>
    <div>
      <h4>Software</h4>
      <a href="#software">
        
      </a>
    </div>
    <p>The certificate authority software we use is <a href="/introducing-cfssl/">CFSSL</a>, our open source PKI toolkit written in Go. It allows us to validate CSRs and use them to create new certificates for sites. These certificates are signed with our certificate authority private key, and validated when CloudFlare connects to the origin in Strict SSL mode.</p><p>In collaboration with other members of the industry (such as Richard Barnes from the <a href="https://letsencrypt.org/">Let's Encrypt</a> project), we have updated CFSSL with several new features that help make it a viable certificate authority tool. These include <a href="http://en.wikipedia.org/wiki/PKCS_11">PKCS#11</a> support, which makes it possible for CFSSL to use a Hardware Security Module (HSM) to store private keys and <a href="http://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol">OCSP</a> support, which lets CFSSL answer questions about the revocation status of a certificate.</p>
    <div>
      <h4>Validation</h4>
      <a href="#validation">
        
      </a>
    </div>
    <p>CAs are supposed to only give certificates to sites that own the domain(s) listed in the certificate. Domain validation is usually done in one of three ways:</p><ul><li><p>Putting a challenge in the DNS zone</p></li><li><p>Putting a challenge into a meta-tag of an HTML page hosted on the domain</p></li><li><p>Sending an email challenge to the domain registrant from the WhoIs DB</p></li></ul><p>Since CloudFlare is both a <a href="https://www.cloudflare.com/learning/cdn/what-is-a-cdn/">content delivery network</a> and a DNS provider, both DNS and HTML validation can be done by CloudFlare on behalf of the site. If your site is on CloudFlare and orange-clouded, we will give you a certificate for your site.</p>
    <div>
      <h4>Public trust</h4>
      <a href="#public-trust">
        
      </a>
    </div>
    <p>The CloudFlare Origin CA is currently not trusted by browsers, so these certificates should not be used on sites that are not behind CloudFlare. To issue certificates that are trusted by browsers, we would have to convince a publicly trusted certificate authority to cross-sign our CA certificate. This is not necessary in this case since it is CloudFlare that determines which certificates we trusted and the Origin CA is on our list.</p><hr />
    <div>
      <h3>Bonus: How to create Certificate Signing Requests</h3>
      <a href="#bonus-how-to-create-certificate-signing-requests">
        
      </a>
    </div>
    <p>The certificate signing request (CSR) is the standard mechanism for obtaining a certificate from a certificate authority. It contains a public key, some metadata such as which domain it is for and is digitally signed by a private key. It lets CloudFlare know that you own the private key.</p>
    <div>
      <h4>Creating a CSR and private key with CFSSL</h4>
      <a href="#creating-a-csr-and-private-key-with-cfssl">
        
      </a>
    </div>
    <p>CFSSL is not only a tool that can be used for running a CA, but it can be used to create CSRs too. Following these instructions will get you a private key and a CSR to submit to a certificate authority.</p><h6>1) Install Go:</h6><p><a href="https://golang.org/doc/install">https://golang.org/doc/install</a></p><h6>2) Install CFSSL</h6>
            <pre><code>$ go get github.com/cloudflare/cfssl/cmd/...</code></pre>
            <h6>3) Create a CSR template</h6><p>Use the following template for <code>csr.json</code> and replace “mysite.com” with your site’s <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name/">domain name</a> and names with your company's information.</p><p>csr.json:</p>
            <pre><code>{
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "hosts": [
    “mysite.com"
  ],
 "CN": "mysite.com",
  "names": [
    {
      "C": "US",
      "L": "San Francisco",
      "ST": "California",
      "O": "My Company, Inc.",
      "OU": "My Company’s IT Department"
    }
  ]
}</code></pre>
            <h6>4) Create the certificate</h6>
            <pre><code>$ cfssl genkey csr.json | cfssljson -bare site</code></pre>
            <p>This creates two files:</p><ul><li><p><code>site.csr</code>: your CSR</p></li><li><p><code>site-key.pem</code>: your private key</p></li></ul>
    <div>
      <h5>Other resources</h5>
      <a href="#other-resources">
        
      </a>
    </div>
    <p>If CFSSL is not working for you, here are some more resources for creating CSRs:</p><ul><li><p><a href="https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1/19/csr-generation-using-openssl-apache-wmod_ssl-nginx-os-x">Comodo</a></p></li><li><p><a href="https://support.globalsign.com/customer/portal/articles/1229769-certificate-signing-request-csr---overview">GlobalSign</a></p></li><li><p><a href="https://www.digicert.com/csr-creation.htm">Digicert</a></p></li></ul><p>In the future we plan on releasing tools to make certificate generation even easier and more automatic.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/gkjU9sNg6L0UT6j0x6keC/bd0b762f12482a99f8a66eba329b7331/cloudflare_ssl-week-2.png" />
            
            </figure><p></p> ]]></content:encoded>
            <category><![CDATA[HTTPS]]></category>
            <category><![CDATA[CFSSL]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[Encryption]]></category>
            <category><![CDATA[Certificate Authority]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">47jKviMlM0kk9qsg8TQ3xz</guid>
            <dc:creator>Nick Sullivan</dc:creator>
        </item>
        <item>
            <title><![CDATA[TLS Session Resumption: Full-speed and Secure]]></title>
            <link>https://blog.cloudflare.com/tls-session-resumption-full-speed-and-secure/</link>
            <pubDate>Tue, 24 Feb 2015 14:20:26 GMT</pubDate>
            <description><![CDATA[ At CloudFlare, making web sites faster and safer at scale is always a driving force for innovation. We introduced “Universal SSL” to dramatically increase the size of the encrypted web. ]]></description>
            <content:encoded><![CDATA[ <p>At CloudFlare, making web sites faster and safer at scale is always a driving force for innovation. We introduced “<a href="/universal-ssl-how-it-scales/">Universal SSL</a>” to dramatically increase the size of the encrypted web. In order for that to happen we knew we needed to efficiently handle large volumes of HTTPS traffic, and give end users the fastest possible performance.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2wjvWjC2tNe2fmxUhuWLUN/ff2b81ce5075aa45d5f78a52a1343f42/7439386300_837724fe8e_z.jpg" />
            
            </figure><p><a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0</a> <a href="https://www.flickr.com/photos/ecossystems/7439386300/in/photolist-ckoNn3-ckoMrj-ckoDLC-2avSAw-ckoMTE-cknaTs-cknaL7-nGDFzz-nvRvYP-8TqyZC-sszBV-4NV8t8-6KsRdt-9A92Ci-4yuwtQ-9X7Bkd-7kERzD-fUG4DG-7UGXkZ-8F4mG3-ar89v8-8TqJW5-8TnCai-cJorC1-cKPf55-nr6F4s-wrLjf-aNqxbR-eVfMiZ-dJRj8E-jogBj4-feJ1Y-49rZz6-pv8QoU-cJorDA-a6tf2m-4VoZZs-9qWH8F-bvb1X6-aoa1zS-jogRMo-7UGWb2-joqdky-9Q51D7-gdczv-4Lu4qb-6R4VUd-8Tqojq-6QZSQB-6QZSEx">image</a> by <a href="https://www.flickr.com/photos/ecossystems/">ecos systems</a></p><p>In this article, I’ll explain how we added speed to Universal SSL with session resumptions across multiple hosts, and explain the design decisions we made in this process. Currently, we use two standardized session resumption mechanisms that require two different data sharing designs: Session IDs <a href="https://tools.ietf.org/html/rfc5246">RFC 5246</a>, and Session Tickets <a href="https://tools.ietf.org/html/rfc5077">RFC 5077</a>.</p>
    <div>
      <h2>Session ID Resumption</h2>
      <a href="#session-id-resumption">
        
      </a>
    </div>
    <p>Resuming an encrypted session through a session ID means that the server keeps track of recent negotiated sessions using unique session IDs. This is done so that when a client reconnects to a server with a session ID, the server can quickly look up the session keys and resume the encrypted communication.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5XN2D3lCPIVBbE7SazQkS5/3cc478f12f8bf390c2d7365ea2e2288f/session_resumption_with_session_id.jpg" />
            
            </figure><p>At each of CloudFlare’s PoPs (Point of Presence) there are multiple hosts handling HTTPS traffic. When the client attempts to resume a TLS connection with a web site, there is no guarantee that they will connect to the same physical machine that they connected to previously. Without session sharing, the success rate of session ID resumption could be as low as 1/n (when there are n hosts). That means the more hosts we have, the less likely a session can be resumed. This goes directly against our goal of scaling SSL performance!</p><p>CloudFlare’s solution to this problem is to share the sessions within the PoP, making the successful resumption rate approach 100%.</p>
    <div>
      <h2>How sessions are shared</h2>
      <a href="#how-sessions-are-shared">
        
      </a>
    </div>
    <p>We employ a memcached cluster to cache all the recent negotiated sessions from all the hosts within the same PoP. To enhance the secrecy and security of session keys, all cached sessions are encrypted. When a new session with a session ID is negotiated, a host will encrypt the new session and insert it to memcached, indexed by the session ID. When a host needs to look up a session for session resumption, it will query memcached using the session ID as the key and decrypt the cached session to resume it. All those operations happen as non-blocking asynchronous calls thanks to the power of <a href="http://openresty.org/">OpenResty</a>, and many handy OpenResty modules such as <a href="https://github.com/openresty/lua-resty-memcached">the fully asynchronous memcached client</a>. We also needed tweaks in OpenSSL to support asynchronous session caching.</p><p>I’d like to send a few shout-outs to my amazing colleagues Piotr Sikora and Yichun Zhang for making this project possible.</p>
    <div>
      <h2>Performance Improvement</h2>
      <a href="#performance-improvement">
        
      </a>
    </div>
    <p>Using OpenSSL’s <a href="https://www.openssl.org/docs/apps/s_client.html">s_client</a> utility, we can quickly test how a session ID is speeds up the TLS connection from the client side. We test the TLS performance of <a href="https://www.cloudflare.com">www.cloudflare.com</a> from our office. And the result is shown below:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3IccBdOGPS42EqiK8JiH7z/58333544b71bece5376737d367eb03d2/figure_1-1.png" />
            
            </figure><p></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/60Ar1nt9o6ku1Fr9Q7PwzD/de3e82ec883ab6aade8255b765f1a3f4/figure_2.png" />
            
            </figure><p>The overall cost of a session resumption is less than 50% of a full TLS handshake, mainly because session resumption only costs one round-trip while a full TLS handshake requires two. Moreover, a session resumption does not require any large finite field arithmetic (new sessions do), so the CPU cost for the client is almost negligible compared to that in a full TLS handshake. For mobile users, the performance improvement by session resumption means a much more reactive and battery-life-friendly surfing experience.</p>
    <div>
      <h2>Session Ticket Resumption</h2>
      <a href="#session-ticket-resumption">
        
      </a>
    </div>
    <p>Session resumption with session IDs has a major limitation: servers are responsible for remembering negotiated TLS sessions for a given period of time. It poses scalability issues for servers with a large load of concurrent connections per second and for servers that want to cache sessions for a long time. Session ticket resumption is designed to address this issue.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4aO6djKlA6MK8GFN6Isspa/ada797115af7ab8f068152b8b61752bb/session_resumption_with_session_ticket.jpg" />
            
            </figure><p>The idea is simple: outsource session storage to clients. A session ticket is a blob of <a href="https://tools.ietf.org/html/rfc5077#section-4">a session key and associated information</a> encrypted by a key which is only known by the server. The ticket is sent by the server at the end of the TLS handshake. Clients supporting session tickets will cache the ticket along with the current session key information. Later the client includes the session ticket in the handshake message to indicate it wishes to resume the earlier session The server on the other end will be able to decrypt this ticket, recover the session key and resume the session.</p><p>Now consider every host in the same PoP uses the same encryption key, the good news is that every host now is able to decrypt this session ticket and resume the session for the client. The not-so-good news is that this key becomes critical single point of failure for TLS security: if an adversary gets hold of it, the session key information is exposed for every session ticket! Even after the lifetime of a session ticket, such a loss would invalidate supposed “perfect forward secrecy” (as evangelized <a href="/staying-on-top-of-tls-attacks/">here on our blog</a>). Therefore, it is important to:</p><blockquote><p>“generate session ticket keys randomly, distribute them to the servers without ever touching persistent storage and rotate them frequently.”(<a href="https://www.imperialviolet.org/2013/06/27/botchingpfs.html">Adam Langley</a>)</p></blockquote>
    <div>
      <h2>How session encryption keys are encrypted, shared and rotated</h2>
      <a href="#how-session-encryption-keys-are-encrypted-shared-and-rotated">
        
      </a>
    </div>
    <p>To meet all these security goals, we first start an in-memory key generator daemon that generates a fresh, timestamped key every hour. Keys are encrypted so that only our nginx servers can decrypt them. Then with CloudFlare’s existing <a href="/kyoto-tycoon-secure-replication/">secure data propagation infrastructure</a>, ticket keys replicate from one primary instance to all of our PoPs around the world. Each host periodically queries the local copy of the database through a memcached interface for fresh encryption keys for the current hour. To summarize, the key generation daemon generates keys randomly and rotates them hourly, and keys are distributed to all hosts across the globe securely without being written to disk.</p><p>There are some technical details still worth mentioning. First, we need to tackle distributed clock synchronization. For example, there might be one host thinks it is UTC 12:01pm while other hosts still think it UTC 11:59am, the faster-clock host might start encrypting session tickets with the key of 12:00pm while other hosts could not decrypt those tickets because they don’t know the new key yet. Or the fast-clock host might find the key is not yet available due to propagation delay. Instead of dedicating efforts for synchronization, we solve the problem by breaking the synchronization requirement. The key daemon generates keys one hour ahead and each host would opportunistically save the key for the next hour (if there is any) as a decryption-only key. Now even with one or more faster-clock hosts, session resumption by ticket still works without interruption because they can still decrypt session tickets encrypted by any other.</p><p>Also we set the session ticket lifetime hint to be 18 hours, the same value for SSL session timeout. Each server also keeps ticket keys for the past 18 hours for ticket decryption.</p>
    <div>
      <h2>Conclusions</h2>
      <a href="#conclusions">
        
      </a>
    </div>
    <p>To summarize, we support TLS session resumption globally using both sessions IDs and session tickets. For any web site on CloudFlare’s network, HTTPS performance has been made faster for every user and every device.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6WloH8zZ0HRguIGNqe9Hu4/599874036b97e67327bbfa3b42afdcaf/cloudflare_ssl-week-2.png" />
            
            </figure> ]]></content:encoded>
            <category><![CDATA[TLS]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[Encryption]]></category>
            <category><![CDATA[Speed]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">58HqMls1vQte6DzOjtKmOg</guid>
            <dc:creator>Zi Lin</dc:creator>
        </item>
        <item>
            <title><![CDATA[SSL Week Means Less Weak SSL]]></title>
            <link>https://blog.cloudflare.com/ssl-week-means-less-weak-ssl/</link>
            <pubDate>Mon, 23 Feb 2015 12:35:48 GMT</pubDate>
            <description><![CDATA[ I'm excited to announce that today kicks off SSL Week at CloudFlare. Over the course of this week, we'll make a series of announcements on what we're doing to improve encryption on the Internet. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>I'm excited to announce that today kicks off SSL Week at CloudFlare. Over the course of this week, we'll make a series of announcements on what we're doing to improve encryption on the Internet.</p><p>Inherently, for encryption to be the most effective, it has to meet three criteria: 1) it needs to be easy and inexpensive to use; 2) it needs to be fast so it doesn't tax performance; and 3) it needs to be up to date and ahead of the latest vulnerabilities.</p>
    <div>
      <h3>Easy, Fast &amp; Secure</h3>
      <a href="#easy-fast-secure">
        
      </a>
    </div>
    <p>Throughout CloudFlare's history, these priorities have guided our approach to encryption. Last September, we announced Universal SSL and brought world class encryption to every CloudFlare customer, even those on our Free service plan. While that effort doubled the size of the encrypted web, our work is far from done. This week we're announcing a series of initiatives that further our efforts to ensure we provide the easiest, fastest, and most secure encryption.</p><p>While Universal SSL made it easy to ensure that the connection from a device to CloudFlare was secure, this week we're going to begin the process of making it easy (and free) to ensure the connection from CloudFlare back to the origin is secure as well. Beyond just encrypting the connection to the origin, we will also roll out a way to cryptographically ensure that the connection to the origin is, in fact, coming from CloudFlare's network.</p><p>In the last six months, research into cipher suites has continued at a torrid pace. The good news is that new ciphers that perform particularly well on mobile devices have started to become standardized. The bad news is that some of the older ciphers that were previously standard appear more and more likely to be comprisable. This week we'll, therefore, be adding support for a fast, new cipher while deprecating support for a cipher that we no longer have faith in.</p>
    <div>
      <h3>Stay Tuned</h3>
      <a href="#stay-tuned">
        
      </a>
    </div>
    <p>We have a number of other surprises in store to help build a better, safer Internet. Stay tuned, we're confident SSL Week will help ensure SSL is anything but weak.</p> ]]></content:encoded>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Crypto Week]]></category>
            <guid isPermaLink="false">13R3tsJbakgalgmdYNmhQX</guid>
            <dc:creator>Matthew Prince</dc:creator>
        </item>
        <item>
            <title><![CDATA[DNSSEC: An Introduction]]></title>
            <link>https://blog.cloudflare.com/dnssec-an-introduction/</link>
            <pubDate>Tue, 07 Oct 2014 10:39:34 GMT</pubDate>
            <description><![CDATA[ At CloudFlare our mission is to help build a better Internet. Part of this effort includes making web sites faster, more reliable, and more trustworthy. ]]></description>
            <content:encoded><![CDATA[ <p>At CloudFlare our mission is to help build a better Internet. Part of this effort includes making web sites faster, more reliable, and more trustworthy. The obvious first choice in protocols to help make websites more secure is HTTPS. CloudFlare’s latest product—<a href="/introducing-universal-ssl/">Universal SSL</a>—helps web site operators provide a trustworthy browsing experience for their site visitors by giving their site HTTPS support for free. In this blog post we look at another protocol, DNS, and explore one proposal to improve its trustworthiness: <a href="https://www.cloudflare.com/dns/dnssec/">DNSSEC</a>.</p><p><a href="https://www.cloudflare.com/learning/dns/what-is-dns/">DNS</a> is one of the pillars of authority on the Internet. DNS is used to translate <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name/">domain names</a> (like <a href="http://www.cloudflare.com">www.cloudflare.com</a>) to numeric Internet addresses (like 198.41.214.163)—it’s often referred to as the “phone book of the Internet”.</p><p>DNSSEC is a set of security extensions to DNS that provides the means for authenticating DNS records. CloudFlare is planning to introduce DNSSEC in the next six months, and has brought <a href="https://twitter.com/OGudm">Olafur Gudmundsson</a>, one of the inventors of DNSSEC, on board to help lead the project.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3zkxemCDLDPoVFeuGIKDZ9/c66039fd818dc902175cdcb15aacf695/4607090398_3621af5fdc_z.jpg" />
            
            </figure><p>CC BY 2.0 by <a href="https://www.flickr.com/photos/walkingsf/">Eric Fischer</a></p>
    <div>
      <h4>Introduction</h4>
      <a href="#introduction">
        
      </a>
    </div>
    <p>The Domain Name System (DNS) is one of the oldest and most fundamental components of the modern Internet. As the mechanism that maps domain names to Internet Protocol (IP) addresses, it provides a human-readable layer to navigate the millions of machines and devices on the Internet. In the early 1980s, when DNS was designed, there was no consideration for strong security mechanisms in the protocol. Computers at that time were underpowered compared with today’s machines, public key cryptography was a relatively new concept and highly regulated, and the network was much smaller, with fewer participants who were relatively well known and trusted. As the network grew and evolved, DNS remained unchanged as an insecure and unauthenticated protocol.</p><p>In 1993, the IETF started a public discussion around how DNS could be made more trustworthy. Eventually, a set of extensions to DNS, called Domain Name System Security Extensions (DNSSEC), were settled on, and formally published in 2005. These extensions replaced earlier proposals as a definitive way forward for securing DNS. Though it’s been almost a decade since this publication, DNSSEC is still far from mainstream adoption.</p><p>There are several catalysts pushing DNSSEC adoption, one of which is Dan Kaminsky’s <a href="https://kb.isc.org/article/AA-00924/0/CVE-2008-1447%3A-DNS-Cache-Poisoning-Issue-Kaminsky-bug.html">cache poisoning attack from 2008</a>. This attack highlighted the significant trust issues in traditional DNS, and how DNSSEC is well positioned to solve them. However, even after a significant amount of work, adoption is lagging — there are several factors holding DNSSEC adoption back. Among them are network operators that prefer stability to complexity (for good reason). Another difficulty with DNSSEC adoption is that there is no universal consensus around whether DNSSEC is the right tool to secure the DNS.</p><p>In this post, we will explore the inherent insecurity of DNS and how DNSSEC can be used to improve trust in this fundamental part of the Internet.</p>
    <div>
      <h4>DNS: A Distributed Key Value Store Before It Was Cool</h4>
      <a href="#dns-a-distributed-key-value-store-before-it-was-cool">
        
      </a>
    </div>
    <p>The concept of DNS is simple: it’s a global database of information about domain names. It’s the Internet’s phone book.</p><p>If a client wants to connect to an address such as ‘<a href="http://www.example.com’">www.example.com’</a> and needs to know which IP address corresponds to this address, they can ask DNS. Typically, all DNS messages are sent over <a href="http://en.wikipedia.org/wiki/User_Datagram_Protocol">UDP</a>.</p><p>There are several types of Resource Records (RR) that DNS can answer questions about. One of the most important RRs is called an “A record”, which stores the IPv4 address associated with the domain. To find out the value of any record for a given domain, you can ask a DNS resolver. For example, it you wanted the IP address for <a href="http://www.example.com">www.example.com</a>, the question you could ask is:</p><p><i>“What is the A record for the domain </i><a href="http://www.example.com?”"><i>www.example.com?”</i></a></p><p>The raw DNS request is a UDP packet as shown in Listing 1. This request contains an ID (0x27e1), some flags to indicate that it is a request, and the question itself.</p><p>The response for our raw DNS request is shown in Listing 2. This response comes with the matching ID (0x27e1), a copy of the original request echoed back, some flags (1/0/0), and an answer to the question: 93.184.216.119. It also contains a validity period, called time to live (TTL), to indicate how long the record is valid.</p><p>Raw DNS request:</p>
            <pre><code>0x0000: 5ad4 0100 0001 0000 0000 0000 0765 7861 ‘............exa
0x0010: 6d70 6c65 0363 6f6d 0000 0100 01        mple.com.....</code></pre>
            <p>Wireshark’s interpretation:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4GURnhrRCCEuvIerGPboU6/816c892cf68e11f43b75ac0bbb3d9510/image06.jpg" />
            
            </figure><p>Raw DNS Response:</p>
            <pre><code>0x0000: 51d4 8180 0001 0001 0000 0000 0765 7861 ‘............exa
0x0010: 6d70 6c65 0363 6f6d 0000 0100 01c0 0c00 mple.com........
0x0020: 0100 0100 0031 f500 045d b8d8 77 .....1...]..w</code></pre>
            <p>Wireshark’s interpretation:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3AbDNKjACFw1vhVp8Jd8tR/c83ced528e19c0892a0cc1f4663fe24e/image04.jpg" />
            
            </figure>
    <div>
      <h3>How DNS works</h3>
      <a href="#how-dns-works">
        
      </a>
    </div>
    <p>DNS is a distributed key/value database. The values returned can in theory be anything but in practice need to fit into well known types, such as addresses, mail exchanges, sever lists, free format text records etc. The keys consist of a name, type, and class. The name space is hierarchical (see below) and DNS information is “published” by Authoritative Servers. DNS Resolvers will locate the information requested by asking the appropriate authoritative servers by following the naming hierarchy from one Authoritative DNS server to the next one. The ISP typically provides a Recursive Resolver that will perform resolution on behalf of customers. You can also use a public resolver like the ones provided by <a href="https://www.cloudflare.com/cloudflare-vs-google-dns/">Google</a> (8.8.8.8, 8.8.4.4) or OpenDNS (208.67.222.222, 208.67.220.220).</p><p>Web-enabled applications like browsers use something called a Stub Resolver to interact with the DNS. Once the application or browser has obtained the IP address of the website, they can access it using the HTTP or HTTPS protocols.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3CG63VKliGOBNhLXn5iXKu/0f45bac0d4efcf308ba15e44de9504ab/image02.jpg" />
            
            </figure>
    <div>
      <h4>The DNS Namespace</h4>
      <a href="#the-dns-namespace">
        
      </a>
    </div>
    <p>The hierarchy of DNS namespace is well defined: DNS names consist of labels that are separated by dots. Thus “<a href="http://www.example.com.”">www.example.com.”</a> consists of 4 labels “www” (leaf) “example” (domain) “com” (<a href="https://www.cloudflare.com/learning/dns/top-level-domain/">TLD</a>) and “.” i.e. the root. Resolvers search by starting at the longest match of the labels, i.e., if it only knows about the root then, it starts the search there. If they know about .com they start there.</p><p>There are <a href="http://www.iana.org/domains/root/servers">thirteen</a> rootservers maintained by 12 different organizations. The root zone is maintained by IANA, which is a part of ICANN, and is published by Verisign which operates two of the root servers. The contents of the root zone is a list of the authoritative servers for each TLD, but not much else. Thus, if a root DNS server receives a query for “<a href="http://www.example.com”">www.example.com”</a> it will answer with what is called a referral to “.com” resolvers. The answer from the root server contains a set of records called NS (Name Server). These records list the nameservers which should have more information about the requested zone, i.e., the “.com” servers.</p><p>Each one of the TLDs authoritative nameservers knows about the authoritative nameservers for the domains under them (example.com, cloudflare.com, google.com, etc.). Following this downward, you will eventually get to the server that can answer queries about records for the name you are looking for.</p><p>DNS is the largest distributed delegated database in the world. Delegated means that each name can have a different authority that can maintain the information, and any changes are reflected in the DNS. For this reason, it’s important that resolvers don’t keep what they learn forever. Similarly, it’s important that busy resolvers can reuse the information they have fetched. This reuse of information is accomplished by placing a TTL on every DNS record which tells resolvers how long they can reuse the records to answer questions. When a resolver returns a cached value, it adjusts the TTL downward reflecting how long the data has resided in its cache.</p>
    <div>
      <h4>On-path attacker attacks on DNS</h4>
      <a href="#on-path-attacker-attacks-on-dns">
        
      </a>
    </div>
    <p>In March of 2014, the government of Turkey decided to <a href="http://www.theguardian.com/world/2014/mar/21/turkey-blocks-twitter-prime-minister">block Twitter</a> inside the country. They did so at the DNS level by instructing Turkish ISP’s to return specified records for twitter.com and send them to a Turkish government web site. People quickly realized what was happening, and, by using foreign recursive resolvers, they could bypass the restrictions and get continue to get Twitter’s true address. This inspired citizens to spray paint Google’s public DNS server address on buildings and public spaces.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2hopT72do5czRnY9Z9ofEy/3151895b36ce307268fce78e9127c6a1/image05.jpg" />
            
            </figure><p>This incident in Turkey illustrates the first major security problem with DNS: there is no authentication. Any party with a privileged network position (e.g. they control a router that sits between two sides of a connection) is able to modify DNS records to point to wherever they choose. This is the so-called “on-path attacker attack”, and DNS is vulnerable.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/53udd7AkzbcE2s62nABtIl/aa3fc9315cbcd7a6a8a68f487c51bd0a/image01.jpg" />
            
            </figure>
    <div>
      <h4>Kaminsky’s Attack</h4>
      <a href="#kaminskys-attack">
        
      </a>
    </div>
    <p>In 2008, Dan Kaminsky revealed <a href="http://spectrum.ieee.org/images/oct08/images/phish03.pdf">an attack</a> on the DNS system which can trick a DNS recursive resolvers into storing incorrect DNS records. Once the nameserver has stored the incorrect response, it will happily return it to everyone who asks until the cache entry expires (usually dictated by the TTL). This is so-called “DNS poisoning” attack could allow arbitrary attacker to trick DNS, and redirect web browsers (and other applications) to incorrect servers allowing them to hijack traffic.</p><p>DNS poisoning attacks are simple to describe, but difficult to pull off. Take the sequence of events:</p><ul><li><p>Client queries recursive resolver</p></li><li><p>Recursive resolver queries authoritative server</p></li><li><p>Authoritative server replies to recursive resolver</p></li><li><p>Recursive resolver replies with an answer to the client</p></li></ul><p>Kaminsky’s attack relies on the fact that UDP is a stateless protocol and that source IP addresses are blindly trusted. Each of the requests and responses described here is a single UDP request containing to and from IP addresses. Any host can in theory forge the source address on UDP message making look like it came from the expected source. Any attacker sitting on a network that does not filter outbound packets can construct a UDP message that says it’s from the authoritative server and send to the recursive resolver.</p><p>Of the requests above, message number 3 is a good target to attack. This is because the recursive resolver will accept the first answer to its question that matches its query. So, if you can answer it faster than the authoritative server, the recursive resolver will accept your answer as the truth. This is the core of the attack:</p><ul><li><p>Pick a domain whose DNS entries you want to hijack.</p></li><li><p>Send a request to the recursive resolver for the record you want to poison.</p></li><li><p>Send many fake UDP responses pretending to be the authoritative server with the answer of your choosing (i.e. point the A record to an IP you control).</p></li></ul><p>If one of your malicious—acceptable—responses arrives ahead of the real response, the recursive resolver will believe your record and cache it for as long as the TTL is set. Then any other clients asking for the poisoned record will be directed to your malicious servers.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6QX9I12HqudIEAUiZ6Cs3x/f03567659e8f8955504454cef6be5f13/image03.jpg" />
            
            </figure><p>There are some complications that make this harder than it sounds in practice. For example, you have to guess:</p><ul><li><p>The request ID—a 16-bit number</p></li><li><p>The authoritative server address that the query was sent to</p></li><li><p>The recursive resolver address used to send the query</p></li><li><p>The UDP port used to send the query to the authoritative server</p></li></ul><p>When Kaminsky’s attack was originally proposed, many of these values were easily guessable or discoverable, thus making DNS poisoning a real threat. Since then, request ID, port randomization, and source address rotation have made this specific attack more difficult to pull off—but not impossible. DNS cache poisoning is a real issue, and has been reported in the wild as recently as <a href="https://www.virusbtn.com/blog/2014/09_12.xml">September 2014</a>.</p><p>The fundamental issue that allows this kind of attack to happen is that there is no way for the resolver to validate that the records are what they are supposed to be. Note: if the attacker is in position to see the query traffic from the recursive resolver, it has all the information it needs to forge answers (see <a href="http://www.wired.com/2014/03/quantum/">http://www.wired.com/2014/03/quantum/</a>).</p>
    <div>
      <h4>DNSSEC</h4>
      <a href="#dnssec">
        
      </a>
    </div>
    <p>The security extensions to DNS add protection for DNS records, and allow the resolvers and applications to authenticate the data received. These powerful additions will mean that all answers from DNS can be trusted. Earlier we described how DNS resolution starts at the root nameserver, and works down (e.g. for “<a href="http://www.example.com”">www.example.com”</a> it starts at the root server, then “com”, then “example.com”). This is the same way that trust is conferred via DNSSEC. The DNS root is the definitive root of trust, and a chain of trust is built to the root from any DNS entry. This is a lot like the chain of trust used to validate <a href="https://www.cloudflare.com/application-services/products/ssl/">TLS/SSL certificates</a>, except that, rather than many trusted root certificates, there is one trusted root key managed by the DNS root maintainer IANA.</p><p>The point of DNSSEC is to provide a way for DNS records to be trusted by whoever receives them. The key innovation of DNSSEC is the use of public key cryptography to ensure that DNS records are authentic. DNSSEC not only allows a DNS server to prove the authenticity of the records it returns. It also allows the assertion of “non-existence of records”.</p><p>The DNSSEC trust chain is a sequence of records that identify either a public key or a signature of a set of resource records. The root of this chain of trust is the root key which is maintained and managed by the operators of the DNS root. DNSSEC is defined by the IETF in RFCs <a href="http://tools.ietf.org/html/rfc4033">4033</a>, <a href="http://tools.ietf.org/html/rfc4034">4034</a>, and <a href="http://tools.ietf.org/html/rfc4035">4035</a>.</p><p>There are several important new record types:</p><ul><li><p>DNSKEY: a public key, used to sign a set of resource records (RRset).</p></li><li><p>DS: delegation signer, a hash of a key.</p></li><li><p>RRSIG: a signature of a RRset that share name/type/class.</p></li></ul><p>A DNSKEY record is a cryptographic public key, DNSKEYs can be classified into two roles, which can be handled by separate keys or a single key</p><ul><li><p>KSK (key signing key): used to sign DNSKEY records.</p></li><li><p>ZSK (zone signing key): used to sign all other records in the domain is authoritative for.</p></li></ul><p>For a given domain name and question, there are a set of answers. For example, if you ask for the A record for cloudflare.com, you get a set of A records as the answer:</p>
            <pre><code>cloudflare.com.            285    IN    A    198.41.212.157
cloudflare.com.            285    IN    A    198.41.213.157</code></pre>
            <p>The set of all records of a given type for a domain is called an RRset. An RRSIG (Resource Record SIGnature) is essentially a digital signature for an RRset. Each RRSIG is associated with a DNSKEY. The RRset of DNSKEYs are signed with the key signing key (KSK). All others are signed with the zone signing key (ZSK). Trust is conferred from the DNSKEY to the record though the RRSIG: if you trust a DNSKEY, then you can trust the records that are correctly signed by that key.</p><p>However, the domain’s KSK is signed by itself, making it difficult to trust. The way around this is to walk the domain up to the next/parent zone. To verify that the DNSKEY for example.com is valid, you have to ask the .com authoritative server. This is where the DS record comes into play: it acts as a bridge of trust to the parent level of the DNS.</p><p>The DS record is a hash of a DNSKEY. The .com zone stores this record for each zone that has supplied DNSSEC keying information. The DS record is part of an RRset in the zone for .com and therefore has an associated RRSIG. This time, the RRset is signed by the .com ZSK. The .com DNSKEY RRset is signed by the .com KSK.</p><p>The ultimate root of trust is the KSK DNSKEY for the DNS root. This key is universally known and published.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/220BuUdKXB1gpWKEHjffBo/eabdf58eadc38ca739ed4a39c1b11399/image00.jpg" />
            
            </figure><p>Here is the DNSKEY root KSK that was published in August 2010 and will be used until sometime in 2015 or 2016 (encoded in base64):</p>
            <pre><code>AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcC jFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJR kxoXbfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efu cp2gaDX6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA 6G3LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQd XfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhY B4N7knNnulqQxA+Uk1ihz0=</code></pre>
            <p>By following the chain of DNSKEY, DS and RRSIG records to the root, any record can be trusted.</p><p>These records are enough to prove the integrity of a resource record, but something more is needed in order to prove that a record does not exist. This is where two additional record types, NSEC and NSEC3, come into play.</p><p>If a DNS authoritative server knows there is no record for a specific request, it has a way to respond to such requests. When the name asked for does not exist, it returns a message that has return code (RCODE) NXDOMAIN. When the name exists, but the requested type does not, it returns a NODATA response, i.e., empty answer.</p><p>These non-existence answers are unauthenticated and could be forged by a third party just like any other DNS response. However, DNSSEC solves this problem by creating a record type that expresses what names exist, and what types reside at each name. This record is called NSEC. An NSEC can be signed by DNSSEC, and validated up to the root. Typically, NSEC is used to cover gaps between all the domains with records in the zone. In most cases, this effectively doubles the number of records in the zone, but allows an authoritative nameserver to reply with a signed response for any question.</p><p>The zone ietf.org. uses NSEC records. Asking for ‘trustee.ietf.org’ would give you a positive answer with an IP address and an RRSIG record. Asking for ‘tustee.ietf.org’ would give you a negative answer ‘there are no name between trustee.ietf.org and <a href="http://www.ietf.org’">www.ietf.org’</a>, with a corresponding RRSIG.For example:</p><p>Question:</p>
            <pre><code>tustee.ietf.org/A</code></pre>
            <p>Answer:</p>
            <pre><code>trustee.ietf.org.        1683        IN        NSEC        www.ietf.org. A MX AAAA RRSIG NSEC</code></pre>
            <p>This means that there are no names the zone in between trustee.ietf.org and <a href="http://www.ietf.org">www.ietf.org</a>, when sorted alphabetically, effectively proving that tustee.ietf.org does not exist.</p><p><a href="http://www.ietf.org/rfc/rfc5155.txt">RFC5155</a> defines a obufscated way to deny existence via the NSEC3 record. NSEC3 uses similar logic, but for the names are hashed. Asking for examplf.com (e comes before f) would give you ‘there are no records with hashes between A and B’, where A is the next closest hash lexicographically before the hash of examplf.com, and B is the next closest after.</p>
    <div>
      <h4>Conclusion</h4>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>This post is the first in a series of posts about how Cloudflare does DNS, and our DNS plans. In future posts, we will go into detail about some of advantages and disadvantages of DNSSEC. We will also discuss useful extensions to DNSSEC, like DANE, and how these can be used to secure websites and provide a much stronger form of trust than the certificate authority system. We will also examine how far the effort has come in the decade since the technology was standardized using adoption statistics and trends.</p><p>DNSSEC is a valuable tool for improving the trust and integrity of DNS, the backbone of the modern Internet. DNSSEC deployment is still in its infancy, less than five per cent of all zones had been signed as of mid-2014. Though it has its detractors, adoption is increasing and DNSSEC is becoming a core tool in the development of a safer and more trustworthy Internet and CloudFlare is committed to supporting it.</p> ]]></content:encoded>
            <category><![CDATA[DNSSEC]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[DNS]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">55V5KqZk94FicPZOMKMgaE</guid>
            <dc:creator>Nick Sullivan</dc:creator>
        </item>
        <item>
            <title><![CDATA[The little extra that comes with Universal SSL]]></title>
            <link>https://blog.cloudflare.com/the-little-extra-that-comes-with-universal-ssl/</link>
            <pubDate>Mon, 06 Oct 2014 21:35:38 GMT</pubDate>
            <description><![CDATA[ Last Monday we announced our SSL for Free plan users called Universal SSL. Universal SSL means that any site running on CloudFlare gets a free SSL certificate, and is automatically secured over HTTPS. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>CC BY 2.0 by <a href="https://www.flickr.com/photos/jdhancock/">JD Hancock</a></p><p>Last Monday we announced our SSL for Free plan users called <a href="/introducing-universal-ssl/">Universal SSL</a>. Universal SSL means that any site running on CloudFlare gets a <a href="https://www.cloudflare.com/application-services/products/ssl/">free SSL certificate</a>, and is automatically secured over HTTPS.</p><p>Using SSL for a web site helps make the site more secure, but there's another benefit: it can also make the site faster. That's because the <a href="http://en.wikipedia.org/wiki/SPDY">SPDY protocol</a>, created by Google to speed up the web, actually requires SSL and only web sites that support HTTPS can use SPDY.</p><p>CloudFlare has long supported <a href="/introducing-spdy/">SPDY</a>, and kept up to date with improvements in the protocol. We currently support the most recent version of SPDY: <a href="/staying-up-to-date-with-the-latest-protocols-spdy-3-1/">3.1</a>.</p><p>CloudFlare's mission to bring the tools of the Internet giants to everyone is two fold: security and performance. As part of the Universal SSL launch, we also rolled out SPDY for everyone. Many of the web's largest sites use SPDY; now all sites that use CloudFlare are in the same league.</p><p>If your site is on CloudFlare, and you use a modern browser that supports SPDY, you'll find that the HTTPS version of your site is now served over SPDY. SPDY allows the browser to query for multiple objects in one request, and for the objects to be sent down the wire as they are ready to prevent hold-ups—that can be a big performance win.</p><p>Our goal is a faster, safer, more secure Internet. Universal SSL and SPDY for everyone are two big steps in that direction.</p> ]]></content:encoded>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Google]]></category>
            <category><![CDATA[spdy]]></category>
            <category><![CDATA[HTTPS]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">4PvbgsCFQYYxbLxKwrmajz</guid>
            <dc:creator>John Graham-Cumming</dc:creator>
        </item>
        <item>
            <title><![CDATA[Universal SSL: How It Scales]]></title>
            <link>https://blog.cloudflare.com/universal-ssl-how-it-scales/</link>
            <pubDate>Wed, 01 Oct 2014 22:57:48 GMT</pubDate>
            <description><![CDATA[ On Monday, we announced Universal SSL, enabling HTTPS for all websites using CloudFlare’s Free plan. Universal SSL represents a massive increase in the number of sites we serve over HTTPS—from tens of thousands, to millions. ]]></description>
            <content:encoded><![CDATA[ <p>On Monday, <a href="/introducing-universal-ssl/">we announced Universal SSL</a>, enabling HTTPS for all websites using CloudFlare’s Free plan. Universal SSL represents a massive increase in the number of sites we serve over HTTPS—from tens of thousands, to millions. People have asked us, both in comments and in person, how our servers handle this extra load. The answer, in a nutshell, is this: we found that with the right hardware, software, and configuration, the cost of SSL on web servers can be reduced to almost nothing.</p>
    <div>
      <h3>Modern Hardware</h3>
      <a href="#modern-hardware">
        
      </a>
    </div>
    <p>CloudFlare’s entire infrastructure is built on <a href="/a-tour-inside-cloudflares-latest-generation-servers/">modern commodity hardware</a>. Specifically, our web servers are running on CPUs manufactured by Intel that were designed with cryptography in mind.</p><p>All Intel CPUs based on the <a href="http://en.wikipedia.org/wiki/Westmere_(microarchitecture)">Westmere</a> CPU microarchitecture (introduced in 2010) and later have specialized cryptographic instructions. Important for CloudFlare’s Universal SSL rollout are the <a href="http://en.wikipedia.org/wiki/AES_instruction_set">AES-NI</a> instructions which speed up the <a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">Advanced Encryption Standard (AES)</a> algorithm. There’s also a set of instructions called <a href="http://en.wikipedia.org/wiki/CLMUL_instruction_set">Carry-less Multiplication (CLMUL)</a> that computes mathematical operations on <a href="http://en.wikipedia.org/wiki/Finite_field">binary finite fields</a>. CLMUL can be used to speed up AES in Galois Counter-mode (GCM): our preferred mode of encryption due to its resistance against recent attacks like <a href="https://community.qualys.com/blogs/securitylabs/2013/09/10/is-beast-still-a-threat">BEAST</a>.</p><p>As we described in our <a href="/keyless-ssl-the-nitty-gritty-technical-details/">primer on TLS</a>, the server picks which algorithm is used in a connection based on the cipher suites supported by the client. In our configuration (<a href="https://github.com/cloudflare/sslconfig">available on GitHub</a>), we prioritize AES-based ciphers, and prefer AES-GCM to AES-CBC.</p><p>The vast majority of the HTTPS data served by CloudFlare’s servers is encrypted with AES. Here’s the breakdown of ciphers we use on an average day:</p>
            <pre><code>AES-CBC: 	62.8013%
AES-GCM: 	36.2813%
3DES: 		0.9170%
RC4: 		0.0003%</code></pre>
            <p>AES is practically free of performance cost on our modern processors, and 99% of data enciphered by CloudFlare’s servers uses AES so the cost is trivially small. Note that out of these ciphers, RC4 is the second fastest; however, we de-prioritized it <a href="/killing-rc4-the-long-goodbye/">for security reasons</a>, though we couldn’t remove it completely due to <a href="/the-web-is-world-wide-or-who-still-needs-rc4/">some odd client configurations</a>.</p>
    <div>
      <h3>Modern Crypto</h3>
      <a href="#modern-crypto">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3ayQvSYvSxbJLTi6YVdMiL/54acd30ee53461b30dbec40799ce8acc/Screen-Shot-2014-10-01-at-3-57-56-PM-2.jpg" />
            
            </figure><p>Image © Trevor Perrin 2014</p><p>There are two potentially costly portions of a TLS connection: the data encipherment and the handshake. With AES-NI and CLMUL data encipherment is essentially free; however, there are two expensive steps in the handshake. One is the the private key operation, and the other is the key establishment (this is described in our <a href="/keyless-ssl-the-nitty-gritty-technical-details/">Keyless SSL post</a>).</p><p>With Universal SSL, both the private key operation and the key establishment use <a href="/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/">elliptic curve cryptography</a>. The private key operation uses the <a href="/ecdsa-the-digital-signature-algorithm-of-a-better-internet/">Elliptic Curve Digital Signature Algorithm (ECDSA)</a>, and the key establishment uses <a href="/cloudflare-prism-secure-ciphers/">Ephemeral Elliptic Curve Diffie-Hellman (ECDHE)</a>.</p><p>Elliptic curve cryptography allows you to use smaller keys than traditional RSA. For example, a 256-bit elliptic curve key is <a href="http://www.keylength.com/en/compare/">equivalent in strength</a> to a 3072-bit RSA key. Smaller keys allow elliptic curve cryptography to be around 5-10x faster than RSA in general cases. For Universal SSL, we chose the elliptic curve <a href="http://en.wikipedia.org/wiki/Elliptic_curve_cryptography#NIST-recommended_elliptic_curves">P-256</a> with an optimized assembly code implementation by Shay Gueron and Vlad Krasnov (currently at Intel). This implementation was merged into OpenSSL <a href="http://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=3842a64d36bc47ef7cc1370147fd0e5b60a27a2b;hp=8aed2a7548362e88e84a7feb795a3a97e8395008">this week</a>, and provides additional speedup of 2-3x for both ECDHE and ECDSA. Choosing this elliptic curve reduced the computational burden of the TLS handshake on our servers by an order of magnitude.</p><p>Up until the launch of Universal SSL this week, all but a hundred sites on the Internet used RSA-based certificates. Universal SSL is the first large-scale deployment of ECDSA keys for TLS. This is the first major step towards bringing the advantages of elliptic curves onto the web.</p>
    <div>
      <h3>Session Sharing</h3>
      <a href="#session-sharing">
        
      </a>
    </div>
    <p>Even with fast elliptic curve cryptography, the asymmetric steps (key establishment and digital signature) are still the most expensive part of a TLS handshake. For returning visitors of a site we have a shortcut that eliminates the need for our servers to perform these expensive operations. The shortcut is called session resumption and it's <a href="https://tools.ietf.org/html/rfc5077">built into the TLS specification</a>.</p><p>In our post about <a href="/keyless-ssl-the-nitty-gritty-technical-details/">Keyless SSL</a>, we mentioned new work we did to improve session resumption. Resuming a TLS connection is not only faster in terms of latency—there is one less round-trip to the server—but it’s also more lightweight because the server can skip the expensive asymmetric cryptographic operations.</p><p>The TLS protocol has two ways to resume a session: session tickets and session IDs. In session ID resumption, the server stores the session information for reuse later. For session tickets, the session information is encrypted by a key known only by the server and sent to the client in the handshake in a “session ticket”. When the client wants to resume a session, it can send the session ticket to the server which can decrypt it and resume the session. By storing the connection information in a way that it can be reused later, the expensive parts of the handshake are not necessary.</p>
            <figure>
            <a href="http://staging.blog.mrk.cfdata.org/content/images/2014/Sep/session_resumption_with_session_ticket.jpg">
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/53uz7327RW3oJxRIyI7fi/18c27e58c26e577a2d6b11788d9679a8/session_resumption_with_session_ticket.jpg" />
            </a>
            </figure>
            <figure>
            <a href="http://staging.blog.mrk.cfdata.org/content/images/2014/Sep/session_resumption_with_session_id.jpg">
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1t5PpxBOHyEB7u7xHsxOLb/328f51c12005622ec485536b12730828/session_resumption_with_session_id.jpg" />
            </a>
            </figure><p>The work done by Zi Lin and Kyle Isom for <a href="/keyless-ssl-the-nitty-gritty-technical-details/">Keyless SSL</a> to share sessions and session tickets across machines allows us to resume connections even if they were made to a different CloudFlare server. For SSL session ticket based resumption (used in Chrome and Firefox), sessions can be resumed worldwide; for session ID based resumption (all other browsers), sessions can be resumed from any machine in the same data center.</p>
    <div>
      <h3>Lazy Loading</h3>
      <a href="#lazy-loading">
        
      </a>
    </div>
    <p>CloudFlare can serve any customer’s site, from any CloudFlare server, anywhere in the world—including sites over TLS. This flexibility allows us to efficiently handle attacks, and evenly share the load across our data centers.</p><p>Web servers like nginx are designed to use static configurations. If something about a site changes (like the certificate), the server configuration needs to be reloaded. Reloading can cause the server to read data from disk and re-initialize internal state, causing a strain on server resources. Reloading often is necessary when you have millions of customers who are able to change their certificates at any time. At CloudFlare’s scale, this can result in a performance bottleneck.</p><p>Lazy loading of certificates helps relieve that bottleneck. Using custom modifications to nginx by CloudFlare engineer Piotr Sikora, we are able to dynamically load certificates into memory only when they’re needed. Now, if one site changes their certificate, the server does not have to reload every certificate. This change allows our servers to scale up to handle millions of HTTPS sites.</p>
    <div>
      <h3>Looking ahead</h3>
      <a href="#looking-ahead">
        
      </a>
    </div>
    <p>Through a combination of modern hardware, modern algorithms, lazy loading, and session resumption techniques, we were able to reduce the CPU usage of Universal SSL to almost nothing.</p><p>Hopefully, our experience helps debunk one of the myths about SSL by showing that it can be done on a massive scale with minimal extra burden on web servers.</p> ]]></content:encoded>
            <category><![CDATA[TLS]]></category>
            <category><![CDATA[NGINX]]></category>
            <category><![CDATA[HTTPS]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Cryptography]]></category>
            <guid isPermaLink="false">69czBN2WdcwjAROy19APze</guid>
            <dc:creator>Nick Sullivan</dc:creator>
        </item>
        <item>
            <title><![CDATA[Universal SSL: Be just a bit more patient]]></title>
            <link>https://blog.cloudflare.com/universal-ssl-be-just-a-bit-more-patient/</link>
            <pubDate>Tue, 30 Sep 2014 05:27:15 GMT</pubDate>
            <description><![CDATA[ It turns out it takes a while to deploy SSL certificates for 2 million websites. :-) Even longer when you get a flood of new sign ups. While we'd hoped to have the deployment complete within 24 hours of the announcement, it now looks like it's going to take a bit longer. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>It turns out it takes a while to deploy <a href="https://www.cloudflare.com/application-services/products/ssl/">SSL certificates</a> for 2 million websites. :-) Even longer when you get a flood of new sign ups. While we'd hoped to have the deployment complete within 24 hours of the announcement, it now looks like it's going to take a bit longer. We now expect that the full deployment will be complete about 48 hours from now (0700 UTC). Beyond that, nothing about the plan for Universal SSL has changed and hundreds of thousands of sites are already active.</p>
    <div>
      <h3>Errors you may see</h3>
      <a href="#errors-you-may-see">
        
      </a>
    </div>
    <p>In order to get through the highest priority sites first, we've prioritized provisioning the sites with the most traffic.</p><p>While you wait for your site to get provisioned, you may see a certificate mismatch error if you try and visit it over HTTPS. (Rest assured, there are no errors if you visit over HTTP.) The errors over HTTPS are expected and normal during the provisioning process. Examples of what these error looks like in various browsers (Chrome, Safari, Firefox, and Internet Explorer) are below:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4oKlDZ5PimFOISl2hI9I9t/68e61b161545879b0f66d537918ebde2/chrome_alert.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6xruFqQmPPFKvEifEBc0BE/1ba3da15e947488dfc76bd4afd09c937/safari_alert.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1wjK736MUKObVMGFbOjeod/2c9063d9d27f5947699d931efd5d2657/firefox_alert.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1hQ2kfC5c2bVrddOdAMEWF/154c60852fac903ccf5bbb34af245f01/ie_error_page.png" />
            
            </figure>
    <div>
      <h3>Tracking our progress</h3>
      <a href="#tracking-our-progress">
        
      </a>
    </div>
    <p>To give you a sense of our progress provisioning Universal SSL for your sites, we've updated the alert that you see when you login to CloudFlare to show what sites have been enabled and what sites are still pending. It now looks like this:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4YC8jySPIsj6AFAnLhDiSh/f1a901e7aa2cbdc67d124501de2e549d/free_ssl_alert.png" />
            
            </figure><p>When the Universal SSL provisioning process is complete, we will also email all our customers. Again, at the current rate, we expect to be finished by Thursday, October 2 at 0700 UTC.</p>
    <div>
      <h3>When it's working…</h3>
      <a href="#when-its-working">
        
      </a>
    </div>
    <p>We apologize for the delay. We're getting new sites provisioned as quickly as we can. If you want to see what it looks like when it's working correctly, check out one of the following:</p><ul><li><p><a href="https://ciaranmcnulty.com/">https://ciaranmcnulty.com/</a></p></li><li><p><a href="https://samsclass.info/">https://samsclass.info/</a></p></li></ul><p>Note that on the latter of these examples you may see a mixed content warning. We expect site owners will clean these issues up by using protocol-relative URLs now that they have HTTPs support. Going forward, we also have some ideas about how we can help automatically resolve mixed content issues.</p><p>Thank you for your patience.</p> ]]></content:encoded>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">4Q1kaU6aRXCfKDPidB4O0F</guid>
            <dc:creator>Matthew Prince</dc:creator>
        </item>
        <item>
            <title><![CDATA[Origin Server Connection Security with Universal SSL]]></title>
            <link>https://blog.cloudflare.com/origin-server-connection-security-with-universal-ssl/</link>
            <pubDate>Mon, 29 Sep 2014 23:14:00 GMT</pubDate>
            <description><![CDATA[ Earlier today, CloudFlare enabled Universal SSL: HTTPS support for all sites by default. Universal SSL provides state-of-the-art encryption between browsers and CloudFlare’s edge servers keeping web traffic private and secure from tampering. ]]></description>
            <content:encoded><![CDATA[ <p>Earlier today, CloudFlare enabled Universal SSL: HTTPS support for all sites by default. Universal SSL provides state-of-the-art encryption between browsers and CloudFlare’s edge servers keeping web traffic private and secure from tampering.</p><p>CloudFlare’s Flexible SSL mode is the default for CloudFlare sites on the Free plan. Flexible SSL mode means that traffic from browsers to CloudFlare will be encrypted, but traffic from CloudFlare to a site's origin server will not be. To take advantage of our <a href="https://www.cloudflare.com/ssl">Full and Strict SSL</a> mode—which encrypts the connection between CloudFlare and the origin server—it’s necessary to install a certificate on the origin server.</p><p>We made Universal SSL free so that everyone can use modern, strong encryption tools to protect their web traffic. More encrypted traffic helps build a safer, better Internet. In keeping with CloudFlare’s goal to help build a better Internet, we have some tips on how to upgrade your site from Flexible SSL to Full or Strict SSL.</p>
    <div>
      <h3>Option 1: Full SSL: create a self-signed certificate</h3>
      <a href="#option-1-full-ssl-create-a-self-signed-certificate">
        
      </a>
    </div>
    <p>Dealing with Certificate Authorities (CAs) can be frustrating, and the process of obtaining a certificate can be time consuming. In the meantime, you can get started by installing a self-signed certificate on your origin server. This allows CloudFlare to encrypt the communication with the origin, protecting the communication against passive surveillance, but not against <a href="/introducing-strict-ssl-protecting-against-a-man-in-the-middle-attack-on-origin-traffic/">active attackers</a>.</p><p>Our <a href="https://github.com/cloudflare/cfssl/wiki/Creating-a-new-CSR">handy CSR guide</a> for <a href="https://github.com/cloudflare/cfssl">CFSSL</a> describes how to generate a self-signed certificate. Using <a href="http://msol.io/blog/tech/2013/10/06/create-a-self-signed-ecc-certificate/">OpenSSL to create it</a> is another option.</p><p>Once you have created a self-signed certificate and private key, you can install them on your origin server. Digicert has a guide for <a href="https://www.digicert.com/ssl-certificate-installation.htm">installing a certificate</a> that covers the most popular server software.</p><p>Keep in mind that a self-signed certificate is not signed by a trusted CA. This means that you can change your SSL setting from Flexible SSL to Full, but not Full (strict). Full SSL won’t be able to provide authentication, but it will make sure the connection to the origin is encrypted and protected from passive snoopers.</p>
    <div>
      <h3>Option 2: Strict SSL: get a certificate from trusted CA</h3>
      <a href="#option-2-strict-ssl-get-a-certificate-from-trusted-ca">
        
      </a>
    </div>
    <p>Most CAs offer low-cost or even free certificates. A popular CA that offers <a href="https://www.cloudflare.com/application-services/products/ssl/">free SSL certificates</a> is <a href="https://www.startssl.com/">StartSSL</a>. Buying and installing a trusted certificate on your origin server is currently the simplest way to enable Strict SSL on your site.</p><p>To enable TLS on your server, you need both a certificate and a corresponding private key. The first step in obtaining a certificate from a CA is creating a Certificate Signing Request (CSR). A CSR contains your public key and a proof that you have the associated private key. The CA will verify it and give you back a certificate that you install on your web server. We <a href="https://github.com/cloudflare/cfssl/wiki/Creating-a-new-CSR">put together a guide</a> to creating a private key and CSR with CloudFlare’s CFSSL tool that you can use, or alternatively, there’s always <a href="http://www.rackspace.com/knowledge_center/article/generate-a-csr-with-openssl">OpenSSL</a>.</p><p>Once you have a certificate installed on your origin server, you can change your SSL setting from Flexible to Full (strict) and have the added benefit of an authenticated and encrypted connection to your origin server.</p>
    <div>
      <h3>Option 3: (sneak preview) The CloudFlare Origin CA/Certificate Pinning</h3>
      <a href="#option-3-sneak-preview-the-cloudflare-origin-ca-certificate-pinning">
        
      </a>
    </div>
    <p>Soon you will be able to send your CSR to CloudFlare to get a certificate instantaneously, speeding up the certificate acquisition process. This process will be like that of a regular CA, but much faster. These certificates aren't yet trusted by browsers, but <i>will</i> be trusted by CloudFlare, allowing the back end connection to be both encrypted and authenticated. This also protects your site if one of the publicly trusted certificate authorities is compromised <a href="http://threatpost.com/final-report-diginotar-hack-shows-total-compromise-ca-servers-103112/77170">by attackers</a> and used to issue <a href="http://www.zdnet.com/indian-government-agency-issues-fake-google-certificates-7000031396/">illegitimate certificates</a>.</p><p>We’re also investigating the possibility of adding a feature called <a href="https://www.google.com/webhp?sourceid=chrome-instant&amp;ion=1&amp;espv=2&amp;ie=UTF-8#safe=active&amp;q=certificate+pinning">Certificate Pinning</a>. Certificate Pinning would allow you to tell CloudFlare exactly which certificate to trust for your origin. This would allow customers to use hosting services that don’t allow custom certificates to have the benefit of a fully encrypted tunnel, or to simply use a self-signed certificate and get the benefit of both authentication and encryption.</p> ]]></content:encoded>
            <category><![CDATA[HTTPS]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[Encryption]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[CFSSL]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">3gC9ZZvYX0en9ddjBpvtRS</guid>
            <dc:creator>Nick Sullivan</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Universal SSL]]></title>
            <link>https://blog.cloudflare.com/introducing-universal-ssl/</link>
            <pubDate>Mon, 29 Sep 2014 09:56:21 GMT</pubDate>
            <description><![CDATA[ The team at CloudFlare is excited to announce the release of Universal SSL™. Beginning today, we will support SSL connections to every CloudFlare customer, including the 2 million sites that have signed up for the free version of our service. ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3E785dpi05PQSFKAZkuMDg/fb3b97cdcfb56e3fb4df1983a26e3732/cloudflare-illustration-universal-ssl--1-.png" />
            
            </figure><p>The team at CloudFlare is excited to announce the release of Universal SSL™. Beginning today, we will support SSL connections to every CloudFlare customer, including the 2 million sites that have signed up for the free version of our service.</p><p>This morning we began rolling out the Universal SSL across all our current customers. We expect this process to be complete for all current customers before the end of the day. Yesterday, there were about 2 million sites active on the Internet that supported encrypted connections. By the end of the day today, we'll have doubled that.</p><p>For new customers who sign up for <a href="https://www.cloudflare.com/plans/free/">CloudFlare's free plan</a>, after we get through provisioning existing customers, it will take up to 24 hours to activate Universal SSL. As always, SSL for <a href="https://www.cloudflare.com/plans/">paid plans</a> will be provisioned instantly upon signup.</p>
    <div>
      <h3>How does it work?</h3>
      <a href="#how-does-it-work">
        
      </a>
    </div>
    <p>For all customers, we will now automatically provision a <a href="https://www.cloudflare.com/application-services/products/ssl/">SSL certificate</a> on CloudFlare's network that will accept HTTPS connections for a customer's domain and subdomains. Those certificates include an entry for the root domain (e.g., example.com) as well as a wildcard entry for all first-level subdomains (e.g., <a href="http://www.example.com">www.example.com</a>, blog.example.com, etc.).</p><p>For a site that did not have SSL before, we will default to our <a href="https://support.cloudflare.com/hc/en-us/articles/200170416-What-do-the-SSL-options-Off-Flexible-SSL-Full-SSL-Full-SSL-Strict-mean-">Flexible SSL mode</a>, which means traffic from browsers to CloudFlare will be encrypted, but traffic from CloudFlare to a site's origin server will not. We strongly recommend site owners install a certificate on their web servers so we can encrypt traffic to the origin. Later today we'll be publishing a blog with instructions on how to do that at no cost. Once you've installed a certificate on your web server, you can enable the <a href="https://support.cloudflare.com/hc/en-us/articles/200170416-What-do-the-SSL-options-Off-Flexible-SSL-Full-SSL-Full-SSL-Strict-mean-">Full or Strict SSL modes</a> which encrypt origin traffic and provide a higher level of security.</p>
    <div>
      <h3>Challenges</h3>
      <a href="#challenges">
        
      </a>
    </div>
    <p>CloudFlare operates at significant scale and we're growing very quickly. To make Universal SSL work at our scale we needed to ensure it wouldn't overwhelm our resources. We had two primary concerns:</p><ol><li><p>CPU load</p></li><li><p>IPv4 exhaustion</p></li></ol><p>Terminating <a href="https://www.cloudflare.com/learning/ssl/what-is-https/">HTTPS connections</a> requires more CPU load than terminating HTTP. The additional load varies depending on the particular cipher suite used. For instance, the cutting-edge cipher suite <a href="https://www.cloudflare.com/learning/dns/dnssec/ecdsa-and-dnssec/">ECDSA</a> imposes significantly less load on our systems as compared with a more traditional cipher suite based on RSA. As it happens, ECDSA also provides a number of performance and security benefits over older cipher suites. We've <a href="/ecdsa-the-digital-signature-algorithm-of-a-better-internet/">written in the past about the benefits of ECDSA</a> including the fact that it supports Perfect Forward Secrecy and faster SSL termination (and therefore faster page load times).</p><p>IPv4 termination is the other challenge of Universal SSL. The original implementation of SSL encrypted the host header. That meant you were limited to one certificate per <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-my-ip-address/">IP address</a>. Given that CloudFlare controls a finite number of IP addresses, it would be impossible for us to dedicate a unique IP for every one of our millions of customers.</p>
    <div>
      <h3>Solution</h3>
      <a href="#solution">
        
      </a>
    </div>
    <p>These challenges required that, for free customers, we limit Universal SSL support to modern browsers. Modern browsers include support for ECDSA, where many legacy browsers do not. Modern browsers also support an extension to the SSL protocol called <a href="http://en.wikipedia.org/wiki/Server_Name_Indication">Server Name Indication (SNI)</a>. SNI sends the web site name (the equivalent of the host header) unencrypted, which allows us to return different certificates on an IP address depending on what customer's site is requested. This allows us to serve multiple customers' sites from the same IP.</p><p>Generally, if you're running a browser that is less than 6 years old, your browser is modern and Universal SSL on CloudFlare's free plans will work. The two biggest problem children legacy browsers are:</p><ol><li><p>Internet Explorer on Windows XP (or older)</p></li><li><p>Android pre-Ice Cream Sandwich</p></li></ol><p>We've been studying browser traffic for the last year in order to determine what percentage of requests come from browsers that qualify as modern. The answer varies widely depending on the region. Globally, more than 80% of requests come from modern browsers, and that percentage is growing quickly.</p><p>A recent test showed the percentage of requests in countries around the world that come from modern browsers. Iran is the worst region in the world with only 52.01% of requests coming from modern browsers. Antarctica is the best region in the world with 99.44% of requests coming from modern browsers. You can mouse over different regions to see the percentage of requests that come from modern browsers.</p><p>While Universal SSL on our free service requires a modern browser, CloudFlare's paid plans have always and will always support both modern and legacy browsers. In the coming months, because of the benefits of ECDSA certificates, we plan on offering paid users the option to return ECDSA certificates if we detect a modern browser, while reverting to RSA certificate if we detect a legacy browser.</p><p>If SSL is a must-have for you, we still recommend using a paid <a href="https://www.cloudflare.com/plans">CloudFlare plan</a> (which start as inexpensively as $20/month). If SSL is a nice-to-have, support on the free plan is likely sufficient to serve the vast majority visitors from most regions around the world. Note finally that Universal SSL does not disable your ability to accept unencrypted traffic. HTTP will continue to work as it always has before. You can, however, now use CloudFlare's Page Rules to force all traffic to HTTPS even if you're a free customer. (PS - Going forward, also we plan to support the ability to add HSTS headers.)</p>
    <div>
      <h3>Other benefits</h3>
      <a href="#other-benefits">
        
      </a>
    </div>
    <p>One additional benefit of Universal SSL is it allows us to broadly support of the SPDY protocol which requires an encrypted connection. SPDY improves web performance in a number of ways we've <a href="/what-makes-spdy-speedy/">written about before</a>. All CloudFlare customers will, by the end of the day today, also have SPDY enabled by default — massively increasing the size of the SPDY universe.</p><p>We also have plans to expand the universe of supported browsers slightly by taking advantage of connections that arrive over IPv6 for browsers that don't support SNI. About 16% of unique IP addresses that connect to CloudFlare do so via IPv6 (note: that calculation takes only the first 8 bytes as unique in any IPv6 address connecting to our network). Since IPv6 addresses are virtually infinite, we don't have the same limitations as we do with IPv4 and can therefore return a unique certificate for every IPv6 address.</p><p>Our bigger hope, however, is that Universal SSL will be yet another reason, along with <a href="http://googleonlinesecurity.blogspot.com/2014/09/gradually-sunsetting-sha-1.html">Google and Firefox deprecating SHA-1-signed certs</a> and Microsoft ceasing support for Windows XP, to encourage people to upgrade to a modern browser running on a modern OS. Sometimes progress requires sacrificing some backward compatibility. The good news here is that none of CloudFlare's current free customers supported any version of SSL previously, so the encrypted web tomorrow is only better and no worse.</p>
    <div>
      <h3>Encouraging Modern Browser Use</h3>
      <a href="#encouraging-modern-browser-use">
        
      </a>
    </div>
    <p>To that end, CloudFlare customers can help encourage the remaining users of old browsers to upgrade using a CloudFlare App. The <a href="https://www.cloudflare.com/apps/abetterbrowser">A Better Browser</a> app can be installed with one click on any web site that uses CloudFlare. It automatically detects if the visitor is using an old browser and adds a banner at the top of the page suggesting that they upgrade.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6RsdCzfWGDxKjRVhtnqnr9/85777edfb952a16bbc86161c75c8b494/example.png" />
            
            </figure>
    <div>
      <h3>The Internet is a Belief System</h3>
      <a href="#the-internet-is-a-belief-system">
        
      </a>
    </div>
    <p>Last Wednesday we had a CloudFlare Board meeting. We went over our plans for launching Universal SSL and how doing so may hurt our revenue given that SSL is one of the reasons people upgrade to a paid plan. But everyone on CloudFlare's Board was unanimous: even if it does hurt revenue in the short term, it's the right thing to do.</p><p><a href="http://www.usv.com/about#brad-burnham">Brad Burnham</a>, who is the partner at Union Square Ventures who led our last round of financing, reminded me during the meeting of the Joi Ito essay about how the <a href="http://joi.ito.com/weblog/2011/12/05/the-internet-in.html">Internet is a belief system</a>. Inherent to Joi's point is that small groups of people, working together, can create great things. That, fundamentally, is the Internet.</p><p>The team behind Netscape first introduced SSL back in February 1995, originally intended to facilitate <a href="https://www.cloudflare.com/ecommerce/">ecommerce</a> online. As the Internet grew in importance, governments, ISPs, and hackers began to intercept, throttle, and censor traffic as it flowed across the network to serve their ends. In response, SSL's importance expanded beyond ecommerce to help ensure a free and open web. As Google and the IETF work on the next generation Internet protocols like SPDY and HTTP/2, it's no wonder encryption is at their heart. And so, in order for CloudFlare to fulfill its mission of helping build a better Internet, we knew one of the most important things we could do was enable Universal SSL for all our customers — even if they don't pay us.</p><p>Having cutting-edge encryption may not seem important to a small blog, but it is critical to advancing the encrypted-by-default future of the Internet. Every byte, however seemingly mundane, that flows encrypted across the Internet makes it more difficult for those who wish to intercept, throttle, or censor the web. In other words, ensuring your personal blog is available over HTTPS makes it more likely that a human rights organization or social media service or independent journalist will be accessible around the world. Together we can do great things.</p><p>The Internet is a belief system. At CloudFlare, we're proud today that we're playing a part in helping advance that belief system. And, having proven that Universal SSL is possible at our scale, we hope many other organizations will follow in turning SSL on for all their customers and at no additional cost.</p>
    <div>
      <h3>#savetheweb</h3>
      <a href="#savetheweb">
        
      </a>
    </div>
    <p>If you are already a CloudFlare customer, we're rolling out Universal SSL throughout the day today. We expect it will be fully provisioned for most current customers within the next 24 hours. If you're a new customer, note that it will take up to 24 hours from when you <a href="https://www.cloudflare.com/sign-up">sign up</a> to provision SSL for our free service (and, again, if you're in a hurry, it's still instant for all paid plans).</p><p>One final note: if you signed up for CloudFlare through one of our hosting partners, it will be a bit longer before we can enable Universal SSL. This is due to a technical limitation on how we need to provision the Universal SSL certificates. We think we can solve the technical limitation and expect that we'll be able to support Universal SSL through partners before the end of the year. Until then, hang tight.</p>
    <div>
      <h3>Thanks</h3>
      <a href="#thanks">
        
      </a>
    </div>
    <p>This is a day the CloudFlare team has been looking forward to for the last three years. It took a ton of work. We couldn't have done it without the help of a number of great people both on our own team and at other organizations that provided assistance. Special thanks to <a href="https://www.globalsign.com/">Globalsign</a>, <a href="https://www.comodo.com/">Comodo</a>, <a href="http://unmitigatedrisk.com/">Ryan Hurst</a>, <a href="https://www.dubfire.net/">Christopher Soghoian</a> (ACLU), <a href="https://www.eff.org/about/staff/peter-eckersley">Peter Eckersley</a> (EFF), and <a href="https://www.imperialviolet.org/">Adam Langley</a> (Google).</p><p>Over the next few days, we'll be posting a series of articles about the details behind how we made Universal SSL a reality. There were a number of hard technical, business, and legal challenges we had to overcome to make today possible. The people that worked on solving them are excited to share their stories. Stay tuned.</p><p><b>Update:</b> <i>It's taking us a bit longer to provision Universal SSL for all our customers than we'd originally anticipated. We're now expecting the provisioning process to be complete on Thursday, October 2 @ 0700 UTC. We've published a </i><a href="/universal-ssl-be-just-a-bit-more-patient/"><i>new blog post</i></a><i> on how you can track our progress and what errors you may see if you try and visit your site over HTTPS before the provisioning process is complete.</i></p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[spdy]]></category>
            <category><![CDATA[HTTPS]]></category>
            <category><![CDATA[Universal SSL]]></category>
            <category><![CDATA[SSL]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">580xgry1No70EG2dqtUm22</guid>
            <dc:creator>Matthew Prince</dc:creator>
        </item>
    </channel>
</rss>