1*6777b538SAndroid Build Coastguard Worker# Certificate Transparency 2*6777b538SAndroid Build Coastguard Worker 3*6777b538SAndroid Build Coastguard Worker[TOC] 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker## Overview 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard WorkerCertificate Transparency (CT) is a protocol designed to fix several structural 8*6777b538SAndroid Build Coastguard Workerflaws in the SSL/TLS certificate ecosystem. Described in 9*6777b538SAndroid Build Coastguard Worker[RFC 6962](https://tools.ietf.org/html/rfc6962), it provides a public, 10*6777b538SAndroid Build Coastguard Workerappend-only data structure that can log certificates that are issued by 11*6777b538SAndroid Build Coastguard Worker[certificate authorities](https://en.wikipedia.org/wiki/Certificate_authority) (CAs). 12*6777b538SAndroid Build Coastguard WorkerBy logging certificates, it becomes possible for the public to see what 13*6777b538SAndroid Build Coastguard Workercertificates have been issued by a given CA. This allows site operators to 14*6777b538SAndroid Build Coastguard Workerdetect when a certificate has been issued for their domains, allowing them to 15*6777b538SAndroid Build Coastguard Workercheck for unauthorized issuance. It also allows browsers and root stores, and 16*6777b538SAndroid Build Coastguard Workerthe broader community, to examine the certificates a CA has issued and ensure 17*6777b538SAndroid Build Coastguard Workerthat the CA is complying with their expected or disclosed practices. 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard WorkerFor more information about how Certificate Transparency works, see: 20*6777b538SAndroid Build Coastguard Worker * https://www.certificate-transparency.org 21*6777b538SAndroid Build Coastguard Worker * [Introducing Certificate Transparency and Nimbus](https://blog.cloudflare.com/introducing-certificate-transparency-and-nimbus/) 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker## Certificate Transparency for Site Operators 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker### Basics 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard WorkerWe say that a certificate supports Certificate Transparency if it comes with 28*6777b538SAndroid Build Coastguard WorkerCT information that demonstrates it has been logged in several CT logs. This 29*6777b538SAndroid Build Coastguard WorkerCT information must comply with the 30*6777b538SAndroid Build Coastguard Worker[Certificate Transparency in Chrome](https://github.com/chromium/ct-policy/blob/master/ct_policy.md) 31*6777b538SAndroid Build Coastguard Workerpolicy. We sometimes refer to a site that "supports" CT as using a certificate 32*6777b538SAndroid Build Coastguard Workerthat is "CT qualified" or "disclosed via CT." 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard WorkerIn general, a site operator does not need to take special action to 35*6777b538SAndroid Build Coastguard Workersupport Certificate Transparency. This is because RFC 6962 defines three ways 36*6777b538SAndroid Build Coastguard Workerof providing the necessary information for CT: within the certificate, within 37*6777b538SAndroid Build Coastguard Workera stapled OCSP response, or directly by the TLS server. Nearly every CA 38*6777b538SAndroid Build Coastguard Workersupports CT through the first method, meaning that when you get a certificate, 39*6777b538SAndroid Build Coastguard Workerit will already support CT and require no further configuration. If you are 40*6777b538SAndroid Build Coastguard Workerusing a cloud provider to terminate your TLS connections, the cloud provider 41*6777b538SAndroid Build Coastguard Workermay also support CT via TLS, requiring no further action on your part. 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard WorkerSupporting CT within the certificate itself is the preferred and recommended 44*6777b538SAndroid Build Coastguard Workerway to enable CT support. If you obtain a certificate from your CA and it does 45*6777b538SAndroid Build Coastguard Workernot support CT, then that generally indicates that your CA is not following 46*6777b538SAndroid Build Coastguard Workerindustry best practice, and you should probably look for another CA to provide 47*6777b538SAndroid Build Coastguard Workercertificates for your sites. 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard WorkerConfiguring support for CT via the TLS extension is not recommended for most 50*6777b538SAndroid Build Coastguard Workersite operators. This is because supporting CT via this method requires 51*6777b538SAndroid Build Coastguard Workerconstant monitoring of the CT ecosystem, such as for changes in the list of 52*6777b538SAndroid Build Coastguard Workertrusted logs or testing compatibility with various CT-supporting clients. This 53*6777b538SAndroid Build Coastguard Workermethod works well for organizations with the ability to dedicate resources to 54*6777b538SAndroid Build Coastguard Workerthat, such as hosting and cloud providers. If you are hosting your own website, 55*6777b538SAndroid Build Coastguard Workeryou should try to ensure that your certificates support CT, and avoid supporting 56*6777b538SAndroid Build Coastguard WorkerCT via the TLS extension. Supporting CT via the TLS extension may require rapid 57*6777b538SAndroid Build Coastguard Workerchanges to your configuration, and thus may be riskier for organizations 58*6777b538SAndroid Build Coastguard Workerwithout staff dedicated to this. 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard WorkerIf you are getting longer-lived certificates (for example, 1 year), it's 61*6777b538SAndroid Build Coastguard Workerpossible that changes in the CT ecosystem may mean that the CT information may 62*6777b538SAndroid Build Coastguard Workerexpire before the certificate expires. If your CA also supports delivering CT 63*6777b538SAndroid Build Coastguard Workervia OCSP responses, then supporting OCSP stapling on your server may allow 64*6777b538SAndroid Build Coastguard Workerfresh CT information to be provided without having to replace the certificate. 65*6777b538SAndroid Build Coastguard WorkerAlternatively, if your server does not support OCSP stapling, or your CA does 66*6777b538SAndroid Build Coastguard Workernot support CT in their OCSP responses, you may need to replace your certificate. 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard WorkerThese policies only apply to publicly-trusted CAs - that is, CAs that your 69*6777b538SAndroid Build Coastguard Workerbrowser or device trust without any additional configuration. For organizations 70*6777b538SAndroid Build Coastguard Workerusing their own CAs, or for locally installed CAs, see 71*6777b538SAndroid Build Coastguard Worker[Certificate Transparency for Enterprises](#Certificate-Transparency-For-Enterprises). 72*6777b538SAndroid Build Coastguard Worker 73*6777b538SAndroid Build Coastguard Worker### Chrome Policies 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard WorkerChrome has gradually required Certificate Transparency for more and more 76*6777b538SAndroid Build Coastguard Workerpublicly-trusted certificates over the past few years. 77*6777b538SAndroid Build Coastguard Worker 78*6777b538SAndroid Build Coastguard Worker* [Since 1 January 2015](https://github.com/chromium/ct-policy/blob/master/ct_policy.md), 79*6777b538SAndroid Build Coastguard WorkerChrome has required that all Extended Validation certificates be disclosed via 80*6777b538SAndroid Build Coastguard WorkerCertificate Transparency. Certificates that were not properly disclosed would 81*6777b538SAndroid Build Coastguard Workerbe [stripped of their EV status](https://news.netcraft.com/archives/2015/08/24/thousands-short-changed-by-ev-certificates-that-dont-display-correctly-in-chrome.html), 82*6777b538SAndroid Build Coastguard Workerbut no warnings would be shown to visitors to sites that did not comply. 83*6777b538SAndroid Build Coastguard Worker 84*6777b538SAndroid Build Coastguard Worker* [Since 1 June 2016](https://security.googleblog.com/2015/10/sustaining-digital-certificate-security.html), 85*6777b538SAndroid Build Coastguard WorkerChrome has required that all new certificates issued by the set of root 86*6777b538SAndroid Build Coastguard Workercertificates owned by Symantec Corporation are disclosed via Certificate 87*6777b538SAndroid Build Coastguard WorkerTransparency. Certificates that were not disclosed, or which were not disclosed 88*6777b538SAndroid Build Coastguard Workerin a way consistent with RFC 6962, would be rejected as untrusted. 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker* For all new certificates issued after 30 April 2018, [Chrome will require that 91*6777b538SAndroid Build Coastguard Workerthe certificate be disclosed via Certificate 92*6777b538SAndroid Build Coastguard WorkerTransparency](https://groups.google.com/a/chromium.org/d/msg/ct-policy/wHILiYf31DE/iMFmpMEkAQAJ). 93*6777b538SAndroid Build Coastguard WorkerIf a certificate is issued after this date and neither the certificate nor 94*6777b538SAndroid Build Coastguard Workerthe site supports CT, then these certificates will be rejected as untrusted, and 95*6777b538SAndroid Build Coastguard Workerthe connection will be blocked. In the case of a main page load, the user will 96*6777b538SAndroid Build Coastguard Workersee a full page certificate warning page, with the error code 97*6777b538SAndroid Build Coastguard Worker`net::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED`. If you receive this error, this 98*6777b538SAndroid Build Coastguard Workerindicates that your CA has not taken steps to make sure your certificate 99*6777b538SAndroid Build Coastguard Workersupports CT, and you should contact your CA's sales or support team to ensure 100*6777b538SAndroid Build Coastguard Workeryou can get a replacement certificate that works. 101*6777b538SAndroid Build Coastguard Worker 102*6777b538SAndroid Build Coastguard Worker### Domain Privacy 103*6777b538SAndroid Build Coastguard Worker 104*6777b538SAndroid Build Coastguard WorkerSupporting CT by disclosing the certificate to a CT Log means that the full 105*6777b538SAndroid Build Coastguard Workercontents of the certificate will be publicly accessible and viewable. In 106*6777b538SAndroid Build Coastguard Workerparticular, this means that the domains a certificate are for will be included 107*6777b538SAndroid Build Coastguard Workerin the Certificate Transparency log, as well as the organization they are 108*6777b538SAndroid Build Coastguard Workeraffiliated with, if they are validated to a level higher than Domain 109*6777b538SAndroid Build Coastguard WorkerValidation or issued from an organization-specific CA. 110*6777b538SAndroid Build Coastguard Worker 111*6777b538SAndroid Build Coastguard WorkerFor most certificates, this is no different than what is already available. 112*6777b538SAndroid Build Coastguard WorkerPublicly-trusted certificates have been subject to aggregation for public 113*6777b538SAndroid Build Coastguard Workeranalysis for some time, such as through products and tools such as 114*6777b538SAndroid Build Coastguard Worker[Censys](https://censys.io/) or [scans.io](https://scans.io/). While 115*6777b538SAndroid Build Coastguard WorkerCertificate Transparency provides an interoperable protocol for exchanging 116*6777b538SAndroid Build Coastguard Workerthese datasets, in many cases, the certificate details and domains were already 117*6777b538SAndroid Build Coastguard Workerpublicly detectable. 118*6777b538SAndroid Build Coastguard Worker 119*6777b538SAndroid Build Coastguard WorkerRequiring that the full certificate be disclosed if it was issued by a 120*6777b538SAndroid Build Coastguard Workerpublicly-trusted CA is an important part of the security goals of Certificate 121*6777b538SAndroid Build Coastguard WorkerTransparency. Permitting some of the information to be hidden from 122*6777b538SAndroid Build Coastguard Workercertificates allows for both attackers and untrustworthy CAs to hide 123*6777b538SAndroid Build Coastguard Workercertificates that could be used to compromise users. Certificate Transparency 124*6777b538SAndroid Build Coastguard Workerhas detected issues at a large 125*6777b538SAndroid Build Coastguard Worker[number of CAs](https://wiki.mozilla.org/CA/Incident_Dashboard), many that the 126*6777b538SAndroid Build Coastguard WorkerCAs themselves were not even aware of, and so public disclosure is critical 127*6777b538SAndroid Build Coastguard Workerto keeping all users safe. 128*6777b538SAndroid Build Coastguard Worker 129*6777b538SAndroid Build Coastguard WorkerWhile proposals for hiding domain names were presented during the development 130*6777b538SAndroid Build Coastguard Workerof Certificate Transparency, none of them were able to balance the needs of 131*6777b538SAndroid Build Coastguard Workersite operators that did not need to hide their domains, those that did, and the 132*6777b538SAndroid Build Coastguard Workersecurity risks that users would face. 133*6777b538SAndroid Build Coastguard Worker 134*6777b538SAndroid Build Coastguard WorkerBecause of this, Chrome does not support any method for hiding domain names or 135*6777b538SAndroid Build Coastguard Workerother information within publicly-trusted certificates, nor are there any plans 136*6777b538SAndroid Build Coastguard Workerto support such mechanisms. Domain operators that wish to hide their 137*6777b538SAndroid Build Coastguard Workercertificates, enabling security risks and attacks, have two options: 138*6777b538SAndroid Build Coastguard Worker 139*6777b538SAndroid Build Coastguard Worker1. **Wildcard Certificates** - Wildcard certificates allow a single certificate 140*6777b538SAndroid Build Coastguard Worker to be used for multiple hostnames, by putting a `*` as the most specific 141*6777b538SAndroid Build Coastguard Worker DNS label (for example, `*.internal.example.com` is valid for 142*6777b538SAndroid Build Coastguard Worker `mail.internal.example.com` and `wiki.internal.example.com`, but not for 143*6777b538SAndroid Build Coastguard Worker `www.example.com` or `two.levels.internal.example.com`). Wildcard 144*6777b538SAndroid Build Coastguard Worker certificates require greater care by the site operator to protect their 145*6777b538SAndroid Build Coastguard Worker private key, but also can have their issuance controlled via technologies 146*6777b538SAndroid Build Coastguard Worker such as [CAA (RFC 6844)](https://tools.ietf.org/html/rfc6844). This still 147*6777b538SAndroid Build Coastguard Worker requires the certificate be disclosed, but can limit how much of the domain 148*6777b538SAndroid Build Coastguard Worker is disclosed. 149*6777b538SAndroid Build Coastguard Worker2. **Enterprise-specific configuration** - If the domains being accessed are 150*6777b538SAndroid Build Coastguard Worker not intended to be used on the public internet, or not on machines or by 151*6777b538SAndroid Build Coastguard Worker users that are not part of a single enterprise, then that enterprise can 152*6777b538SAndroid Build Coastguard Worker use the options in the 153*6777b538SAndroid Build Coastguard Worker [Certificate Transparency for Enterprises](#Certificate-Transparency-For-Enterprises). 154*6777b538SAndroid Build Coastguard Worker This allows the enterprise to not reveal any information about the 155*6777b538SAndroid Build Coastguard Worker certificate, but these certificates will **only** be trusted by their 156*6777b538SAndroid Build Coastguard Worker members. 157*6777b538SAndroid Build Coastguard Worker 158*6777b538SAndroid Build Coastguard Worker### What to do if your certificate does not work 159*6777b538SAndroid Build Coastguard Worker 160*6777b538SAndroid Build Coastguard WorkerAs noted in [Chrome Policies](#Chrome-Policies), all certificates issued after 161*6777b538SAndroid Build Coastguard Worker30 April 2018 are expected to be disclosed via Certificate Transparency in a 162*6777b538SAndroid Build Coastguard Workerway that is compliant with the Certificate Transparency in Chrome policy. 163*6777b538SAndroid Build Coastguard WorkerVirtually all publicly-trusted CAs have committed to supporting CT for their 164*6777b538SAndroid Build Coastguard Workercustomers by default by this date, meaning that site operators should not have 165*6777b538SAndroid Build Coastguard Workerto do anything special and can continue getting certificates that just work on 166*6777b538SAndroid Build Coastguard Worker1 May 2018. 167*6777b538SAndroid Build Coastguard Worker 168*6777b538SAndroid Build Coastguard WorkerHowever, there's still a chance that a CA may not have adopted Certificate 169*6777b538SAndroid Build Coastguard WorkerTransparency, may have an infrastructure issue, or may not have communicated 170*6777b538SAndroid Build Coastguard Workerto their partners, such as resellers or subordinate CAs, to ensure that the 171*6777b538SAndroid Build Coastguard Workertransition would be as smooth as possible for their customers. 172*6777b538SAndroid Build Coastguard Worker 173*6777b538SAndroid Build Coastguard WorkerIf you're receiving a `net::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED` error 174*6777b538SAndroid Build Coastguard Workermessage, the best thing to do is to contact your CA's support or sales team 175*6777b538SAndroid Build Coastguard Workerto diagnose the error with them. They will most likely need to replace your 176*6777b538SAndroid Build Coastguard Workercertificate with a new one that properly supports CT. 177*6777b538SAndroid Build Coastguard Worker 178*6777b538SAndroid Build Coastguard Worker## Certificate Transparency for Enterprises 179*6777b538SAndroid Build Coastguard Worker 180*6777b538SAndroid Build Coastguard Worker### Locally-trusted CAs 181*6777b538SAndroid Build Coastguard Worker 182*6777b538SAndroid Build Coastguard WorkerCertificate Transparency only applies to CAs that are publicly-trusted - that 183*6777b538SAndroid Build Coastguard Workeris, CAs that are supported by your browser or device out of the box, without 184*6777b538SAndroid Build Coastguard Workerany additional configuration steps. 185*6777b538SAndroid Build Coastguard Worker 186*6777b538SAndroid Build Coastguard WorkerFor CAs that have been manually installed, provided those certificates are not 187*6777b538SAndroid Build Coastguard Workeror have not been publicly-trusted, it's not necessary to enable support for 188*6777b538SAndroid Build Coastguard WorkerCertificate Transparency. Further, Certificate Transparency Logs will not 189*6777b538SAndroid Build Coastguard Workeraccept certificates from those CAs, thus it's not possible to support CT. 190*6777b538SAndroid Build Coastguard Worker 191*6777b538SAndroid Build Coastguard WorkerIn some cases, an Enterprise may have a locally-trusted CA that has been 192*6777b538SAndroid Build Coastguard Workermanually installed, but it was previously publicly-trusted. For example, this 193*6777b538SAndroid Build Coastguard WorkerCA may have been removed by a browser or an OS for not complying with the 194*6777b538SAndroid Build Coastguard Workerroot store policies, but the Enterprise may still have a dependency on 195*6777b538SAndroid Build Coastguard Workertrusting this CA. In these cases, the Enterprise can use 196*6777b538SAndroid Build Coastguard Worker[Enterprise Policies](#Enterprise-Policies) to configure how Certificate 197*6777b538SAndroid Build Coastguard WorkerTransparency will be enforced for those CAs. 198*6777b538SAndroid Build Coastguard Worker 199*6777b538SAndroid Build Coastguard Worker### Private Domain Names 200*6777b538SAndroid Build Coastguard Worker 201*6777b538SAndroid Build Coastguard WorkerFor Enterprises that have domain names that are internal to their organization, 202*6777b538SAndroid Build Coastguard Workerand do not need to be publicly-trusted by default, several options exist to 203*6777b538SAndroid Build Coastguard Workerenable these domains to be kept private, while allowing the certificates to 204*6777b538SAndroid Build Coastguard Workerstill be used, without error, for users in their organization. 205*6777b538SAndroid Build Coastguard Worker 206*6777b538SAndroid Build Coastguard WorkerThe recommended option is to no longer rely on publicly-trusted certificates 207*6777b538SAndroid Build Coastguard Workerto serve these domains, as they are organization specific. For example, such 208*6777b538SAndroid Build Coastguard Workerorganizations can use a private CA, which [several](https://aws.amazon.com/certificate-manager/private-certificate-authority/) 209*6777b538SAndroid Build Coastguard Worker[CAs](https://www.digicert.com/private-pki/) [offer](https://www.comodo.com/business-security/pki-management/certificate-manager.php). 210*6777b538SAndroid Build Coastguard WorkerUsing a hosted, managed PKI may help organizations more rapidly respond to 211*6777b538SAndroid Build Coastguard Workerchange in the TLS ecosystem, such as changes to certificate algorithms or 212*6777b538SAndroid Build Coastguard Workersupport for new protocols. 213*6777b538SAndroid Build Coastguard Worker 214*6777b538SAndroid Build Coastguard WorkerAnother option is to request that the publicly-trusted CA not log the 215*6777b538SAndroid Build Coastguard Workercertificate. This will prevent this certificate from being trusted by default, 216*6777b538SAndroid Build Coastguard Workerbut organizations that manage their devices or users can override this through 217*6777b538SAndroid Build Coastguard Worker[Enterprise Policies](#Enterprise-Policies) to enable these certificates to be 218*6777b538SAndroid Build Coastguard Workertrusted for users in their Enterprise. 219*6777b538SAndroid Build Coastguard Worker 220*6777b538SAndroid Build Coastguard WorkerFinally, organizations may manage their own PKI in-house, using CA 221*6777b538SAndroid Build Coastguard Workersoftware such as [CFSSL](https://github.com/cloudflare/cfssl), [Boulder](https://github.com/letsencrypt/boulder), 222*6777b538SAndroid Build Coastguard Worker[EJBCA](https://www.ejbca.org/) or 223*6777b538SAndroid Build Coastguard Worker[Active Directory Certificate Services](https://msdn.microsoft.com/en-us/library/ff630887.aspx). 224*6777b538SAndroid Build Coastguard WorkerManaging certificates in-house may be more complex and security risky, but 225*6777b538SAndroid Build Coastguard Workeroffers an alternative solution to partnering with a certificate provider. 226*6777b538SAndroid Build Coastguard Worker 227*6777b538SAndroid Build Coastguard Worker### Legacy CAs 228*6777b538SAndroid Build Coastguard Worker 229*6777b538SAndroid Build Coastguard WorkerSome Enterprises rely on Certificate Authorities that have not been audited to 230*6777b538SAndroid Build Coastguard Workerthe same standard as other CAs or been operated to the same security 231*6777b538SAndroid Build Coastguard Workerrequirements. These CAs would not be trusted in new products, nor other root 232*6777b538SAndroid Build Coastguard Workerprograms, but may be trusted on one or more platforms that Chrome runs on. 233*6777b538SAndroid Build Coastguard WorkerBecause they are trusted by default, they are subject to the Chrome's policies 234*6777b538SAndroid Build Coastguard Workeron requiring CT, but due to their legacy status, may not be prepared. While the 235*6777b538SAndroid Build Coastguard Workerrequirement to disclose new certificates via Certificate Transparency has been 236*6777b538SAndroid Build Coastguard Workercommunicated, some may not do so, causing their new certificates to not be 237*6777b538SAndroid Build Coastguard Workertrusted. This is most common with CAs run by governments, as they rarely meet the 238*6777b538SAndroid Build Coastguard Workerrequired security standards of a widely-trusted CA. 239*6777b538SAndroid Build Coastguard Worker 240*6777b538SAndroid Build Coastguard WorkerOrganizations that need to use certificates from these CAs should be aware 241*6777b538SAndroid Build Coastguard Workerthat their certificates will not be trusted if they do not support CT, and so 242*6777b538SAndroid Build Coastguard Workershould look for CAs that do support CT. Alternatively, supporting CT via TLS 243*6777b538SAndroid Build Coastguard Workermay be the only way to ensure these certificates continue to work, but that 244*6777b538SAndroid Build Coastguard Workerrequires the Enterprise constantly keep track of changes regarding Certificate 245*6777b538SAndroid Build Coastguard WorkerTransparency. 246*6777b538SAndroid Build Coastguard Worker 247*6777b538SAndroid Build Coastguard WorkerOrganizations that need to trust certificates from these CAs, such as when 248*6777b538SAndroid Build Coastguard Workertalking to other organizations that need to use these CAs, can configure 249*6777b538SAndroid Build Coastguard Worker[Enterprise Policies](#Enterprise-Policy) for users in their organization, 250*6777b538SAndroid Build Coastguard Workerwhich will allow trust in these certificates. As these only apply to Enterprise 251*6777b538SAndroid Build Coastguard Workerusers, these policies are not suitable for making these certificates trusted 252*6777b538SAndroid Build Coastguard Workermore widely. 253*6777b538SAndroid Build Coastguard Worker 254*6777b538SAndroid Build Coastguard Worker### Enterprise Policies 255*6777b538SAndroid Build Coastguard Worker 256*6777b538SAndroid Build Coastguard WorkerSeveral Chrome-specific policies exist that allow Enterprises to configure 257*6777b538SAndroid Build Coastguard Workertheir machines or users to disable Certificate Transparency for certain cases. 258*6777b538SAndroid Build Coastguard WorkerThese policies are documented in the 259*6777b538SAndroid Build Coastguard Worker[master policy list](https://cloud.google.com/docs/chrome-enterprise/policies), 260*6777b538SAndroid Build Coastguard Workerbut detailed further below. 261*6777b538SAndroid Build Coastguard Worker 262*6777b538SAndroid Build Coastguard Worker#### CertificateTransparencyEnforcementDisabledForUrls 263*6777b538SAndroid Build Coastguard Worker 264*6777b538SAndroid Build Coastguard WorkerThis [policy](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=CertificateTransparencyEnforcementDisabledForUrls) 265*6777b538SAndroid Build Coastguard Workerhas been available since Chrome 53, and allows for disabling Certificate 266*6777b538SAndroid Build Coastguard WorkerTransparency enforcement for a certain set of domains or subdomains, without 267*6777b538SAndroid Build Coastguard Workerdisabling Certificate Transparency altogether. 268*6777b538SAndroid Build Coastguard Worker 269*6777b538SAndroid Build Coastguard WorkerIf you wish to disable CT for a given hostname, and all of its subdomains, then 270*6777b538SAndroid Build Coastguard Workerthe domain is simply entered into the list. For example, `example.com` will 271*6777b538SAndroid Build Coastguard Workerdisable CT for `example.com` and all subdomains. 272*6777b538SAndroid Build Coastguard Worker 273*6777b538SAndroid Build Coastguard WorkerIf you wish to disable CT only for a given hostname, but wish to ensure that 274*6777b538SAndroid Build Coastguard Workersubdomains will still have CT enabled, then prefix the domain with a leading 275*6777b538SAndroid Build Coastguard Workerdot. For example, `.example.com` will disable CT for `example.com` exactly, 276*6777b538SAndroid Build Coastguard Workerwhile leaving it enabled for subdomains. 277*6777b538SAndroid Build Coastguard Worker 278*6777b538SAndroid Build Coastguard Worker#### CertificateTransparencyEnforcementDisabledForCas 279*6777b538SAndroid Build Coastguard Worker 280*6777b538SAndroid Build Coastguard WorkerThis [policy](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=CertificateTransparencyEnforcementDisabledForCas), 281*6777b538SAndroid Build Coastguard Workeravailable since Chrome 57, allows for disabling Certificate Transparency 282*6777b538SAndroid Build Coastguard Workerenforcement if certain conditions are met in the trusted certificate chain. 283*6777b538SAndroid Build Coastguard WorkerThis allows disabling CT without having to list all of the domain names, but 284*6777b538SAndroid Build Coastguard Workeronly for certificates issued to a specific organization. 285*6777b538SAndroid Build Coastguard Worker 286*6777b538SAndroid Build Coastguard WorkerCertificates are specified in this policy by applying Base64 to a hash of their 287*6777b538SAndroid Build Coastguard WorkersubjectPublicKeyInformation, as well as specifying the hash algorithm used. 288*6777b538SAndroid Build Coastguard WorkerThis format is very similar to that used by 289*6777b538SAndroid Build Coastguard Worker[HTTP Public Key Pinning](https://tools.ietf.org/html/rfc7469) (HPKP), so that 290*6777b538SAndroid Build Coastguard Workersites can use the same [examples](https://tools.ietf.org/html/rfc7469#appendix-A) 291*6777b538SAndroid Build Coastguard Workeror [tools](https://report-uri.com/home/pubkey_hash) used to generate HPKP 292*6777b538SAndroid Build Coastguard Workerhashes to determine how to configure the policy. Note that while both use 293*6777b538SAndroid Build Coastguard WorkerBase64, an HPKP hash will be in the form `pin-sha256="hash"`, while the policy 294*6777b538SAndroid Build Coastguard Workerwill be in the form `sha256/hash`. 295*6777b538SAndroid Build Coastguard Worker 296*6777b538SAndroid Build Coastguard WorkerTo disable Certificate Transparency for these certificates, the certificate 297*6777b538SAndroid Build Coastguard Workermust match one of the following conditions: 298*6777b538SAndroid Build Coastguard Worker 299*6777b538SAndroid Build Coastguard Worker1. The hash specified is of the server certificate's subjectPublicKeyInfo. 300*6777b538SAndroid Build Coastguard Worker2. The hash specified is of an intermediate CA, and that intermediate CA has 301*6777b538SAndroid Build Coastguard Worker a nameConstraints extension with one or more directoryNames in the 302*6777b538SAndroid Build Coastguard Worker permittedSubtrees of that extension. 303*6777b538SAndroid Build Coastguard Worker3. The hash specified is of an intermediate CA, that intermediate CA contains 304*6777b538SAndroid Build Coastguard Worker one or more organizationName (O) attribute in the subject, and the server 305*6777b538SAndroid Build Coastguard Worker certificate's has the same number of organizationName attributes, with 306*6777b538SAndroid Build Coastguard Worker byte-for-byte identical values, in the same exact order. 307*6777b538SAndroid Build Coastguard Worker 308*6777b538SAndroid Build Coastguard Worker#### CertificateTransparencyEnforcementDisabledForLegacyCas 309*6777b538SAndroid Build Coastguard Worker 310*6777b538SAndroid Build Coastguard WorkerThis [policy](https://cloud.google.com/docs/chrome-enterprise/policies/?policy=CertificateTransparencyEnforcementDisabledForLegacyCas), 311*6777b538SAndroid Build Coastguard Workeravailable since Chrome 67, allows for disabling Certificate Transparency 312*6777b538SAndroid Build Coastguard Workerenforcement for certain legacy CAs that have not adopted modern security and 313*6777b538SAndroid Build Coastguard Workeraudit requirements required of publicly-trusted CAs. This is particularly 314*6777b538SAndroid Build Coastguard Workertailored towards CAs that are trusted on some platforms that Chrome runs on, 315*6777b538SAndroid Build Coastguard Workerbut are not trusted on ChromeOS or Android, due to not meeting the necessary 316*6777b538SAndroid Build Coastguard Workersecurity requirements. 317*6777b538SAndroid Build Coastguard Worker 318*6777b538SAndroid Build Coastguard WorkerCAs are specified in this policy by applying Base64 to a hash of their 319*6777b538SAndroid Build Coastguard WorkersubjectPublicKeyInformation, the same as in 320*6777b538SAndroid Build Coastguard Worker[CertificateTransparencyEnforcementDisabledForCAs](#CertificateTransparencyEnforcementDisabledForCas). 321*6777b538SAndroid Build Coastguard WorkerHowever, these CAs must also be recognized as Legacy CAs in the 322*6777b538SAndroid Build Coastguard Worker[`/net/data/ssl/root_stores/root_stores.json`](/net/data/ssl/root_stores/root_stores.json) 323*6777b538SAndroid Build Coastguard Workerfile, which means that they are not trusted on ChromeOS or Android, but are 324*6777b538SAndroid Build Coastguard Workertrusted on another platform that Chrome runs on. 325*6777b538SAndroid Build Coastguard Worker 326*6777b538SAndroid Build Coastguard WorkerThis policy is the riskiest of the three Enterprise policies, in that such 327*6777b538SAndroid Build Coastguard Workerlegacy CAs can represent the greatest security threat to an organization, as 328*6777b538SAndroid Build Coastguard Workerthey lack either the audits or compliance with industry best practice and root 329*6777b538SAndroid Build Coastguard Workerstore requirements. Enterprises should only enable this policy if no other 330*6777b538SAndroid Build Coastguard Workeroption meets their needs. 331*6777b538SAndroid Build Coastguard Worker 332*6777b538SAndroid Build Coastguard Worker## Certificate Transparency for Chrome/Chromium developers 333*6777b538SAndroid Build Coastguard Worker 334*6777b538SAndroid Build Coastguard Worker### //net Interfaces 335*6777b538SAndroid Build Coastguard Worker 336*6777b538SAndroid Build Coastguard WorkerSupport for Certificate Transparency in //net is made up of two core 337*6777b538SAndroid Build Coastguard Workerinterfaces: 338*6777b538SAndroid Build Coastguard Worker 339*6777b538SAndroid Build Coastguard Worker* [`CTVerifier`](/net/cert/ct_verifier.h): Responsible for extracting the 340*6777b538SAndroid Build Coastguard Worker CT information (SCTs) from the certificate, the OCSP response, and the 341*6777b538SAndroid Build Coastguard Worker TLS handshake, validating the signatures against a set of known/configured 342*6777b538SAndroid Build Coastguard Worker CT logs, and validating that the SCTs match the certificate provided. 343*6777b538SAndroid Build Coastguard Worker* [`CTPolicyEnforcer`](/net/cert/ct_policy_enforcer.h): Responsible for 344*6777b538SAndroid Build Coastguard Worker taking the extracted, verified SCTs and applying 345*6777b538SAndroid Build Coastguard Worker application/embedder-specific policies to determine whether the SCTs are 346*6777b538SAndroid Build Coastguard Worker "good enough" (meet application requirements). 347*6777b538SAndroid Build Coastguard Worker 348*6777b538SAndroid Build Coastguard WorkerIn addition to these two core classes, configuration and support for CT-related 349*6777b538SAndroid Build Coastguard Workerbehaviours is expressed via the 350*6777b538SAndroid Build Coastguard Worker[`TransportSecurityState`](/net/http/transport_security_state.h). The 351*6777b538SAndroid Build Coastguard Worker`TransportSecurityState` has methods for exposing support and policies for 352*6777b538SAndroid Build Coastguard Worker[`Expect-CT`](https://tools.ietf.org/html/draft-ietf-httpbis-expect-ct) and 353*6777b538SAndroid Build Coastguard Workerfor embedder-specific overrides via the 354*6777b538SAndroid Build Coastguard Worker`TransportSecurityState::RequireCTDelegate`. 355*6777b538SAndroid Build Coastguard Worker 356*6777b538SAndroid Build Coastguard Worker### Supporting Certificate Transparency for Embedders 357*6777b538SAndroid Build Coastguard Worker 358*6777b538SAndroid Build Coastguard WorkerWhile Chromium has implemented support for Certificate Transparency for a 359*6777b538SAndroid Build Coastguard Workernumber of years, it would not block connections unless there was a known 360*6777b538SAndroid Build Coastguard Workersecurity issue. For example, certificates that were intended to be EV, but 361*6777b538SAndroid Build Coastguard Workerwere not disclosed properly, simply would have their EV status removed, while 362*6777b538SAndroid Build Coastguard Workerthe connection should still continue. 363*6777b538SAndroid Build Coastguard Worker 364*6777b538SAndroid Build Coastguard WorkerHowever, as Google Chrome looks to roll out a more rigorous enforcement of 365*6777b538SAndroid Build Coastguard WorkerCertificate Transparency, by enforcing that newly-issued certificates are 366*6777b538SAndroid Build Coastguard Workerdisclosed as a condition of being trusted, the risks to the CA and CT 367*6777b538SAndroid Build Coastguard Workerecosystem significantly increase if embedders implement CT without the ability 368*6777b538SAndroid Build Coastguard Workerfor reliable, rapid updates, keeping track with ongoing development in the 369*6777b538SAndroid Build Coastguard Workermain tree and reliably delivering security updates on the same cadence as 370*6777b538SAndroid Build Coastguard WorkerChromium branches and Google Chrome releases. 371*6777b538SAndroid Build Coastguard Worker 372*6777b538SAndroid Build Coastguard WorkerFor this reason, the CT implementation is undergoing a refactoring to reduce 373*6777b538SAndroid Build Coastguard Workerthose risks through code and implementation. As a result, Chromium embedders 374*6777b538SAndroid Build Coastguard Workerwill **NOT** have CT enforcement enabled by default, and are **NOT** encouraged 375*6777b538SAndroid Build Coastguard Workerto manually enable it at this time. 376*6777b538SAndroid Build Coastguard Worker 377*6777b538SAndroid Build Coastguard WorkerDistributors of products that embed Chromium sources are encouraged to 378*6777b538SAndroid Build Coastguard Workerparticipate in the 379*6777b538SAndroid Build Coastguard Worker[[email protected]](https://groups.google.com/a/chromium.org/forum/#!forum/ct-policy) 380*6777b538SAndroid Build Coastguard Workerdiscussion group, which involves a variety of stakeholders in the CT ecosystem 381*6777b538SAndroid Build Coastguard Workerfor discussing matters of policy and implementation, in order to understand 382*6777b538SAndroid Build Coastguard Workerthe risks and participate in solutions. Face-to-face summits are periodically 383*6777b538SAndroid Build Coastguard Workerheld to gather key stakeholders together to work through these issues, helping 384*6777b538SAndroid Build Coastguard Workerroot programs, CAs, log operators, and the overall PKI community develop 385*6777b538SAndroid Build Coastguard Workerconsistent, interoperable, secure, and reliable policies and implementations. 386