Vendredi 23 novembre 2018

Compilation openssl 1.1 et nginx Debian Stretch

Build nginx (Mainline) with OpenSSL 1.1.0 on Ubuntu 16.04
Installer la dernière version disponible de Nginx avec OpenSSL version 1.1.x.

Installer les outils nécessaires pour compiler OpenSSL et nginx.
sudo apt install build-essential -y

OpenSSL 1.1.0

Nouveau répertoire
sudo mkdir -p /opt/openssl
cd /opt/openssl/

OpenSSL et téléchargement (openssl-1.1.0f.tar.gz du 25/05/2017)

sudo wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
sudo tar zxvf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f

Configurer OpenSSL
sudo ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
Compilation et installation , patienter de 3 à 8 minutes.
sudo make && sudo make install
Exécutez les tests suivants pour vérifier si l’installation a réussi.
which openssl
/usr/bin/openssl

Test de la version installée du système OpenSSL.
openssl version
OpenSSL 1.1.0f 25 May 2017

Testez la version personnalisée installée d’OpenSSL (elle est identique à celle installée car pas de openssl avant compilation). /usr/local/openssl/bin/openssl version
OpenSSL 1.1.0f 25 May 2017

Vérifiez les paramètres installés disponibles d’OpenSSL.
/usr/local/openssl/bin/openssl ciphers -V "ALL:COMPLEMENTOFALL"

Nginx

Les sources

La clé PGP pour l’authentification.

cd ~
sudo wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

Créer un fichier suivant pour obtenir les paquets nginx disponibles
sudo nano /etc/apt/sources.list.d/nginx-mainline.list

deb http://nginx.org/packages/mainline/debian/ stretch nginx
deb-src http://nginx.org/packages/mainline/debian/ stretch nginx

Mise à jour
sudo apt update
Créer un nouveau répertoire pour compiler nginx

sudo mkdir -p /opt/buildnginx
cd /opt/buildnginx/

Obtenir nginx
sudo apt source nginx
Ignorer le message suivant
W: Download is performed unsandboxed as root as file 'nginx_1.13.5-1~stretch.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission non accordée)

Les logiciels nécessaires pour installer nginx.
sudo apt build-dep nginx -y Retour au dossier pour compilation
cd /opt/buildnginx/
Changer le nom du dossier nginx source
sudo mv nginx-1.13.5/ nginx-mainline

Bash de compilation

Fichier bash pouvant être exécuté , création :

cat > nginx-compil << EOF
#!/bin/bash
#logiciels pour compilation 
sudo apt install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip curl libcurl4-openssl-dev libossp-uuid-dev libssl-dev libxslt-dev libgd-dev libgeoip-dev libperl-dev libpam0g-dev libbz2-dev tar unzip curl git -y
# installation luajit ,dépendances Lua5.1 et lua-cjson
sudo apt install luajit lua5.1 liblua5.1-0 liblua5.1-0-dev lua-cjson -y

#Création dossier modules 
sudo mkdir -p /opt/buildnginx/nginx-mainline/modules
#Modules externes : https://www.nginx.com/resources/wiki/modules/
cd /opt/buildnginx/nginx-mainline/modules/
#Clonage des modules externes avant compilation
# headers-more-nginx-module
sudo git clone https://github.com/openresty/headers-more-nginx-module
# ngx_http_auth_pam_module
sudo git clone https://github.com/stogh/ngx_http_auth_pam_module
#ngx_cache_purge
sudo git clone https://github.com/FRiCKLE/ngx_cache_purge
#ngx_devel_kit
sudo git clone https://github.com/simpl/ngx_devel_kit
#echo-nginx-module
sudo git clone https://github.com/openresty/echo-nginx-module
#ngx-fancyindex
sudo git clone https://github.com/aperezdc/ngx-fancyindex
# modification fancyindex pour avoir la ligne complète
#nginx-push-stream-module
sudo git clone https://github.com/wandenberg/nginx-push-stream-module
#lua-nginx-module
sudo git clone https://github.com/openresty/lua-nginx-module.git
#nginx-upload-progress-module
sudo git clone https://github.com/masterzen/nginx-upload-progress-module
#nginx-upstream-fair
sudo git clone https://github.com/gnosek/nginx-upstream-fair
#ngx_http_substitutions_filter_module
sudo git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module
#Chiffrement déchiffrement pour les variables nginx
sudo git clone https://github.com/openresty/encrypted-session-nginx-module.git
#Capacité d'échappement,“déséchappement”,encodage et décodage hexa,MD5,SHA1,Base32,Base64 ,etc… 
sudo git clone https://github.com/openresty/set-misc-nginx-module

cd /opt/buildnginx/nginx-mainline
#Configuration , compilation et installation nginx
./configure \
 --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' \
 --with-ld-opt=-Wl,-z,relro \
 --prefix=/usr/share/nginx \
 --conf-path=/etc/nginx/nginx.conf \
 --http-log-path=/var/log/nginx/access.log \
 --error-log-path=/var/log/nginx/error.log \
 --lock-path=/var/lock/nginx.lock \
 --pid-path=/run/nginx.pid \
 --http-client-body-temp-path=/var/lib/nginx/body \
 --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
 --http-proxy-temp-path=/var/lib/nginx/proxy \
 --http-scgi-temp-path=/var/lib/nginx/scgi \
 --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
 --with-debug \
 --with-pcre-jit \
 --with-ipv6 \
 --with-http_ssl_module \
 --with-http_v2_module \
 --with-http_stub_status_module \
 --with-http_realip_module \
 --with-http_auth_request_module \
 --with-http_addition_module \
 --with-http_dav_module \
 --with-http_flv_module \
 --with-http_geoip_module \
 --with-http_gzip_static_module \
 --with-http_image_filter_module \
 --with-http_mp4_module \
 --with-http_perl_module \
 --with-http_random_index_module \
 --with-http_secure_link_module \
 --with-http_sub_module \
 --with-http_xslt_module \
 --with-mail \
 --with-mail_ssl_module \
 --with-openssl=/opt/openssl/openssl-1.1.0ft \
 --add-module=/opt/buildnginx/nginx-mainline/modules/headers-more-nginx-module \
 --add-module=/opt/buildnginx/nginx-mainline/modules/ngx_http_auth_pam_module \
 --add-module=/opt/buildnginx/nginx-mainline/modules/ngx_cache_purge \
 --add-module=/opt/buildnginx/nginx-mainline/modules/ngx_devel_kit \
 --add-module=/opt/buildnginx/nginx-mainline/modules/echo-nginx-module \
 --add-module=/opt/buildnginx/nginx-mainline/modules/ngx-fancyindex \
 --add-module=/opt/buildnginx/nginx-mainline/modules/nginx-push-stream-module \
 --add-module=/opt/buildnginx/nginx-mainline/modules/lua-nginx-module \
 --add-module=/opt/buildnginx/nginx-mainline/modules/nginx-upload-progress-module \
 --add-module=/opt/buildnginx/nginx-mainline/modules/ngx_http_substitutions_filter_module \
 --add-module=/opt/buildnginx/nginx-mainline/modules/encrypted-session-nginx-module \
 --add-module=/opt/buildnginx/nginx-mainline/modules/set-misc-nginx-module \
 --add-module=/opt/buildnginx/nginx-mainline/modules/nginx-upstream-fair

#compilation
make
#installation
make install
#Copier le binaire pour le PATH
cp /usr/share/nginx/sbin/nginx /usr/sbin/
#Effacement compilation
make clean
#Dossier temporaire
mkdir -p /var/lib/nginx
#Dossier config
mkdir -p /etc/nginx/conf.d/
#dossier vhost
mkdir -p /var/www
EOF

Le rendre exécutable
chmod +x nginx-compil