Certificat SHA-2 SSL serveur apache avec authentification forte sur Raspberry

SSL Apache RaspberryJ’ai passé un peu de temps pour trouver la bonne façon de créer un certificat SSL pour mon serveur apache sur Raspberry PI. Il y a beaucoup d’informations sur Internet pour un ou deux de mes besoins, mais je n’ai rien trouvé qui explique comment satisfaire toutes mes exigences… Alors je me suis lancé …

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 :

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 🙂

Une réflexion au sujet de « Certificat SHA-2 SSL serveur apache avec authentification forte sur Raspberry »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *