nginx um PQC-Schlüsselaustausch (Post-Quantum Cryptography) erweitern

In den meisten Serverbetriebssystemen werden OpenSSL-Versionen kleiner Version 3.5 verwendet, so dass der PQC Algorithmus nicht nativ unterstützt wird. Wir zeigen Ihnen, wie Sie den Webserver nginx dennoch damit absichern und härten können und ein A+ Rating bei https://www.ssllabs.com erhalten.

Bevor Sie mit der Einrichtung beginnen prüfen Sie bitte, ob der Webserver bereits Openssl 3.5.x verwendet oder wir manuell eingreifen müssen. Wechseln Sie dafür in den priviligierten Benutzermodus:

sudo -s

Führen Sie „nginx -V“ aus:

nginx -V

nginx version: nginx/1.29.3
built by gcc 12.2.0 (Debian 12.2.0-14+deb12u1)
built with OpenSSL 3.0.16 11 Feb 2025 (running with OpenSSL 3.0.17 1 Jul 2025)
TLS SNI support enabled

Das Beispiel zeigt Ihnen, dass unter Ubuntu 24 noch OpenSSL 3.0.16 verwendet wird. Am Beispiel Debian 13 wird hingegen „OpenSSL 3.5.1“ dargestellt:

nginx -V

nginx version: nginx/1.29.3
built by gcc 14.2.0 (Debian 14.2.0-19)
built with OpenSSL 3.5.1 1 Jul 2025
TLS SNI support enabled

Wird also keine OpenSSL-Version ab 3.5 verwendet so beginnen wir mit der Einrichtung der notwendigen Module.

apt install -y build-essential git cmake ninja-build libssl-dev

Klonen Sie nun das liboqs-Repository:

mkdir ~/nginx && cd ~/nginx
git clone --branch main https://github.com/open-quantum-safe/liboqs.git

Wechseln Sie in das Verzeichnis „liboqs“, erzeugen darin das Verzeichnis „build“ und wechseln dort hinein:

cd liboqs && mkdir build && cd build

Erstellen Sie nun die Komponenten und führen die Installation aus:

cmake -GNinja -DCMAKE_INSTALL_PREFIX=/usr/local -DOQS_DIST_BUILD=ON ..
ninja
ninja install

Klonen Sie nun das oqs-provider Projekt:

cd ~/nginx
git clone --branch main https://github.com/open-quantum-safe/oqs-provider.git

Wechseln Sie in das Verzeichnis „oqs-provider“, erzeugen darin das Verzeichnis „build“ und wechseln dort hinein:

cd oqs-provider && mkdir build && cd build

Erstellen Sie nun die Komponenten und führen die Installation aus:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DOPENSSL_ROOT_DIR=/usr/local/ssl ..
make -j$(nproc)
make install

Um diese Erweiterung global nutzen zu können fügen wir die nachfolgenden Zeilen in die openssl.conf ein:

cp /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf.bak
cat <<EOF >>/etc/ssl/openssl.cnf

# c-rieger.de - pqc-nginx
openssl_conf = openssl_init
[openssl_init]
providers = provider_sect
[provider_sect]
default = default_sect
oqsprovider = oqsprovider_sect
[default_sect]
activate = 1
[oqsprovider_sect]
activate = 1
module = /usr/lib/x86_64-linux-gnu/ossl-modules/oqsprovider.so
#

EOF

Passen Sie nun die vHost-Konfiguration an, bspw. nextcloud.conf:

nano /etc/nginx/conf.d/nextcloud.conf

und ergänzen diese beide Zeilen:

# ssl_ecdh_curve X448:secp521r1:secp384r1;
ssl_ecdh_curve X25519MLKEM768:X25519:prime256v1;# PQC curves

Führen Sie nun einen Test der Webserverkonfiguration aus

cd ~ && nginx -t

und starten den Webserver neu.

systemctl restart nginx.service

Ab sofort unterstützt Ihr Webserver den PQC (Post-Quantum Cryptography) Schlüsselaustausch.

Über Ihre Unterstützung würden wir uns sehr freuen – vorab vielen und herzlichen Dank dafür.

Unterstützung mit WERO