Avec Apache HTTP Server, nous pouvons publier nos pages Web avec HTTPS (Hypertext Transfer Protocol Secure). Ici, nous allons voir comment faire.
Introduction
Actuellement, presque aucune page Web n’utilise HTTP. La plupart utilisent HTTPS. HTTPS est un protocole sécurisé qui sert (entre autres) à crypter les communications entre le client et le serveur.
Exigences précédentes
Nous avons besoin d’un serveur HTTP Apache installé et démarré.
Configuration
Installation d’outils
Nous aurons besoin d’installer deux outils, avec les commandes suivantes :
Éditeur Vi:
apt install -y vim
Navigateur Web de la console Links:
apt install -y links
Configuration du serveur HTTP Apache
Et maintenant, nous configurons Apache HTTP Server:
Nous activons le module Apache SSL:
a2enmod ssl
Et nous créons la configuration SSL avec:
a2ensite default-ssl
On démarre le serveur Apache avec:
service apache2 start
Ou on redémarre le serveur avec:
service apache2 restart
Création et configuration de certificats
Nous devons créer et configurer des clés et des certificats pour deux types d’entités:
- L’Autorité de Certification (CA).
- Le serveur Web dans lequel nous allons configurer HTTPS.
Autorité de Certification (CA)
Nous créons la clé de l’Autorité de Certification:
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537 -out cakey.pem
Nous faisons en sorte que la CA auto-signe son propre certificat:
openssl req -new -x509 -key cakey.pem -out cacert.pem -days 365
Il nous demandera ces données:
- Country Name (2 letter code) [AU]:ES
- State or Province Name (full name) [Some-State]:Madrid
- Locality Name (eg, city) []:Madrid
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
- Organizational Unit Name (eg, section) []:MySection
- Common Name (e.g. server FQDN or YOUR name) []:localhost
- Email Address []:me@myemail.com
En ce moment, nous avons ces deux éléments:
- La clé CA (cakey.pem).
- Le certificat auto-signé par l’Autorité de Certification, c’est-à-dire nous-mêmes (cacert.pem).
Nous avons maintenant besoin de certains répertoires pour que cette autorité signe le certificat Web.
mkdir demoCA
mkdir demoCA/certs
mkdir demoCA/crl
mkdir demoCA/newcerts
mkdir demoCA/private
touch demoCA/index.txt
echo 02 > demoCA/serial
mv cacert.pem demoCA/
mv cakey.pem demoCA/private/
Et avec cela, nous avons déjà les fichiers de l’Autorité de Certification (CA).
Serveur Web
Nous créons une paire de clés:
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537 -out privkey-localhost.pem
Nous créons la demande de signature de certificat:
openssl req -new -key privkey-localhost.pem -out certreq-localhost.crs
Il nous demandera ces données:
- Country Name (2 letter code) [AU]:ES
- State or Province Name (full name) [Some-State]:Madrid
- Locality Name (eg, city) []:Madrid
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
- Organizational Unit Name (eg, section) []:MySection
- Common Name (e.g. server FQDN or YOUR name) []localhost
- Email Address []:me@myemail.com
Nous n’entrons pas de valeur lors de la demande de Challenge password ou Optional company name.
Maintenant, nous envoyons la demande à l’Autorité de Certification et elle (nous) émettrons un certificat:
openssl ca -in certreq-localhost.crs -out cert-localhost.pem
Et puis nous répondons à tout avec “y”.
Nous configurons maintenant Apache pour utiliser ces certificats.
Tout d’abord, nous vérifions:
openssl verify -CAfile demoCA/cacert.pem cert-localhost.pem
Le système répond avec:
cert-localhost.pem: OK
Configuration de Apache HTTP Server pour utiliser SSL
Nous copions les fichiers importants:
cp cert-localhost.pem /etc/ssl/certs/
cp demoCA/cacert.pem /etc/ssl/certs/
cp privkey-localhost.pem /etc/ssl/private/
Nous éditons la configuration Apache SSL:
vi /etc/apache2/sites-available/default-ssl.conf
Nous modifions ces deux lignes avec le chemin de nos fichiers:
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
Pour ces:
SSLCertificateFile /etc/ssl/certs/cert-localhost.pem
SSLCertificateKeyFile /etc/ssl/private/privkey-localhost.pem
Après ces deux, nous en introduisons un nouveau:
SSLCACertificateFile /etc/ssl/certs/cacert.pem
Nous avons enregistré et laissé Vi avec “:wq”.
Maintenant, nous effectuons un rechargement pour charger la configuration:
service apache2 reload
Si nous obtenons une erreur car le serveur est éteint, nous le démarrons avec:
service apache2 start
Test
Nous testons comme suit (à l’aide de la console de commande et du navigateur Web texte “Links” au lieu d’un navigateur Web graphique):
Nous chargeons l’URL sans HTTPS:
links http://localhost
Ensuite, nous faisons face à l’URL avec HTTPS:
links https://localhost
Il nous dira que le certificat est invalide (parce que nous l’avons créé nous-mêmes). Cliquez sur Oui et la page se chargera sans problème.
Remarque : Pour éviter ce message et pouvoir utiliser un navigateur Web courant comme Google Chrome sans aucun message d’alerte, nous avons besoin d’une autorité de certification pour valider le certificat que nous avons créé
So, what do you think ?