Liste de mes besoin :
- Communication encrypté entre le client (utilisateur) et le serveur apache.
- Pas d’avertissement ou de message d’erreur disant que mon certificat n’est pas reconnu
- Un beau cadena vert dans ma page web
- Authentification avec soit :
- certificat client
- ou alors :
- ou « Basis authentification » avec nom d’utilisateur et mot de passe
- 100% gratuit €€€ !
La dernière exigence « totalement gratuite » nécessite des concessions, car cela signifie que vous ne n’allez pas payer une autorité de certification pour avoir votre certificat signé et donc automatiquement validé par votre navigateur. Pour cela vous allez créer votre propre autorité de certification et vous allez l’ajouter à votre navigateur. Ne vous inquiétez pas ce n’est rien de compliqué et cela permet de vraiment sécuriser votre connexion….
Voici les référence qui mon aidé à arriver a mes fins :
- Générer un certificat auto-signé robuste
- Authentification forte par certificats
- konstruktoid.net
- httpd.apache.org (ça c’est la bible 🙂 )
- magdiblog.fr
Les étapes suivante nécessite que vous ayez déjà votre serveur apache installé sur votre raspberry, si ce n’est pas le cas vous pouvez vous reporter aux lien suivant : Installer un serveur web sur votre Raspberry
Etape 1 : Créer sa propre autorité de certification
Pour pouvoir utiliser des certificat SSL nous allons besoin de créer une autorité de certification ou « de confiance ». Cette autorité (que nous seul connaissons) va signer l’ensemble des certificats dont nous aurons besoin et ainsi permettra de valider que le connexion peux se faire en toute confiance et sécurité.
Pour cela, se connecter sur votre Raspberry en root puis :
mkdir /etc/apache2/cert cd /etc/apache2/cert openssl genrsa -des3 -out ca.key 2048 -sha512 openssl req -new -key ./ca.key -out ./ca.csr openssl x509 -req -days 3650 -in ./ca.csr -out ./ca.crt -signkey ./ca.key -sha512 openssl x509 -in ca.crt -text openssl rsa -in ca.key -pubout -out ca.public.key
3650 correspond au nombre de jours pendant lesquels votre certificat sera valide, vous pouvez adapter si besoin.
Lors de cette étapes on va vous demander plusieurs fois un « pass phrase », je vous conseille (du moins pour les tests) d’utiliser toujours le même. Il faudra vous en souvenir pour les étapes suivantes. il faut un minimum de 4 caractères.
Lors du choix du « Common Name » vous pouvez mettre quelque chose comme « Ma super autorité de confiance » ou ce que vous voulez. Sachez que ce nom s’affichera à chaque vois que vous utiliserez un certificat client.
Etape 2 : Création du certificat serveur
Maintenant que nous avons une autorité de certification nous allons créer un certificat pour le serveur et celui-ci sera signé par notre nouvelle autorité.
openssl genrsa -des3 -out server.key 2048 openssl req -new -key ./server.key -out server.csr -sha512 openssl x509 -req -in ./server.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out ./server.crt -days 3650 -sha512 openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name "Server certificate" openssl pkcs12 -info -in server.p12 openssl rsa -in server.key -pubout -out server.public.key openssl rsa -in server.key -out server.nopassphrase.key
Ici pour le « Common Name » vous devez absolument mettre l’url que vous utilisez pour vos connecter sur votre serveur (sans le https:// ).
- Si vous n’y accédez que depuis votre réseau local se sera peu être quelque chose comme :
- pi, raspberry, …
- Si vous y accédez via internet ce sera l’url (sans https://).
- par exemple free propose des adresse comme xxxxx.hd.free.fr gratuitement
Ce point est très important car le certificat que l’on va créer se basera sur l’url utilisé pour authentifié la connexion avec le serveur.
Etape 3 : Création du certificat client
Ce point permet de sécuriser la connexion et de valider que l’utilisateur (client) possède bien lui aussi un certificat signé par la même autorité (celle que nous avons créé à l’étape 1). Avec la configuration de serveur que nous allons faire sur les étapes prochaines cela va également permettre de ne pas avoir à fournir de nom d’utilisateur de de mot de passe lors de la connexion.
openssl genrsa -des3 -out client.key 2048 openssl req -new -key ./client.key -out client.csr -sha512 openssl x509 -req -in ./client.csr -CA ./ca.crt -CAkey ./ca.key -CAcreateserial -out ./client.crt -days 3650 -sha512 openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 -name "Client certificate" openssl pkcs12 -info -in client.p12 openssl rsa -in client.key -pubout -out client.public.key
Dans ce cas pour le « Common Name » vous pouvez mettre le nom de l’utilisateur pour qui le certificat est destiné, par exemple Robert, Admin, ou toto…
Vous pouvez créer autant de certificat que vous avez besoin, remplacer seulement dans les lignes du dessus « client » par « client1 » ou Robert (ce qui est encore mieux… )
Prochaine étape : Configurer apache pour utiliser SSL et ces certificats..
Cet article vous a plus? Laissez un commentaire 🙂