Créer un certificat SSL autosigné avec Apache2

Photographie ultra-rapide, pilotage d'imprimante 3D ou de CNC, fabrication de bière.... Enfin tout ce que le Raspberry peut gérer trouvera sa place dans cette rubrique

Modérateur : Francois

Répondre
RaphV57
Messages : 3
Enregistré le : mer. 6 févr. 2019 16:45

Créer un certificat SSL autosigné avec Apache2

Message par RaphV57 » mar. 28 déc. 2021 23:44

Bonjour,

J'ai 2 raspberry Pi 3B+ pour ma domotique Jeedom. Un raspberry est en prod depuis plusieurs années en Debian 9 et je souhaite configurer l'autre pour pièce rechange avec Debian 10 Buster.

La procédure suivante que j'avais pu réaliser il y a quelques années ne fonctionne pas sur mon raspberry de rechange. J'imagine que la version 10 y est pour quelque chose.
https://www.techrepublic.com/article/ho ... r-apache2/

A un moment de la procédure, il faut redémarrer apache2 mais le message suivant apparait :
"Warning: The unit file, source configuration file or drop-ins of apache2.service changed on disk. Run 'systemctl daemon-reload' to reload units."

Effectivement, "systemctl daemon-reload" peut parfois aider à redémarrer. D'autre fois j'ai "Failed to restart apache2.service: Access denied
See system logs and 'systemctl status apache2.service' for details". Mais au final le service ne fonctionne pas.

En effet, à l'étape où l'on remplace les certificats dans le fichier "000-default-ssl.conf", je perds l'accès local à mon serveur domotique.
Je dois remettre ceux d'origine (ssl-cert-snakeoil.pem et ssl-cert-snakeoil.key) pour me connecter en local.


Il y a bien des tuto sur des moyens alternatifs d'obtenir un certificat SSL avec notamment avec let'sencrypt mais cela implique de posséder un nom de domaine. J'aimerai éviter, je me connecte avec mon ip publique fixe

Merci d'avance à ceux qui pourraient m'aider à faire fonctionner cela

piper
Raspinaute
Messages : 658
Enregistré le : sam. 5 juin 2021 18:57

Re: Créer un certificat SSL autosigné avec Apache2

Message par piper » jeu. 30 déc. 2021 09:21

Bonjour,
Le problème ni vient ni de RaspiOS, ni d'apache, ni de la méthode que tu emplois
Elle vient des navigateurs internet.

En effet, depuis une mise à jour récente (ça date de 2 ans je crois), les navigateurs n'acceptent plus les certificat qui ne sont pas FQN, que ce soit sur le réseaux local ou pas.
Je n'ai pas trouvé le moyen de faire accepter proprement (sans taper dans la config des navigateurs) à Firefox, Chrome, Opera et pire encore Safari, un certificat non FQN
La seule chose que je n'ai pas essayé est de mettre un DNS sur mon réseau local mais je ne suis pas sur que cela suffirait car un hostname ne suffit pas.

Si vous trouvez une solution, elle m'intéresse au plus haut point. En effet, j'ai une appli ethernet de gestion qui se voit privée depuis 2 ans de fonctionnalités avancés par les navigateurs du fait qu'elle n'est plus en https : Ex copier/coller par l'utilisateur de lignes complètes dans une base de données en une seule étape, menu contextuel (clic droit) spécifique au site.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

RaphV57
Messages : 3
Enregistré le : mer. 6 févr. 2019 16:45

Re: Créer un certificat SSL autosigné avec Apache2

Message par RaphV57 » jeu. 30 déc. 2021 22:02

Salut Piper et merci de ta réponse.
Et pourtant, mon serveur qui tourne actuellement fonctionne ainsi. Je suis par contre obligé de prendre Chrome et, une fois par mois je crois, le forcer à continuer vers le site quand il affiche un avertissement.

Que faut-il vérifier pour savoir si c'est Apache2 qui crée ne prend pas mon certificat?

piper
Raspinaute
Messages : 658
Enregistré le : sam. 5 juin 2021 18:57

Re: Créer un certificat SSL autosigné avec Apache2

Message par piper » jeu. 30 déc. 2021 22:55

Apache2, comme tous les services génère des log (à moins que tu ne les ai désactivé pour économiser ta carte sd, ce que je fais)
Je suis plutôt spécialiste de redhat / Fedora / CentOs pour lesquels c'est dans /var/log/httpd
Pour Debian et clones ce doit être dans /var/log/apache2/

La dedans tu as des logs :
- d'accès aux pages
- d'erreurs d'accès aux pages (genre page introuvable)
- d'accès SSL (handshake)
- d'erreur SSL

Pour chaque cas, tu peux désactiver la log mais par défaut elles sont là
Le nom des fichier est hyper explicite (access, ssl_error, error, etc...)
Le nom des fichiers de log est spécifié dans ton apache2.conf pour la racine, dans tes fichiers vhosts si tu en as, et dans ssl.conf

Mais 9 contre un que apache n'y est pour rien dans ton problème.
Pour je n'ai rien sans ssl_error
des choses dans error_log mais qui n'ont rien à voir (redémarrage du service, page web non trouvées)

Et mon navigateur web (Firefox) dit qu'il refuse le certificat car ce dernier ne fournit pas d'informations sur son propriétaire. Ce qui est vrai, c'est un certificat pour la zone locale pour lequel il ne m'a été demandé aucune information.
Il est vrai que sur un certificat SSL d'un serveur FQN fournis par Let'sEncrypt (ou un autre service), tu dois, pour l'obtenir fournir des informations t'identifiant (email à minima et qui sera vérifié, de même il sera vérifié que tu es bien propriétaire du serveur (ou environnement web) pour lequel tu veux ce certificat soit via enregistrement DNS particulier, soit via dépôt d'un fichier dans ton arborescencede site sur le serveur )

Sinon, un nom de domaine c'est par exemple 8,39 € TTC/an chez Ovh.
Avec tu bénéficies aussi d'un service dyndns si tu IP n'est pas fixe, et tu peux personnaliser ta zone DNS à ta convenance.

Le soucis dans mon cas est que l'application ethernet en question est trop sensible, il est hors de question que les pages soient accessibles par internet (la règlementation dans ce domaine l'interdit purement et simplement). J'ai bien demandé la possibilité qu'il ait un accès internet 1 minute tous les ans pour renouveler un certificat FQN : c'était niet.
Et il existe une boite US qui vend des certificats SSL pour des services locaux (en réseau interne) mais la direction a peur d'y investir, (ils ne s'y connaissent pas et craignent une arnaque) Donc tant pis, les fonctions évoluées de l'applicatif web sont inaccessibles.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: Créer un certificat SSL autosigné avec Apache2

Message par Artemus24 » sam. 1 janv. 2022 00:11

Salut à tous.

Bonne Année, Bonne Santé, Mes Meilleurs Voeux pour 2022.

Tu as raison, Piper, ce sont bien les navigateurs qui refusent les certificats s'ils sont auto-signés.
J'utilise un certificat Let's Encrypt, comme toi, pour interdire l'accès depuis internet à mon site.
En effet, je suis propriétaire d'un nom de domaine en ".fr" à 10.80€ TTC / an.
Pour y accéder, il faut mon certificat qui est installé par défaut dans mon windows, ainsi que dans WampServer.

Il existe des noms de domaines, comme no-ip, que j'ai utilisé avant de m'en acheté un.
Il y a peut-être moyen en passant par let's encrypt de créer un certificat.
Je n'ai pas testé, donc je ne sais pas si c'est possible.

J'utilise encore un certificat auto-signé pour des accès en local, comme "localhost", "phpmyadmin", "phpsysinfo" et "mon-forum".
Tu peux au niveau du paramétrage dans apache dire ce que tu veux comme résultat.
Voici la déclarative général dans mon apache :

Code : Tout sélectionner

# ====================================== #
#     Module SSL                         #
# ====================================== #

LoadModule ssl_module                  modules/mod_ssl.so

<IfModule ssl_module>
	# -------------------- #
	# Strong SSL protocols #
	# -------------------- #
#
	SSLRandomSeed startup builtin
	SSLRandomSeed connect builtin
	SSLPassPhraseDialog   builtin
#
	SSLProtocol -All +TLSv1.2 +TLSv1.3
	SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
#
	SSLHonorCipherOrder On
	SSLSessionTickets   Off
	SSLCompression      Off
#
#	SSLOCSPEnable       on
</IfModule>
Et ce qui est spécifique à un de mes sites local :

Code : Tout sélectionner

# ========================== #
#     Localhost avec SSL     #
# ========================== #

<VirtualHost 127.0.0.1:443  [::1]:443>
	ServerName localhost
	DocumentRoot "${repertoire}/www"
#
	ErrorLog  "${repertoire}/www/Logs/error.log"
	CustomLog "${repertoire}/www/Logs/custom.log" combinedio
#
	SSLEngine on
	SSLCertificateFile    "${SRVROOT}/conf/Certificat/artemus/Server/artemus.crt"
	SSLCertificateKeyFile "${SRVROOT}/conf/Certificat/artemus/Server/artemus.key"
#
	SSLCACertificatePath  "${SRVROOT}/conf/Certificat/Ca"
	SSLCACertificateFile  "${SRVROOT}/conf/Certificat/Ca/Ca.crt"
#
	SSLVerifyClient require
	SSLVerifyDepth  10
	SSLOptions +StdEnvVars +FakeBasicAuth +ExportCertData +StrictRequire
#
	<Directory />
		Options -Indexes +FollowSymLinks +MultiViews
		AllowOverride none
		Require local
#		SSLRequire %{SSL_CLIENT_S_DN_UID} eq "Gordon"
	</Directory>
#
	php_value default_charset none
#
	BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>
A toi de tester dans ton apache.

Le certificat est installé dans le navigateur Firefox et aussi dans les options internet de windows.
Quand je dis mon certificat, en fait, j'en ai deux.
Un sous le nom "Artemus & Cie" et l'autre sous le Nom "Artemus".
Le navigateur m'indique que la connexion est sécurisée et le certificat est valide.

Une remarque au sujet du titre. Ce n'est pas avec Apache que l'on crée un certificat, mais c'est avec lui qu'on l'utilise.

Cordialement.
Artemus24.
@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

Répondre

Retourner vers « Les applications spécialisées du Raspberry Pi »