At least Chrome going to require all certificates issued in October 2017 and onward will have to be logged in Certificate Transparency logs. That Certificate Transparency is via expect CT Header declaration. This guide shows deployment of Expect CT Header as Nginx directive. As we are not machines, we will talk a little bit on Certificate Transparency.
Where From This Expect CT Header Came?
Expect-CT header field is a response header intended to be used by a server to indicate that the use agents should evaluate connections to the host emitting the header for certificate transparency compliance using the grammar defined in RFC 5234 and rules defined in RFC 7230.
You can read in to-be RFC form here (engineers can make unpalatable thing visually beautiful) :
---
1 | https://datatracker.ietf.org/doc/draft-stark-expect-ct/?include_text=1 |
You can read official details here :
1 | http://httpwg.org/http-extensions/expect-ct.html#RFC7230 |
Also you can read here on Crome :
1 | https://www.chromestatus.com/feature/5677171733430272 |
Expect-CT can catch detectable behaviour, hence the user agents should have a way to protect the privacy to the users.
The Expect-CT header requires very little configuration with only few options :
- enforce – optional directive. This is minimum expected to be present. This controls whether the browser should enforce the policy or not.
- max-age – optional directive. This is second expected thing to be present. This directive specifies the number of seconds that the browser should cache and apply the received policy.
- report-uri – optional directive. Ideally should be on own server or on server or trusted party.
Below diagram is illustration of Certificate Transparency and cuRL output of our website with Expect CT Header :
How To Add Expect CT Header Nginx Directive?
As I explained above, it is enforce
and max-age
which are important. max-age
frankly depends how many hours you think an user should be using old cache (that is kind of corollary). For Nginx, this directive will work, we are omitting the report-uri
thing :
1 | add_header Expect-CT 'enforce; max-age=3600'; |
Run nginx -t
and service nginx restart
. Then check the header with cURL. In above case max-age
is of one hour. You can increase or decrease. Increasing too much has problem. One hour is usually a sane value. Obviously you can test others website’s header with plain cURL :
1 2 | curl -I -k https://preloaded-expect-ct.badssl.com curl -I https://thecustomizewindows.com |
We have not seen any tools at the time of publication. There is no meaning of searching here and there, most are blind copy-paste of 1-2 articles.
Tagged With Expect-CT , Expect-CT nginx , expect-ct header , nginx expect-ct , nginx: [emerg] unknown directive check in , expect-ct header nginx , add_header expect-ct , Expect-CT Extension nginx , expect ct header , ct-expect headers