{"id":2656,"date":"2020-12-01T06:00:18","date_gmt":"2020-12-01T14:00:18","guid":{"rendered":"https:\/\/blog.mozilla.org\/security\/?p=2656"},"modified":"2020-11-25T20:27:21","modified_gmt":"2020-11-26T04:27:21","slug":"crlite-part-4-infrastructure-design","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/","title":{"rendered":"Design of the CRLite Infrastructure"},"content":{"rendered":"<p>Firefox is the only major browser that still evaluates every website it connects to whether the certificate used has been reported as revoked. Firefox users are notified of all connections involving untrustworthy certificates, regardless the popularity of the site. Inconveniently, checking certificate status sometimes slows down the connection to websites. Worse, the check reveals cleartext information about the website you\u2019re visiting to network observers.<\/p>\n<p>We\u2019re now testing a technology named CRLite which provides Firefox users with the confidence that the revocations in the Web PKI are enforced by the browser without this privacy compromise. This is a part of our goal to use encryption everywhere. (See also: <a href=\"https:\/\/blog.mozilla.org\/security\/2018\/10\/18\/encrypted-sni-comes-to-firefox-nightly\/\">Encrypted SNI<\/a> and <a href=\"https:\/\/blog.mozilla.org\/futurereleases\/2019\/07\/31\/dns-over-https-doh-update-detecting-managed-networks-and-user-choice\/\">DNS-over-HTTPS<\/a>)<\/p>\n<p>The first three posts in this series are about the newly-added CRLite technology and provide background that will be useful for following along with this post:<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.mozilla.org\/security\/2020\/01\/09\/crlite-part-1-all-web-pki-revocations-compressed\">Introducing CRLite: All of the Web PKI\u2019s revocations, compressed<\/a>,<\/li>\n<li><a href=\"https:\/\/blog.mozilla.org\/security\/2020\/01\/21\/crlite-part-3-speeding-up-secure-browsing\/\">CRLite: Speeding Up Secure Browsing<\/a>, and specifically useful is<\/li>\n<li><a href=\"https:\/\/blog.mozilla.org\/security\/2020\/01\/09\/crlite-part-2-end-to-end-design\">The End-to-End Design of CRLite<\/a><i>.\u00a0<\/i><\/li>\n<\/ul>\n<p>This blog post discusses the back-end infrastructure that produces the data which Firefox uses for CRLite. To begin with, we\u2019ll trace that data in reverse, starting from what Firefox needs to use for CRLite\u2019s algorithms, back to the inputs derived from monitoring the whole Web PKI via Certificate Transparency.<\/p>\n<h2>Tracing the Flow of Data<\/h2>\n<p>Individual copies of Firefox maintain in their profiles a CRLite database which is periodically updated via Firefox\u2019s <a href=\"https:\/\/remote-settings.readthedocs.io\">Remote Settings<\/a>. Those updates come in the form of CRLite filters and \u201cstashes\u201d.<\/p>\n<h3>Filters and Stashes<\/h3>\n<p>The general mechanism for how the filters work is explained in Figure 3 of <a href=\"https:\/\/blog.mozilla.org\/security\/2020\/01\/09\/crlite-part-2-end-to-end-design\">The End-to-End Design of CRLite<\/a><i>.<\/i><\/p>\n<p>Introduced in this post is the concept of CRLite <a href=\"https:\/\/github.com\/mozilla\/crlite\/wiki#what-are-the-stashes\">stashes<\/a>. These are lists of certificate issuers and the certificate serial numbers that those issuers revoked, which the CRLite infrastructure distributes to Firefox users in lieu of a whole new filter. If a certificate\u2019s identity is contained within any of the issued stashes, then that certificate is invalid.<\/p>\n<p>Combining stashes with the CRLite filters produces an algorithm which, in simplified terms, proceeds like this:<\/p>\n<div id=\"attachment_2662\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1.png\"><img aria-describedby=\"caption-attachment-2662\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-2662 size-large\" src=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1-600x753.png\" alt=\"A representation of the CRLite Algorithm: Is this website\u2019s Certificate Authority enrolled in CRLite? If not, use the online status check, OCSP. If it is enrolled, should I expect this website\u2019s certificate to be a part of the CRLite filter available in my local profile? If it should be in the CRLite filter, does this website\u2019s certificate appear in the filter as having been revoked by its issuer? If it\u2019s not in the filter as having been revoked, does this website\u2019s certificate appear in any of my local profile\u2019s CRLite stashes as being revoked? If either the CRLite filter or the stashes indicate the website\u2019s certificate is revoked, don\u2019t trust it and show an error page. If it\u2019s not in the CRLite filter nor in the CRLite stashes as revoked, then proceed to run the rest of the Web PKI validity and trust checks. If for any reason we can\u2019t tell from the above, for example the local filters or stashes are too old or we encounter an error, then we go back to using the online status check, OCSP.\" width=\"600\" height=\"753\" srcset=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1-600x753.png 600w, https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1-300x377.png 300w, https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1-768x964.png 768w, https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1.png 940w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-2662\" class=\"wp-caption-text\">Figure 1: Simplified CRLite Decision Tree<\/p><\/div>\n<p>Every time the CRLite infrastructure updates its dataset, it produces both a new filter and a stash containing all of the new revocations (compared with the previous run). Firefox\u2019s CRLite is up-to-date if it has <a href=\"https:\/\/github.com\/mozilla\/crlite\/wiki#what-determines-whether-a-new-filter-gets-distributed-or-a-new-stash-distributed\">a filter and all issued stashes for that filter<\/a>.<\/p>\n<h3>Enrolled, Valid and Revoked<\/h3>\n<p>To produce the filters and stashes, CRLite needs as input:<\/p>\n<ol>\n<li>The list of trusted certificate authority issuers which are <a href=\"https:\/\/github.com\/mozilla\/crlite\/wiki#how-do-you-pick-what-cas-are-included-in-crlite\">enrolled in CRLite<\/a>,<\/li>\n<li>The list of all currently-valid certificates issued by each of those enrolled certificate authorities, e.g. information from Certificate Transparency,<\/li>\n<li>The list of all unexpired-but-revoked certificates issued by each of those enrolled certificate authorities, e.g. from Certificate Revocation Lists.<\/li>\n<\/ol>\n<p>These bits of data are the basis of the CRLite decision-making.<\/p>\n<p>The enrolled issuers are communicated to Firefox clients as updates within the existing <a href=\"https:\/\/blog.mozilla.org\/security\/2020\/11\/13\/preloading-intermediate-ca-certificates-into-firefox\/\">Intermediate Preloading<\/a> feature, while the certificate sets are compressed into the CRLite filters and stashes. Whether a certificate issuer is enrolled or not is directly related to obtaining the list of their revoked certificates.<\/p>\n<h3>Collecting Revocations<\/h3>\n<p>To obtain all the revoked certificates for a given issuer, the CRLite infrastructure reads the Certificate Revocation List (CRL) Distribution Point extension out of all that issuer\u2019s unexpired certificates and filters the list down to those CRLs which are available over HTTP\/HTTPS. Then, every URL in that list is downloaded and verified: Does it have a valid, trusted signature? Is it up-to-date? If any could not be downloaded, do we have a cached copy which is still both valid and up-to-date?<\/p>\n<p>For issuers which are considered enrolled, all of the entries in the CRLs are collected and saved as a complete list of all revoked certificates for that issuer.<\/p>\n<h3>Lists of Unexpired Certificates<\/h3>\n<p>The lists of currently-valid certificates and unexpired-but-revoked certificates have to be calculated, as the data sources that CRLite uses consist of:<\/p>\n<ol>\n<li>Certificate Transparency\u2019s list of all certificates in the WebPKI, and<\/li>\n<li>All the published certificate revocations from the previous step.<\/li>\n<\/ol>\n<p>By policy now, <a href=\"https:\/\/www.certificate-transparency.org\/\">Certificate Transparency (CT) Logs<\/a>, in aggregate, are assumed to provide a complete list of all certificates in the public Web PKI. CRLite then filters the complete CT dataset down to certificates which haven\u2019t yet reached their expiration date, but which have been issued by certificate authorities trusted by Firefox.<\/p>\n<p>Filtering CT data down to a list of unexpired certificates allows CRLite to derive the needed data sets using set math:<\/p>\n<ul>\n<li>The currently-valid certificates are those which are unexpired and not included in any revocation list,<\/li>\n<li>The unexpired-but-revoked certificates are those which are unexpired and are included in a revocation list.<\/li>\n<\/ul>\n<p>The CT data simply comes from a continual monitoring of the Certificate Transparency ecosystem. <a href=\"https:\/\/github.com\/mozilla\/crlite\/wiki#what-ct-logs-are-monitored\">Every known CT log<\/a> is monitored by Mozilla\u2019s infrastructure, and every certificate added to the ecosystem is processed.<\/p>\n<h2>The Kubernetes Pods<\/h2>\n<p>All these functions are orchestrated as four <a href=\"https:\/\/en.wikipedia.org\/wiki\/Kubernetes\">Kubernetes<\/a> pods with the descriptive names Fetch, Generate, Publish, and Sign-off.<\/p>\n<h3>Fetch<\/h3>\n<p>Fetch is a Kubernetes deployment, or always-on task, which constantly monitors Certificate Transparency data from all Certificate Transparency logs. Certificates that aren\u2019t expired are inserted into a <a href=\"http:\/\/redis.io\/\">Redis database<\/a>, configured so that certificates are expunged automatically when they reach their expiration time. This way, whenever the CRLite infrastructure requires a list of all unexpired certificates known to Certificate Transparency, it can iterate through all of the certificates in the Redis database. The actual data stored in Redis is <a href=\"https:\/\/github.com\/mozilla\/crlite\/wiki#what-gets-stored-in-redis\">described in our FAQ<\/a>.<\/p>\n<div id=\"attachment_2658\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Fetch.png\"><img aria-describedby=\"caption-attachment-2658\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-2658 size-large\" src=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Fetch-600x239.png\" alt=\"\" width=\"600\" height=\"239\" srcset=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Fetch-600x239.png 600w, https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Fetch-300x119.png 300w, https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Fetch.png 669w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-2658\" class=\"wp-caption-text\">Figure 2: The Fetch task reads from Certificate Transparency and stores data in a Redis database<\/p><\/div>\n<h3>Generate<\/h3>\n<p>The Generate pod is a periodic task, which currently runs four times a day. This task reads all known unexpired certificates from the Redis database, downloads and validates all CRLs from the issuing certificate authorities, and synthesizes a filter and a stash from those data sources. The resulting filters and stashes are uploaded into a <a href=\"https:\/\/github.com\/mozilla\/crlite\/wiki#where-can-i-get-the-crlite-data-that-is-used-to-make-filters\">Google Cloud Storage bucket, along with all the source input data<\/a>, for both public audit and distribution.<\/p>\n<div id=\"attachment_2659\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Generate.png\"><img aria-describedby=\"caption-attachment-2659\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-2659 size-large\" src=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Generate-600x325.png\" alt=\"\" width=\"600\" height=\"325\" srcset=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Generate-600x325.png 600w, https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Generate-300x163.png 300w, https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Generate.png 646w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-2659\" class=\"wp-caption-text\">Figure 3: The Generate task reads from a Redis database and the Internet, and writes its results to Google Cloud Storage<\/p><\/div>\n<h3>Publish<\/h3>\n<p>The Publish task is also a periodic task, running often. It looks for new filters and stashes in the Google Cloud Storage bucket, and stages <a href=\"https:\/\/github.com\/mozilla\/crlite\/wiki#what-determines-whether-a-new-filter-gets-distributed-or-a-new-stash-distributed\">either a new filter or a stash<\/a> to Firefox\u2019s Remote Settings when the Generate task finishes producing one.<\/p>\n<div id=\"attachment_2660\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Publish.png\"><img aria-describedby=\"caption-attachment-2660\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-2660 size-large\" src=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Publish-600x175.png\" alt=\"\" width=\"600\" height=\"175\" srcset=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Publish-600x175.png 600w, https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Publish-300x87.png 300w, https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Publish.png 649w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-2660\" class=\"wp-caption-text\">Figure 4: The Publish job reads from Google Cloud Storage and writes to Remote Settings<\/p><\/div>\n<h3>Sign-Off<\/h3>\n<p>Finally, a separate Sign-Off task runs periodically, also often. When there is an updated filter or stash staged at Firefox\u2019s Remote Settings, the sign-off task downloads the staged data and tests it, looking for coherency and to make sure that CRLite does not accidentally include revocations that could break Firefox. If all the tests pass, the Sign-Off task approves the new CRLite data for distribution, which triggers <a href=\"https:\/\/mozilla-push-service.readthedocs.io\/en\/latest\/\">Megaphone<\/a> to push the update to Firefox users that are online.<\/p>\n<div id=\"attachment_2661\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Sign-Off.png\"><img aria-describedby=\"caption-attachment-2661\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-2661 size-large\" src=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Sign-Off-600x176.png\" alt=\"\" width=\"600\" height=\"176\" srcset=\"https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Sign-Off-600x176.png 600w, https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Sign-Off-300x88.png 300w, https:\/\/blog.mozilla.org\/security\/files\/2020\/11\/Sign-Off.png 646w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-2661\" class=\"wp-caption-text\">Figure 5: The Sign-Off task interacts with both Remote Settings and the public Internet<\/p><\/div>\n<h2>Using CRLite<\/h2>\n<p>We recently announced in the <a href=\"https:\/\/groups.google.com\/g\/mozilla.dev.platform\/c\/mbYKUEGE5oQ\">mozilla.dev.platform mailing list that Firefox Nightly users on Desktop are relying on CRLite<\/a>, after collecting encouraging performance measurements for most of 2020. We\u2019re working on plans to begin tests for Firefox Beta users soon. If you want to try using CRLite, you can use Firefox Nightly, or for the more adventurous reader, <a href=\"https:\/\/github.com\/mozilla\/crlite\/wiki#how-can-i-query-my-crlite-filter\">interact with the CRLite data directly<\/a>.<\/p>\n<p>Our final blog post in this series, Part 5, will reflect on the collaboration between Mozilla Security Engineering and the several research teams that designed and have analyzed CRLite to produce this impressive system.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Firefox is the only major browser that still evaluates every website it connects to whether the certificate used has been reported as revoked. Firefox users are notified of all connections &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/\">Read more<\/a><\/p>\n","protected":false},"author":1349,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320796,69,45499],"tags":[327150,327155,907,45499],"coauthors":[45540],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Design of the CRLite Infrastructure - Mozilla Security Blog<\/title>\n<meta name=\"description\" content=\"CRLite provides Firefox users with the confidence that the revocations in the Web PKI are enforced by the browser without privacy compromise.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"J.C. Jones\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/\",\"url\":\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/\",\"name\":\"Design of the CRLite Infrastructure - Mozilla Security Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/security\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1-600x753.png\",\"datePublished\":\"2020-12-01T14:00:18+00:00\",\"dateModified\":\"2020-11-26T04:27:21+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/security\/#\/schema\/person\/f2bfcea9a0c404ce2431925922bedbde\"},\"description\":\"CRLite provides Firefox users with the confidence that the revocations in the Web PKI are enforced by the browser without privacy compromise.\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#primaryimage\",\"url\":\"https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1.png\",\"contentUrl\":\"https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1.png\",\"width\":940,\"height\":1180,\"caption\":\"Figure 1: Simplified CRLite Decision Tree\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/security\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Design of the CRLite Infrastructure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.mozilla.org\/security\/#website\",\"url\":\"https:\/\/blog.mozilla.org\/security\/\",\"name\":\"Mozilla Security Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.mozilla.org\/security\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.mozilla.org\/security\/#\/schema\/person\/f2bfcea9a0c404ce2431925922bedbde\",\"name\":\"J.C. Jones\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/security\/#\/schema\/person\/image\/d063fc46e7671301c178b2781210dff7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64eb1412c9354cf356df31936368cdac?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64eb1412c9354cf356df31936368cdac?s=96&d=identicon&r=g\",\"caption\":\"J.C. Jones\"},\"description\":\"Keeping people safe on the 'net. Cryptography Engineering lead for Firefox.\",\"sameAs\":[\"https:\/\/tacticalsecret.com\/\",\"https:\/\/x.com\/JamesPugJones\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Design of the CRLite Infrastructure - Mozilla Security Blog","description":"CRLite provides Firefox users with the confidence that the revocations in the Web PKI are enforced by the browser without privacy compromise.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/","twitter_misc":{"Written by":"J.C. Jones","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/","url":"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/","name":"Design of the CRLite Infrastructure - Mozilla Security Blog","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/security\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#primaryimage"},"image":{"@id":"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1-600x753.png","datePublished":"2020-12-01T14:00:18+00:00","dateModified":"2020-11-26T04:27:21+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/security\/#\/schema\/person\/f2bfcea9a0c404ce2431925922bedbde"},"description":"CRLite provides Firefox users with the confidence that the revocations in the Web PKI are enforced by the browser without privacy compromise.","breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#primaryimage","url":"https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1.png","contentUrl":"https:\/\/blog.mozilla.org\/security\/files\/2020\/12\/CRLite-Decision-Flow1.png","width":940,"height":1180,"caption":"Figure 1: Simplified CRLite Decision Tree"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/security\/2020\/12\/01\/crlite-part-4-infrastructure-design\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/security\/"},{"@type":"ListItem","position":2,"name":"Design of the CRLite Infrastructure"}]},{"@type":"WebSite","@id":"https:\/\/blog.mozilla.org\/security\/#website","url":"https:\/\/blog.mozilla.org\/security\/","name":"Mozilla Security Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.mozilla.org\/security\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.mozilla.org\/security\/#\/schema\/person\/f2bfcea9a0c404ce2431925922bedbde","name":"J.C. Jones","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/security\/#\/schema\/person\/image\/d063fc46e7671301c178b2781210dff7","url":"https:\/\/secure.gravatar.com\/avatar\/64eb1412c9354cf356df31936368cdac?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64eb1412c9354cf356df31936368cdac?s=96&d=identicon&r=g","caption":"J.C. Jones"},"description":"Keeping people safe on the 'net. Cryptography Engineering lead for Firefox.","sameAs":["https:\/\/tacticalsecret.com\/","https:\/\/x.com\/JamesPugJones"]}]}},"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/posts\/2656"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/users\/1349"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/comments?post=2656"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/posts\/2656\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/media?parent=2656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/categories?post=2656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/tags?post=2656"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mozilla.org\/security\/wp-json\/wp\/v2\/coauthors?post=2656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}