Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/05/2016, à 15:16

billou

[Résolu] Comment configurer/activer SSL pour des sous domaines

Salut, je suis quelque peu paumé, j'ai trouvé de très bon tutos pour générer des certificats valides avec letsencrypt, comment partager le port 443 utilisé par le service OpenVPN sur le port 4443 pour openSSL, configurer ce dernier pour l'utiliser, et enfin, configurer le virtuahost d'openSSL pour quemon nom de domaine principal pour que la connexion soit chiffrée.

[EDIT] Pour les curieux, voici les options pour activer le port 443 sur le serveur openvpn et partager ce dernier sur le port 4443 pour OpenSSL :
Éditer /etc/openvpn/server.conf

mode server
proto tcp
proto tcp-server
port-share 37.187.2.144 4443
port 443
port-share IP.DU.SER.VEUR 4443
dev tun

Mais à partir de là je bloque, plutôt que de faire une arborescence type :

osremix.com/forum ou osremix.com/wiki

J'ai choisi :

forum.osremix.com ou wiki.osremix.com

Et j'ai beau tenter d'activer SSL pour ces derniers, je n'y arrive pas, j'ai un message "Échec de la connexion sécurisée" qui apparaît au chargement de la page.

Voilà le contenu de mon "/etc/apache2/sites-available/default-ssl.conf", auriez vous des conseils/corrections à me proposer ?

<IfModule mod_ssl.c>
        <VirtualHost _default_:4443>
                ServerAdmin webmaster@localhost

                DocumentRoot /var/www/osremix.com/
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on

                SSLCertificateFile      /etc/letsencrypt/live/osremix.com/fullchain.pem
                SSLCertificateKeyFile /etc/letsencrypt/live/osremix.com/privkey.pem
                SSLCertificateChainFile /etc/letsencrypt/live/osremix.com/chain.pem

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

<VirtualHost *:4443>
DocumentRoot /var/www/osremix.com-wiki/
ServerName wiki.osremix.com
ServerAlias wiki.osremix.com
SSLCertificateFile      /etc/letsencrypt/live/wiki.osremix.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/wiki.osremix.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/wiki.osremix.com/chain.pem
</VirtualHost>

<VirtualHost *:4443>
DocumentRoot /var/www/osremix.com-forum/
ServerName wiki.osremix.com
ServerAlias wiki.osremix.com
SSLCertificateFile      /etc/letsencrypt/live/forum.osremix.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/forum.osremix.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/forum.osremix.com/chain.pem
</VirtualHost>

</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Dernière modification par billou (Le 18/05/2016, à 13:43)

Hors ligne

#2 Le 14/05/2016, à 00:50

bobe

Re : [Résolu] Comment configurer/activer SSL pour des sous domaines

As-tu essayé en ajoutant "SSLEngine on" dans tes virtualhost ?

ps : Utilise cert.pem dans la commande "SSLCertificateFile". fullchain.pem inclut ton certificat + le certificat letsencrypt intermédiaire alors que tu le fournis déjà avec "SSLCertificateChainFile".

Hors ligne

#3 Le 15/05/2016, à 11:49

zététix

Re : [Résolu] Comment configurer/activer SSL pour des sous domaines

Bonjour,

es-tu certain qu'apache écoute sur le port 4443 ? Par défaut ce serait plutôt 443. Regarde du côté de la directive Listen et NameVirtualHost.
D'autre part, si tu veux que ton certificat soit bien reconnu par les navigateurs sur les sous domaines, il te faut un certificat type Wildcard sinon tu auras une erreur du type "site malveillant".


Aidez-moi à faire connaître mon projet : RaidGHost, un hébergeur (presque :P) gratuit et sans publicité !

Hors ligne

#4 Le 18/05/2016, à 11:31

billou

Re : [Résolu] Comment configurer/activer SSL pour des sous domaines

bobe a écrit :

As-tu essayé en ajoutant "SSLEngine on" dans tes virtualhost ?

ps : Utilise cert.pem dans la commande "SSLCertificateFile". fullchain.pem inclut ton certificat + le certificat letsencrypt intermédiaire alors que tu le fournis déjà avec "SSLCertificateChainFile".

J'ai fait les changements que tu m'as indiqué, et autant le domaine osremix.com fonctionne sans soucis avec https, autant pour les sous domaines, j'ai une belle erreur.

La connexion n'est pas sécurisée

Les propriétaires de forum.osremix.com ont mal configuré leur site web. Pour éviter que vos données ne soient dérobées, Firefox ne s'est pas connecté à ce site web.
forum.osremix.com uses an invalid security certificate. The certificate is only valid for osremix.com Error code: SSL_ERROR_BAD_CERT_DOMAIN

Et si j'accepte d'outrepasser le problème avec cette erreur de certificat, sur le sous domaine, j'ai la page d’accueil du domaine principal qui s'affiche...

zététix a écrit :

Bonjour,

es-tu certain qu'apache écoute sur le port 4443 ? Par défaut ce serait plutôt 443. Regarde du côté de la directive Listen et NameVirtualHost.
D'autre part, si tu veux que ton certificat soit bien reconnu par les navigateurs sur les sous domaines, il te faut un certificat type Wildcard sinon tu auras une erreur du type "site malveillant".

Oui j'en suis certain, regarde le fichier de configuration fourni, d'ailleurs le domaine principal fonctionne correctement sans soucis sur ce port en https.

Quand au certificat, je l'ai généré avec letsencrypt, ça fonctionne très bien avec le domaine principal, mais j'ai une erreur avec les sous domaines.

Hors ligne

#5 Le 18/05/2016, à 11:53

bruno

Re : [Résolu] Comment configurer/activer SSL pour des sous domaines

Cela a déjà été discuté dans un autre fil… (je te laisse chercher)
Tu ne peux pas, avec des hôtes virtuels par nom (donc sur une seule IP), avoir des sites différents avec des certificats différents à moins d'utiliser SNI :

https://fr.wikipedia.org/wiki/Server_Name_Indication
https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

Le plus simple dans ton cas serait d'avoir une certificat commun pour tes trois domaines (ce que letsencrypt permet il me semble)

Hors ligne

#6 Le 18/05/2016, à 13:26

billou

Re : [Résolu] Comment configurer/activer SSL pour des sous domaines

Merci pour la piste, c'est bon, ça fonctionne enfin ! smile

J'ai dû lancer cette commande pour générer un certificat commun au domaine principal et sous domaines :

sudo letsencrypt certonly -d osremix.com -d wiki.osremix.com -d forum.osremix.com --rsa-key-size 4096

Et j'ai édité le /etc/apache2/sites-available/default-ssl.conf comme il suit, au propre :

<IfModule mod_ssl.c>

###################
### osremix.com ###
<VirtualHost _default_:4443>

ServerAdmin webmaster@localhost

DocumentRoot /var/www/osremix.com/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on
SSLCertificateFile      /etc/letsencrypt/live/osremix.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/osremix.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/osremix.com/chain.pem

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

</VirtualHost>

########################
### wiki.osremix.com ###
<VirtualHost *:4443>
SSLEngine on
DocumentRoot /var/www/osremix.com-wiki/
ServerName wiki.osremix.com
ServerAlias wiki.osremix.com
SSLCertificateFile      /etc/letsencrypt/live/osremix.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/osremix.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/osremix.com/chain.pem
</VirtualHost>

#########################
### forum.osremix.com ###
<VirtualHost *:4443>
SSLEngine on
DocumentRoot /var/www/osremix.com-forum/
ServerName forum.osremix.com
ServerAlias forum.osremix.com
SSLCertificateFile      /etc/letsencrypt/live/osremix.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/osremix.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/osremix.com/chain.pem
</VirtualHost>

</IfModule>

Pour forcer SSL/HTTPS sur les sites, j'ai rajouté un .htaccess à la racine de chaque domaine :

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} !on
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Pour le renouvellement automatique des certificats letsencrypt :

sudo nano /usr/local/sbin/le-renew-webroot

Puis copier et enregistrer comme ci dessous.

#!/bin/bash

web_service='apache2'

FILES=/etc/letsencrypt/renewal/*.conf
for f in $FILES
do
    echo "Renewing for $f file..."
    config_file="$f"


    le_path='/etc/letsencrypt'
    exp_limit=30;

    if [ ! -f $config_file ]; then
            echo "[ERROR] config file does not exist: $config_file"
            exit 1;
    fi

    domain=`grep "^\s*domains" $config_file | sed "s/^\s*domains\s*=\s*//" | sed 's/(\s*)\|,.*$//'`
    cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"

    if [ ! -f $cert_file ]; then
            echo "[ERROR] certificate file not found for domain $domain."
    fi

    exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
    datenow=$(date -d "now" +%s)
    days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)

    echo "Checking expiration date for $domain..."

    if [ "$days_exp" -gt "$exp_limit" ] ; then
            echo "The certificate is up to date, no need for renewal ($days_exp days left)."
            continue;
    else
            echo "The certificate for $domain is about to expire soon. Starting webroot renewal script..."
            $le_path/letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --config $config_file
            echo "Renewal process finished for domain $domain"
            continue;
    fi
done
echo "Reloading $web_service"
/usr/sbin/service $web_service reload

Enfin un petit coup de crontab pour executer le script à intervalle régulière :

sudo crontab -e

Et on y rajoute la ligne suivante pour l'execution régulière et des logs :

30 2 * * 1 /usr/local/sbin/le-renew-webroot >> /var/log/le-renewal.log


Merci beaucoup pour vos conseils éclairés ! smile

Dernière modification par billou (Le 18/05/2016, à 14:12)

Hors ligne

#7 Le 18/05/2016, à 15:06

bobe

Re : [Résolu] Comment configurer/activer SSL pour des sous domaines

billou a écrit :

Pour forcer SSL/HTTPS sur les sites, j'ai rajouté un .htaccess à la racine de chaque domaine :

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} !on
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Je privilégierais plutôt un virtualhost. Plus simple, évite l'utilisation du mod rewrite et d'un htaccess :

<VirtualHost *:80>
    ServerName mydomain.tld
    Redirect / https://mydomain.tld/
</VirtualHost>

Hors ligne

#8 Le 19/05/2016, à 14:49

billou

Re : [Résolu] Comment configurer/activer SSL pour des sous domaines

bobe a écrit :
billou a écrit :

Pour forcer SSL/HTTPS sur les sites, j'ai rajouté un .htaccess à la racine de chaque domaine :

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} !on
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Je privilégierais plutôt un virtualhost. Plus simple, évite l'utilisation du mod rewrite et d'un htaccess :

<VirtualHost *:80>
    ServerName mydomain.tld
    Redirect / https://mydomain.tld/
</VirtualHost>

Je vais essayer ça, merci pour l'astuce ! smile

Hors ligne

#9 Le 20/05/2016, à 17:37

zététix

Re : [Résolu] Comment configurer/activer SSL pour des sous domaines

Attention le Redirect ne concerne pas les sous dossiers, seulement le DocumentRoot tandis que la réécriture d'url marchera pour toutes les pages !


Aidez-moi à faire connaître mon projet : RaidGHost, un hébergeur (presque :P) gratuit et sans publicité !

Hors ligne

#10 Le 20/05/2016, à 17:58

bobe

Re : [Résolu] Comment configurer/activer SSL pour des sous domaines

C'est faux. Le Redirect est valable pour toute URL sous le préfixe indiqué.

Hors ligne