Deux sites en HTTPS sur un seul serveur (résolu)

Bonsoir tout le monde

Je me permet de venir vers vous car j’ai un petit souci avec SSL . Je suis débutant…

J’ai un serveur debian 9.1 sur lequel il y a déjà un site (SITE 1) en reverse proxy https (il s’agit d’une interface web d’un logiciel donc je ne peux pas vraiment changer la structure de page) qui tourne très bien sous apache2 sur le port 443 avec mod_ssl.

J’ai aujourd’hui installé un SITE 2, il s’agit d’un cloud Nextcloud sur ce même serveur et je souhaiterai le faire passer rapidement en HTTPS pour plus de sécurité. Seulement je ne sais pas trop comment m’y prendre pour que ce cloud soit aussi protégé en HTTPS. Si il n’y avait que le cloud se serait facile mais je souhaite également conserver mon site 1 en HTTPS.

J’ai donc eu l’idée de changer les ports. Le site 1 est donc actuellement sous le 443 et le site 2 est sous le port 445 mais pour la suite je ne sais pas du-tout comment m’y prendre. Pour le moment ça fonctionne très bien en HTTPS pour le site1 : https://domaine.com et en HTTP seul http://domaine.com:445 pour le site2.
Si quelqu’un peut m’éclairer pour ajouter le HTTPS au site2 ça serait super.

Pour information je possède un certificat SSL Gandi (celui à 12e/an) je ne sais pas non plus si je peux utiliser ce seul certificat pour les deux sites ou si il en faut un second ?

Mon serveur possède une seule adresse IP

Merci par avance

Bon tu n’as pas lancé 2 Apache, c’est déjà ça.
Tu dois pouvoir jouer avec les sous domaine pour héberger tes 2 sites sur le même port standard (443).
Un seul certificat est suffisant si tu lui spécifie tous les sous domaine à certifier.
Regarde du coté de Let’s Encrypte pour te faire des certificats gratuitement et automatiquement. Il faut vraiment pas se privé car reconnus par tous les navigateurs.

Si ton serveur doit être accessible depuis l’internet, le port 445 est un bien mauvais choix : c’est le port attribué au protocole SMB/CIFS (partage Windows), qui compte tenu de ses multiples faiblesses passées, est bloqué par la plupart des firewalls.

Voici 4 méthodes pour héberger deux sites en HTTPS sur le même serveur :

  • Utiliser deux ports différents (bof, certains proxys et firewalls n’autorisent le HTTPS que sur le port 443).

  • Utiliser deux adresses IP différentes.

  • Utiliser un seul certificat aux noms des deux sites.

  • Utiliser l’extension SNI (Server Name Indication) qui permet de présenter des certificat distincts pour chaque site aux navigateurs compatibles.

Gné ?:thinking:

J’imagine que la partie “reverse proxy https” est installée sur le virtualhost par défaut https, mais je n’ai pas bien compris la configuration, ni en quoi cette histoire de proxy pouvait gêner.
Si c’est ça:

  • Il a son certificat ok (tu m’étonnes, c’est son boulot, de livrer le certif)
  • il répond bien si tu y accèdes par https://unpremiernom.tld
  • peut être même http://ip_du_serveur (mais là, ça râle le certif)
  • en précisant 443 ou non…

C’est ça ?

Dans ce cas, je ne vois pas ce qui empêche de juste ajouter un virtualhost par le nom unautrenom.tld (ou bien nextcloud.unpremiernom.tld mais en tous cas pas besoin de nouvelle ip), que tu fais écouter sur le port 443 aussi, mais où tu utiliseras un autre certificat (ou le même, si le certif est compatible avec ce que tu auras choisi comme nom d’accés ).

Chaque host de ton apache peut utiliser sa propre clé, et tu peux définir autant de vhost que tu veux sur la même ip, en 80 ou 443.

Je ne vois pas le problème, en fait.

Le problème de fond est expliqué dans le lien que j’ai fourni. Dans le protocole HTTPS, la négociation TLS incluant la présentation du certificat par le serveur a lieu avant l’envoi de la requête HTTP qui contient le nom du site demandé par le client. Si le serveur a un certificat par site, il doit donc présenter le bon certificat avant même de savoir quel site le client demande. Impossible sans l’extension SNI.

Bonsoir à tous,

Merci pour votre aide. j’ai bien pris le temps de lire vos différentes méthodes.
@mattotop
Il n’y à pas spécialement de problèmes à l’heure actuelle, je cherche simplement la meilleure solution possible et simple pour pouvoir avoir mes deux sites en HTTPS sur le même serveur. C’est plus un manque de connaissance qu’autre chose.

Grace à @PascalHambourg je sais maintenant que mon idée de différencier les ports n’est pas terrible.
J’élimine également les deux adresses IP différentes car ça me ferait des frais supplémentaire… si je peux faire autrement tant mieux.

Voici comment j’imagine la chose idéalement…

  • Garder mon certificat actuel pour le site 1 car il est déjà payé, en place et surtout valide pour deux ans. Ça me parait plus confort à gérer que les 90 jours de validité Lets Encrypt.

  • Etant donné que mon certificat Gandi n’est pas multi-domaine, j’envisage prendre un certificat Lets Encrypt pour le site 2.

  • Pour la mise en place du certificat sur le site 2 je ne sais pas trop encore comment m’y prendre, vous me confirmez que je suis obligé de passer par l’extension SNI (Server Name Indication) ?

  • l’idée au final c’est d’avoir un schéma d’adresse comme ceci…
    domaine.com pour le site 1 et nextcloud.domaine.com pour le site 2 forcément tout les deux HTTPS, et donc sur le port 443 mais chacun son certificat.

Il reste aussi à me renseigner sur comment faire en sorte que le site2 soit accessible exclusivement à partir du sous domaine nextcloud.domaine.com et non pas à l’ensemble des sous domaines associés à mon nom de domaine.
Merci encore.

Alors je comprends théoriquement le problème présenté même si je ne connaissais pas l’intimité de la session TLS, mais dans le concret, je n’ai jamais eu à me poser la moindre question pour faire coexister des sites avec des certificats distincts.

Mais bon, c’est peut être que ça marche parceque je ne sais pas que c’est impossible ?

Bah je ne sais pas.
Mettons que tu aies une config vhost de ton site 1 du genre:

<IfModule mod_ssl.c>
        <VirtualHost *:443>
(...)
		SSLEngine on
		SSLCertificateFile      /chemin/site1-ssl-cert.pem
		SSLCertificateKeyFile /chemin/site1-ssl-cert.key
(...)
        </VirtualHost>
</IfModule>

Si tu ajoutes un nouveau vhost:

<IfModule mod_ssl.c>
        <VirtualHost *:443>
(...)
        ServerName site2.tld:443
        ServerAlias www.site2.tld
(...)
		SSLEngine on
		SSLCertificateFile      /chemin/site2-ssl-cert.pem
		SSLCertificateKeyFile /chemin/site2-ssl-cert.key
(...)
        </VirtualHost>
</IfModule>

Ça marche pas ?

Bonsoir,

Avec un peu beaucoup de retard, je reviens sur mon post pour vous annoncer que ce sujet est résolu. J’ai simplement creer un nouveau Vhost lier vers un second certificat (letsencrypt) et tout s’est bien passé.

Du coup j’ai un site monserveur.com avec un certificat Gandi et un second site sousdomaine.monserveur.com lié au certificat letsencrypt.
Pour celà j’ai utilisé la méthode de mattotop.

Merci a tous.

Bonne soirée
Clems