Debian/Ubuntu: installer un proxy cache ocsp pour apache2

Pourquoi ce choix ?

J’ai constaté une latence très importante lors de la première négociation SSL sur mon serveur apache2 lorsque j’activais SSLUseStapling pour mes différents domaines (vérifié sur gtmetrix entre autres). Les négociations suivantes se déroulaient normalement par la suite.

Après plusieurs recherches, j’ai trouvé plusieurs articles traitant de ce problème (liens en fin de page) et de sa résolution: installer un proxy ocsp. Allons y!

Pré-requis:

redis-server doit être déjà installé (sinon procédez à son installation/configuration: apt install redis-server).


INSTALLATION DE OCSP_PROXY

Récupération des sources ocsp-proxy sur le github:

cd /tmp
wget https://github.com/philfry/ocsp_proxy/archive/refs/heads/master.zip
unzip master.zip
cd ocsp_proxy-master

Modifions le fichier systemd/ocsp_proxy.service comme suit:

[Unit]
Description=OCSP proxy
Documentation=man:ocsp_proxy(8)
Before=apache2.service
After=network.target redis-server.service

[Service]
Environment=host=localhost
Environment=port=7788
Environment=redis_sock=/run/redis/redis-server.sock
Environment=redis_prefix=ocspxy_
EnvironmentFile=-/etc/sysconfig/ocsp_proxy
User=redis
Group=redis
ExecStartPre=/usr/bin/test -S $redis_sock -a -r $redis_sock
ExecStart=/usr/local/sbin/ocsp_proxy -H $host -p $port -s $redis_sock -x $redis_prefix
Restart=always
PrivateTmp=true

[Install]
WantedBy=multi-user.target

On procède maintenant à l’installation de ocsp-proxy et activons le service par la même occasion:

make install
systemctl enable ocsp_proxy.service

On contrôle la bonne exécution du service: systemctl status ocsp_proxy.service


CONFIGURATION D’APACHE2

Il est nécessaire d’activer le Stapling Cache, pour cela vous avez 2 possibilités:
– modifier le fichier conf-enables/ssl.conf
– modifier le premier domaine situté dans le dossier sites-enabled
et d’ajouter la ligne suivante:

SSLStaplingCache shmcb:${APACHE_RUN_DIR}/ssl_stapling_cache(128000)

Maintenant, pour chaque domaine actif de votre serveur apache2, à l’intérieur de chaque <VirtualHost *:443>, ajoutez les lignes suivantes:

SSLUseStapling on
SSLStaplingResponderTimeout 4
SSLStaplingReturnResponderErrors off
SSLStaplingErrorCacheTimeout 60
SSLStaplingStandardCacheTimeout 3600
SSLOCSPProxyURL http://127.0.0.1:7788/

Rechargez/redémarrez votre serveur apache2: service apache2 reload


VERIFICATION DU BON FONCTIONNEMENT

Exécutez la ligne de commande suivante, en remplaçant mysite.com par l’adresse de votre propre site:

echo QUIT | openssl s_client -connect www.mysite.com:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'

Vous obtenez alors la réponse suivante:

OCSP response: 
======================================
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: C = US, O = Let's Encrypt, CN = R3
    Produced At: Mar  9 11:55:00 2024 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: --
      Issuer Key Hash: --
      Serial Number: --
    Cert Status: good
    This Update: Mar  9 11:55:00 2024 GMT
    Next Update: Mar 16 11:54:58 2024 GMT

Vous avez mis en place un proxy ocsp pour apache2 avec succès !


Sources:
https://github.com/philfry/ocsp_proxy/tree/master
https://community.letsencrypt.org/t/robust-ocsp-stapling-with-apache-httpd/87896