Let's Encrypt existant + HA + Apache

Mon problème

Bonjour,
J’essaye depuis des heures de trouver un moyen d’activer SSL/TLS sur HA afin de pouvoir le reverse proxy avec Apache sur un de mes sous-domaines.
Ayant l’habitude de ce genre de manipulation, je sais qu’il faut configurer les VirtualHost 80 et 443 (avec mon certificat wildcard), et input ces mêmes certificats au service à proxy pour que tout aille bien.
Mon problème réside dans cette dernière étape, je ne trouve aucun moyen de paramétrer HA pour pouvoir l’utiliser en HTTPS pour le proxy à mon sous-domaine.
Ma configuration Apache est correcte (j’utilise le même modèle fonctionnel à chaque fois), mais j’obtiens une SSL Handshake (500 Proxy Error) car j’essaye évidemment de forward mon sous-domaine HTTPS vers un service en HTTP.

J’ai essayé le plug-in Let’s Encrypt (inutile dans mon cas à ce que j’ai compris, car j’ai déjà les certificats), et je ne veux pas utiliser DuckDNS/FreeboxOS/NGINX/tout ce que j’ai pu voir d’autre, car j’ai déjà mon domaine et mon serveur Apache pour gérer tous mes autres services.

(L’installation est toute neuve d’aujourd’hui, c’est une des premières choses que j’essaye de configurer après le setup des premières intégrations).

Puis-je avoir vos lumières svp ?

Ma configuration

version core-2022.2.9
installation_type Home Assistant Supervised
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.7
os_name Linux
os_version 5.10.92-v7+
arch armv7l
timezone Europe/Paris
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Raspbian GNU/Linux 11 (bullseye)
update_channel stable
supervisor_version supervisor-2022.01.1
docker_version 20.10.12
disk_total 58.2 GB
disk_used 33.3 GB
healthy true
supported failed to load: Unsupported
supervisor_api ok
version_api ok
installed_addons RPC Shutdown (2.2), File editor (5.3.3)
Lovelace
dashboards 1
resources 0
mode auto-gen

Salut

Il n’y a rien qui interdit de faire du reverse-proxy entre du https et du http… C’est d’ailleurs très courant comme usage.
405 c’est que ta config est justement pas fonctionnelle …

1 « J'aime »

Je suis plus nginx, mais dans le doute ce serait pas mal que tu partages ton vhost apache, et le bloc « http » de ton configuration.yaml côté HA :wink:

@Pulpy-Luke pardon, erreur 500 j’ai corrigé
@Pulpy-Luke et @Herbs voici ma config :

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
	ServerName hass.domain.com

	RewriteEngine on
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

/etc/apache2/sites-available/000-default-le-ssl.conf

<VirtualHost *:443>
	ServerName hass.domain.com

	Timeout 5400
	ProxyTimeout 5400
	SSLProxyEngine On
	SSLProxyVerify None
	SSLProxyCheckPeerCN Off
	SSLProxyCheckPeerName Off
	SSLProxyCheckPeerExpire Off
	ProxyPass / https://localhost:8123/
	ProxyPassReverse / https://localhost:8123/

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	# Let's Encrypt
	SSLCertificateFile /etc/letsencrypt/live/domain.com/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
	Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

Je fais cette combinaison à chaque fois et ça marche parfaitement

HA ça utilise aussi du websocket, donc au mieux c’est une config incomplète. Regarde et adapte l’exemple plus haut

1 « J'aime »

@Pulpy-Luke @Herbs c’est bon !

En suivant ton tuto et ses commentaires ça fonctionne enfin.
Je suis juste pas très fier de mes réglages proxy (j’ai ajouté ::1 parce que le log de HA me disait que ce proxy était pas trust)

http:
    use_x_forwarded_for: true
    trusted_proxies:
        - 192.168.1.254 # routeur
        - 192.168.1.100 # localhost
        - ::1 # "tout le monde"

Si quelqu’un veut les VirtualHost un jour :
000-default.conf

<VirtualHost *:80>
	ServerName hass.domain.com

	RewriteEngine on
	RewriteCond %{HTTPS} !=on
	RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

000-default-le-ssl.conf

<VirtualHost *:443>
	ServerName hass.domain.com

	ProxyPreserveHost On
	ProxyRequests Off
	ProxyPass /api/websocket ws://localhost:8123/api/websocket
	ProxyPassReverse /api/websocket wss://localhost:8123/api/websocket
	ProxyPass / http://localhost:8123/
	ProxyPassReverse / http://localhost:8123/

	RewriteEngine on
	RewriteCond %{HTTP:Upgrade} websocket [NC]
	RewriteRule ^/?(.*)  ws://localhost:8123/$1 [P,L]

	<Location "/">
		Satisfy any
	</Location>
	<Location "/api">
		Satisfy any
	</Location>

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	# Let's Encrypt
	SSLCertificateFile /etc/letsencrypt/live/domain.com/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
	Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

Et ne pas oublier le sudo a2enmod proxy_wstunnel :wink:

2 « J'aime »

Tu peux effectivement faire mieux : puisque tu as accès aux logs de HA, retour la seule adresse qui coince et met là

C’est justement ::1 qu’il me retourne !

2022-02-21 21:33:01 ERROR (MainThread) [homeassistant.components.http.forwarded] Received X-Forwarded-For header from an untrusted proxy ::1

Tu as pas l’ip v6 activé par hasard ?

À quel niveau ? Mon raspberry est en ethernet et j’ai jamais bloqué les IPv6 nulle part

Là je pense que le lien entre ton apache et HA passe par l’ip V6 de ton pi :

A la fin de /etc/sysctl.conf
ajoute

net.ipv6.conf.all.disable_ipv6=1

Reboot et reteste

Ça va pas bloquer les connexions entrantes en v6 ? Et je reboot le Pi pas HA j’imagine

L’ip v6 à notre niveau ça sert à rien…

C’est vraiment grave de garder ::1 juste pour HA…?
Je comprends mais je trouve ça bête de sacrifier l’IPv6 (futureproof à long terme même si c’est un bien grand mot) « juste » pour ça…

Fondamentalement c’est pas grave mais entre « autoriser n’importe quelle ip » et donc se passer d’un niveau de sécurité un peu plus élevé dès maintenant et garder une option ip v6 qui sert à rien, personnellement mon choix est vite fait.

Je vois. Je me déciderai plus tard, merci à vous deux pour l’aide !