This is a text-only version of the following page on https://raymii.org:
---
Title : OCSP Stapling on nginx
Author : Remy van Elst
Date : 03-02-2014
URL : https://raymii.org/s/tutorials/OCSP_Stapling_on_nginx.html
Format : Markdown/HTML
---
When connecting to a server, clients should verify the validity of the server
certificate using either a Certificate Revocation List (CRL), or an Online
Certificate Status Protocol (OCSP) record. The problem with CRL is that the
lists have grown huge and takes forever to download.
OCSP is much more lightweight, as only one record is retrieved at a time. But
the side effect is that OCSP requests must be made to a 3rd party OCSP responder
when connecting to a server, which adds latency and potential failures. In fact,
the OCSP responders operated by CAs are often so unreliable that browser will
fail silently if no response is received in a timely manner. This reduces
security, by allowing an attacker to DoS an OCSP responder to disable the
validation.
Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below:
I'm developing an open source monitoring app called Leaf Node Monitoring, for windows, linux & android. Go check it out!
Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.
You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $200 credit for 60 days. Spend $25 after your credit expires and I'll get $25!
The solution is to allow the server to send its cached OCSP record during the
TLS handshake, therefore bypassing the OCSP responder. This mechanism saves a
roundtrip between the client and the OCSP responder, and is called OCSP
Stapling.
The server will send a cached OCSP response only if the client requests it, by
announcing support for the status_request TLS extension in its CLIENT HELLO.
Most servers will cache OCSP response for up to 48 hours. At regular intervals,
the server will connect to the OCSP responder of the CA to retrieve a fresh OCSP
record. The location of the OCSP responder is taken from the Authority
Information Access field of the signed certificate.
[This tutorial is also available for Apache][2]
### What is OCSP Stapling
OCSP stapling is defined in the [IETF RFC 6066][3]. The term "stapling" is a
popular term used to describe how the OCSP response is obtained by the web
server. The web server caches the response from the CA that issued the
certificate. When an SSL/TLS handshake is initiated, the response is returned by
the web server to the client by attaching the cached OCSP response to the
CertificateStatus message. To make use of OCSP stapling, a client must include
the "status_request" extension with its SSL/TSL Client "Hello" message.
OCSP stapling presents several advantages including the following:
* The relying party receives the status of the web servers certificate when it is needed (during the SSL/TLS handshake).
* No additional HTTP connection needs to be set up with the issuing CA.
* OCSP stapling provides added security by reducing the number of attack vectors.
[Read][4] [one][5] [of][6] [the][7] [following][8] [links][9] for [more][10]
information on OCSP and OCSP stapling.
### Requirements
You need at least nginx 1.3.7 for this to work. This is not available in the
current Ubuntu LTS releases (12.04), [it has 1.1.19][11] and on CentOS you need
EPEL or the official repositories. However, it is easy [to install the latest
version of nginx.][12]
You also need create a firewall exception to allow your server to make outbound
connections to the upstream OCSP's. You can view all OCSP URI's from a website
using this one liner:
OLDIFS=$IFS; IFS=':' certificates=$(openssl s_client -connect google.com:443 -showcerts -tlsextdebug -tls1 2>&1 .
Just to be clear, the information on this website is for meant for educational
purposes and you use it at your own risk. I do not take responsibility if you
screw something up. Use common sense, do not 'rm -rf /' as root for example.
If you have any questions then do not hesitate to contact me.
See https://raymii.org/s/static/About.html for details.