Je suis intervenu récemment chez un client dont le certificat https expirait dans les quinze jours, mais dont le serveur webmail est un Lotus Domino, dans une version qui n'est pas compatible avec des certiifcats encodés en autre chose que SHA1.
Leur prestataire ne pouvant générer que des certiicats en SHA256 leur a proposé 2 options :
Cet article décrit les actions réalisées pour la mise en place de cette architecture reverse proxy, sur un Linux CentOS / RHEL 7
Le serveur CentOS sera positionné dans la DMZ, isolé par le firewall.
L'installation du serveur Apache se fait via les commandes yum. On installera le package httpd (serveur apache), ainsi que les modules mod_ssl (SSL) et mod_proxy (pour gérer le mode Proxy / Reverse proxy) :
yum install httpd httpd-tools mod_ssl mod_proxy
Ceci va donc installer les binaires et créer les répertoires /etc/httpd, et les sous-répertoires :
Pour que le serveur httpd veuille bien se lancer, j'ai du ajouter le hostname de la machine dans le fichier /etc/httpd/conf/httpd.conf, au niveau de la directive ServerName :
ServerName lnxvmrev1.domaine.fr
Le paramétrage du reverse Proxy sera fait dans un fichier de configuration séparé. Un fichier /etc/httpd/conf.d/reverse-proxy.conf sera donc créé, contenant :
#
# Parametrage du reverse Proxy pour le webmail
#
# On redirige les requêtes en https vers le serveur Notes (IP 10.1.2.3)
ProxyRequests Off
<VirtualHost *:443>
# Production
ServerName webmail.domaine.fr
DocumentRoot /var/www/html
CustomLog /var/log/httpd/ssl_reverse.log combined
# SSL Engine Switch , certificate configuration paths:
# Enable/Disable SSL for this virtual host.
SSLEngine on
SSLCertificateFile "/etc/ssl/certs/https/webmail.pem"
SSLCertificateKeyFile "/etc/ssl/certs/https/webmail.key"
SSLStrictSNIVHostCheck Off
SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:!aNULL:!MD5
# On fait du proxy vers un autre serveur en https
SSLProxyEngine On
# Disable SSLProxyCheck
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
SSLProxyVerify none
# On transmet notre certificat au serveur distant (crt + key combiné)
# SSLProxyMachineCertificateFile "/etc/ssl/certs/https/client.pem"
ProxyPass / https://10.1.2.3/
ProxyPassReverse / https://10.1.2.3/
ProxyPreserveHost On
</VirtualHost>
Quelques explications sur les directives.
Tout d'abord la partie serveur https
Viennent ensuite les directives relatives à la partie Reverse proxy :
On redémarre ensuite avec les commandes systemctl :
systemctl restart httpd
On vérifie que le serveur http s'est ancé :
systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since lun. 2016-11-07 14:31:48 CET; 2min 26s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 14121 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Main PID: 14126 (httpd)
Status: "Total requests: 6; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─14126 /usr/sbin/httpd -DFOREGROUND
├─14127 /usr/sbin/httpd -DFOREGROUND
├─14128 /usr/sbin/httpd -DFOREGROUND
├─14129 /usr/sbin/httpd -DFOREGROUND
├─14130 /usr/sbin/httpd -DFOREGROUND
├─14131 /usr/sbin/httpd -DFOREGROUND
├─14132 /usr/sbin/httpd -DFOREGROUND
├─14133 /usr/sbin/httpd -DFOREGROUND
└─14134 /usr/sbin/httpd -DFOREGROUND
nov. 07 14:31:48 lnxvmrev1.domaine.fr systemd[1]: Starting The Apache HTTP Server...
nov. 07 14:31:48 lnxvmrev1.domaine.fr systemd[1]: Started The Apache HTTP Server.
En cas de souci, les commandes systemctl status et journalctl -xe permettent de débugguer les erreurs.
J'ai notamment eu un cas où le service ne voulait pas démarrer car le ServerName n'était pas renseigné dans le fichier de configuration global.
La génération en une seule passe d'une clé privée (sans mot de passe) et d'un certificat avec une validité d'un an, et encypté en SHA1 se fait ia la commande :
openssl req -new -x509 -days 365 -sha1 -nodes -out server.pem -keyout server.key
Il faut passer par une opération supplémentaire pour générer un fichier PEM acceptable par le serveur httpd.
En partant des fichiers .key et .pem existants, il faut ajouter une entête RSA :
openssl rsa -in webmail.key -out client.key
Puis on concatène les fichiers clé et certificat :
cp webmail.pem client.pem
cat client.key >> client.pem