make then make install
La fonction principale de SSL sur Internet est de faciliter le cryptage et la confiance qui permettent à un navigateur Web de valider l’authenticité d’un site Web. Cependant, SSL fonctionne également dans l’autre sens : les certificats SSL clients peuvent être utilisés pour authentifier un client auprès du serveur Web. Pensez aux paires de clés publiques / privées SSH, si cela vous est familier. Dans cet article de blog, je vais décrire les étapes pour créer un certificat d’autorité de certification, signer un certificat de serveur et l’installer dans Apache, et créer un certificat client dans un format utilisé par les navigateurs Web.
L’installation d’un système d’exploitation et d’Apache est en dehors du champ d’application de l’article de blog et je suppose que vous avez une installation Apache fonctionnelle avant de commencer. J’utilise un système Ubuntu 12.04.4 dans cet article de blog.
Générer un certificat d’autorité de certification (CA)
La première étape consiste à générer un certificat d’autorité de certification. Ce certificat d’autorité de certification n’a pas besoin d’être généré sur votre serveur Web – il peut s’asseoir sur n’importe quelle machine que vous utiliserez pour générer des certificats SSL. Une fois créé, le certificat CA agira en tant qu’autorité de confiance pour vos certificats serveur et client. C’est l’équivalent de Verisign ou Comodos dans le monde réel de SSL, mais vous ne voudriez pas utiliser votre certificat CA pour un site Web public majeur car sa confiance ne sera pas intégrée dans les navigateurs partout.
Générez votre certificat d’autorité de certification à l’aide de cette commande:
openssl req -newkey rsa:4096 -keyform PEM -keyout ca.key -x509 -days 3650 -outform PEM -out ca.cer
Ensuite, gardez–les secrets – gardez-les en sécurité. Si quelqu’un devait mettre la main sur ces fichiers, il serait en mesure de générer des certificats de serveur et de client auxquels notre serveur Web ferait confiance, tel qu’il sera configuré ci-dessous.
Générez la clé SSL et le certificat de votre serveur Apache
Maintenant que nous avons notre certificat CA, nous pouvons générer le certificat SSL qui sera utilisé par Apache.
- Génère une clé privée de serveur.
openssl genrsa -out server.key 4096
- Utilisez la clé privée du serveur pour générer une demande de génération de certificat.
openssl req -new -key server.key -out server.req -sha256
- Utilisez la demande de génération de certificat et le certificat CA pour générer le certificat de serveur.
openssl x509 -req -in server.req -CA ca.cer -CAkey ca.key -set_serial 100 -extensions server -days 1460 -outform PEM -out server.cer -sha256
- Nettoyage – maintenant que le certificat a été créé, nous n’avons plus besoin de la demande.
rm server.req
Installez le certificat de serveur dans Apache
Mon serveur exécute Ubuntu 12.04.4, donc tous les chemins et commandes référencés ici sont pour ce système d’exploitation.
- Copiez le certificat CA dans un endroit permanent. Nous devrons spécifier notre certificat d’autorité de certification dans Apache car il s’agit d’une autorité de certification auto-générée et non d’une autorité de certification incluse dans les systèmes d’exploitation partout.
cp ca.cer /etc/ssl/certs/
- Copiez le certificat du serveur et la clé privée dans un emplacement permanent.
cp server.cer /etc/ssl/certs/server.crtcp server.key /etc/ssl/private/server.key
- Activez le module SSL dans Apache.
a2enmod ssl
- Activez le site SSL dans Apache et désactivez le site HTTP.
a2ensite default-ssla2dissite default
- Éditez /etc/apache2/sites-enabled/000-default-ssl (le fichier de configuration du site SSL activé) et ajoutez:
SSLCACertificateFile /etc/ssl/certs/ca.cerSSLCertificateFile /etc/ssl/certs/server.crtSSLCertificateKeyFile /etc/ssl/private/server.key
- Appliquez la configuration dans Apache.
service apache2 restart
À l’heure actuelle, si vous visitez votre site https, vous obtiendrez une erreur SSL similaire à « Le pair SSL n’a pas pu négocier un ensemble acceptable de paramètres de sécurité. »C’est bien, cela signifie que votre site n’acceptera pas de connexion à moins que votre navigateur n’utilise un certificat client de confiance. Nous allons en générer un maintenant.
Générer un certificat SSL client
- Générer une clé privée pour le client SSL.
openssl genrsa -out client.key 4096
- Utilisez la clé privée du client pour générer une demande de certificat.
openssl req -new -key client.key -out client.req
- Émettez le certificat client à l’aide de la demande de certificat et du certificat/clé CA.
openssl x509 -req -in client.req -CA ca.cer -CAkey ca.key -set_serial 101 -extensions client -days 365 -outform PEM -out client.cer
- Convertissez le certificat client et la clé privée au format pkcs #12 pour une utilisation par les navigateurs.
openssl pkcs12 -export -inkey client.key -in client.cer -out client.p12
- Nettoyage – supprime les fichiers de clé privée client, de certificat client et de demande client car le pkcs12 a tout le nécessaire.
rm client.key client.cer client.req
Cela ressemble à un processus assez similaire à la génération d’un certificat de serveur, hein?
Enfin, importez le.fichier p12 dans votre navigateur. Sous Windows, vous pouvez double-cliquer sur le fichier à importer dans le magasin de clés du système d’exploitation qui sera utilisé par IE et Chrome. Pour Firefox, ouvrez les Options -> Avancé -> Certificats – > Afficher les certificats -> Vos certificats et importez le certificat.
Maintenant, visitez votre site Web avec le navigateur où vous avez importé le certificat client. Vous serez probablement invité à indiquer le certificat client à utiliser – sélectionnez-le. Ensuite, vous serez authentifié et autorisé à entrer!