Aller au contenu

Passer le flux docker en https

Cette procédure va vous guider pas à pas dans la mise en place du https avec docker.

Prérequis

Afin d'utiliser une image docker d'un logiciel Maarch. Vous devez tout d'abord télécharger apache2 :

apt install apache2

Une fois l'installation d'apache2 finie, nous allons commencer par paramétrer le reverse proxy. Voici un exemple de VHOST pour le reverse proxy :

<VirtualHost *:80>

    #Information sur le serveur
    ServerAdmin webmaster@localhost
    ServerName onlyoffice.mondomaine.com

    #Localisation des journaux
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    #Configuration du proxy : ce vhost(*:80) rebondit sur http://127.0.0.1:81/
    ProxyPass / http://127.0.0.1:81/
    ProxyPassReverse / http://127.0.0.1:81/
    ProxyRequests Off
</VirtualHost>

Il vous faudra ensuite activer les modules Apache suivants :

a2enmod proxy
a2enmod proxy_http

Nous allons maintenant pouvoir passer à la mise en place du HTTPS. Deux solutions sont possibles pour mettre en place le https :

  • Utiliser letsencrypt

Pour l'utilisation de letsencrypt nous vous invitons à consulter la documentation officielle : https://certbot.eff.org/docs/using.html#apache

  • Utiliser un certificat déjà existant.

Dans ce cas, vous devrez créer un nouveau VHOST.

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerAdmin webmaster@localhost
        ServerName onlyoffice.maarchcourrier.com

        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/fullchain.pem
        SSLCertificateKeyFile /etc/ssl/private/privkey.pem

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
        </Directory>

        ProxyPass / http://127.0.0.1:81/
        ProxyPassReverse / http://127.0.0.1:81/
        ProxyRequests Off
        RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
        RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}
    </VirtualHost>
</IfModule>

Il vous faudra ensuite activer les modules Apache suivants :

a2enmod ssl
a2enmod headers

Dans le cas où vous rencontrez des anomalies sur la vérification des certificats nous vous conseillons de lancer le docker de la façon suivante :

docker run -i -t -d -p 81:80  \
  --entrypoint "/bin/bash" \
  onlyoffice/documentserver:8.3.3 \
  -c "/var/www/onlyoffice/documentserver/npm/json -f /etc/onlyoffice/documentserver/default.json -I -e 'this.services.CoAuthoring.requestDefaults.rejectUnauthorized=false' && /app/ds/run-document-server.sh"

Ajouter un certificat

Installer une autorité de certification Copiez votre certificat au format PEM (le format qui contient ----BEGIN CERTIFICATE----) dans

/usr/local/share/ca-certificates

et nommez-le avec une extension de fichier .crt.

Ensuite, lancez

sudo update-ca-certificates.

Avertissements : Cette installation concerne uniquement les produits qui utilisent ce magasin de certificats. Certains produits peuvent utiliser d'autres magasins de certificats ; Si vous utilisez ces produits, vous devrez également ajouter ce certificat de CA à ces autres magasins de certificats. ( Instructions Firefox, Instructions Chrome, Instructions Java)

Tester le CA. Vous pouvez vérifier si cela a fonctionné en recherchant le certificat que vous venez d'ajouter dans /etc/ssl/certs/ca-certificates.crt (qui est simplement une longue liste de tous les certificats de votre autorité de certification approuvée concaténés ensemble).

Vous pouvez également utiliser le client s_client d'OpenSSL en essayant de vous connecter à un serveur dont vous savez qu'il utilise un certificat signé par l'autorité de certification que vous venez d'installer.

$ openssl s_client -connect foo.whatever.com:443 -CApath /etc/ssl/certs

CONNECTED(00000003)
depth=1 C = US, ST = Virginia, O = "Whatever, Inc.", CN = whatever.com, emailAddress = admin@whatever.com
verify return:1
depth=0 C = US, ST = Virginia, L = Arlington, O = "Whatever, Inc.", CN = foo.whatever.com
verify return:1
---
Certificate chain
0 s:/C=US/ST=Virginia/L=Arlington/O=Whatever, Inc./CN=foo.whatever.com
i:/C=US/ST=Virginia/O=Whatever, Inc./CN=whatever.com/emailAddress=admin@whatever.com

... snip lots of output ...

    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1392837700
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

La première chose à rechercher est la chaîne de certificats située en haut de la sortie. Cela devrait afficher l'autorité de certification en tant qu'émetteur (à côté de i:). Cela vous indique que le serveur présente un certificat signé par l'autorité de certification que vous installez.

Deuxièmement, recherchez le verify return code à la fin pour être défini sur 0 (ok).