Je vais faire un tuto SSL,
En voilà un pour Wampserver, qui fonctionne pour Apache 2.4.27 à 2.4.37 en 32 et 64 bit.
Il est (presque) totalement mâché, y'a juste à bien lire et suivre.
-----------------------------------------------
Avant de débuter la procédure SSL https sous Wampserver, il y a des prérequis à effectuer impérativement :
-- Appliquer Wamserver update 3.1.6
-- Remettre les fichiers libcrypto... et libssl... d'origine de la version apache utilisée :
Dans le dossier wamp(64)/bin/apache/original_libcrypto_libssl/ choisir et ouvrir le dossier qui correspond à la version Apache utilisée, par exemple apache2.4.37_x64 pour Apache 2.4.37 64bit puis copier les deux fichiers dll qui s'y trouvent dans le dossier wamp64/bin/apache/apache2.4.37/bin/ en écrasant les fichiers ou liens symboliques qui s'y trouvent.
Bien vérifier que les fichiers ont bien été copiés en vérifiant la taille qui ne doit pas être 0, sinon, supprimer les liens symboliques de destination avant d'effectuer la copie.
-- Procédure expliquée pour wampserver installé dans j:\wamp et pour apache 2.4.37
Modifiez les chemin et version en fonction de votre installation
Nota : Cette procédure fonctionne pour Apache 2.4.27 à 2.4.37 en 32 et 64 bit
-- Wampserver doit être arrêté, donc les services stoppés.
-- Modification du fichier j:\wamp\bin\apache\apache2.4.37\conf\httpd.conf
Remplacez
# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
par
# Secure (SSL/TLS) connections
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
Include conf/extra/httpd-ssl.conf
</IfModule>
De cette manière, le fichier conf/extra/httpd-ssl.conf ne sera chargé que si le module ssl_module est activé
Pour activer https SSL, il faut dans httpd.conf charger les deux modules :
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
On n'activera le chargement de ces modules qu'après avoir effectuer toute la procédure de création des clés et s'être assuré que les VirtualHost fonctionnent correctement en httpd port 80.
En effet, comme on peut le lire dans les commentaires du fichier httpd-ssl.conf :
# Lorsque nous utilisons SSL, nous devons écouter le port HTTP standard et le port HTTPS.
-- Remplacement du fichier J:\wamp\bin\apache\apache2.4.37\conf\extra\httpd-ssl.conf
Pour obtenir des informations, lire les commentaires du fichier d'origine.
Par la suite, vous pourrez relire les informations qui seront toujours dans le fichier original :
j:\wamp\bin\apache\apache2.4.37\conf\original\extra\httpd-ssl.conf
qui n'aura pas été modifié.
Remplacer tout le contenu du fichier J:\wamp\bin\apache\apache2.4.37\conf\extra\httpd-ssl.conf par :
#
# This is the Apache server configuration file providing SSL support.
# When we also provide SSL we have to listen to the
# standard HTTP port and to the HTTPS port
#
Listen 0.0.0.0:443 https
Listen [::0]:443 https
# SSL Cipher Suite:
SSLCipherSuite HIGH:!RSA:!RC4:!3DES:!DES:!IDEA:!MD5:!aNULL:!eNULL:!EXP
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets on
# SSL Protocol support:
SSLProtocol all -SSLv2 -TLSv1 -TLSv1.1 -SSLv3
# Pass Phrase Dialog:
SSLPassPhraseDialog builtin
# Inter-Process Session Cache:
SSLSessionCache "shmcb:${INSTALL_DIR}/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
##
## SSL Virtual Host Context
##
<VirtualHost *:443>
ServerName MYSITEname
DocumentRoot "${INSTALL_DIR}/www/MYSITEdir"
ServerAdmin webmaster@MYSITEname.net
ErrorLog "${INSTALL_DIR}/logs/error.log"
TransferLog "${INSTALL_DIR}/logs/access.log"
SSLEngine on
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile "${SRVROOT}/conf/Certs/Site/MYSITEname.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/Certs/Site/MYSITEname.key"
SSLCACertificateFile "${SRVROOT}/conf/Certs/Cacerts/Ca.crt"
#
SSLVerifyClient none
SSLVerifyDepth 10
<Directory "${INSTALL_DIR}/www/MYSITEdir/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride all
Require local
</Directory>
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
CustomLog "${INSTALL_DIR}/logs/custom.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
Le VirtualHost doit déjà exister et être valide en http port 80, donc exister dans le fichier :
J:\wamp\bin\apache\apache2.4.37\conf\extra\httpd-vhosts.conf
Il faut modifier toutes les lignes où il y a MYSITE pour y mettre vos propres données et paramètres.
-- Remplacer tout le contenu du fichier J:\wamp\bin\apache\apache2.4.37\conf\openssl.cnf
par
#============ openssl.cnf =============#
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = ./Certs
certs = $dir/Cacerts
new_certs_dir = $dir/NewCerts
private_dir = $dir/Private
database = $dir/Other/index.txt
serial = $dir/Other/serial.txt
certificate = $certs/Ca.crt
private_key = $private_dir/Ca.key
RANDFILE = $private_dir/Ca.rnd
default_days = 1830
default_crl_days = 30
default_md = md5
preserve = no
policy = policy_anything
[ policy_match ]
countryName = match
stateOrProvinceName = match
localityName = match
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 4096
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
#===========================#
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = FR
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Ile de France
localityName = Locality Name (eg, city)
localityName_default = Paris
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Otomatic & Cie
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default =
commonName = Common Name (eg, your website’s domain name)
commonName_max = 64
emailAddress = Email Address
emailAddress_default = webmaster@aviatechno.net
emailAddress_max = 40
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
#===========================#
[ x509v3_extensions ]
basicConstraints=CA:TRUE
nsComment = "OpenSSL Generated Certificate"
# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
#===========================#
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
#===========================#
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = CA:true
Ouvrir une fenêtre de commande "en tant qu'administrateur"
Et dans cette fenêtre taper les lignes suivantes.
Vous pouvez effectuer des copier/coller par blocs de plusieurs lignes, sans oublier qu'une ligne vide doit être à la fin du groupe de lignes.
Il ne faut jamais fermer la fenêtre de commande avant la fin complète de la procédure, sinon les variables d'environnement précédemment déclarées par set seraient perdues.
Rem
Rem Variables d'installation de Wampserver
Rem À modifier suivant votre installation
set installdir=j:\wamp
set apachever=2.4.37
Rem
Rem Vérification et création éventuelle des dossiers
cd /D %installdir%\bin\apache\apache%apachever%\conf
if not exist Certs md Certs
cd Certs
if not exist Private md Private
if not exist Cacerts md Cacerts
if not exist Server md Server
if not exist Site md Site
cd..
cd..
cd bin
Suite des commandes
Rem
Rem On est dans le dossier %installdir%\bin\apache\apache%apachever%\bin
Rem Déclaration des variables - Impératif
set openssl_conf=%installdir%\bin\apache\apache%apachever%\conf\openssl.cnf
set DIRCERTS=%installdir%\bin\apache\apache%apachever%\conf\Certs
Rem +-+-+-+-+ Création du certificat auto-signé +-+-+-+-+
Rem 1- Génération d'un nombre aléatoire. (La graîne 1351 peut être remplacée)
openssl rand -out %DIRCERTS%/Private/Ca.rnd -base64 1351
Rem 2- Clé RSA privée.
openssl genrsa -out %DIRCERTS%/Private/Ca.key -rand %DIRCERTS%/Private/Ca.rnd 4096
Rem 3- Demande de signature.
Rem /C=FR : Pays -- /ST=Ile de France : État ou région -- /L=Paris : Ville
Rem /O=Otomatic & Cie : Organisation -- /CN=Otomatic & Cie : Division
openssl req -new -sha256 -key %DIRCERTS%/Private/Ca.key -out %DIRCERTS%/Cacerts/Ca.csr -subj "/C=FR/ST=Ile de France/L=Paris/O=Otomatic & Cie/CN=Otomatic & Cie"
Rem 4- Certificat auto-signé.
openssl x509 -req -days 1830 -sha256 -in %DIRCERTS%/Cacerts/Ca.csr -signkey %DIRCERTS%/Private/Ca.key -out %DIRCERTS%/Cacerts/Ca.crt
Rem 5- Extraction clé publique.
openssl rsa -in %DIRCERTS%/Private/Ca.key -pubout -out %DIRCERTS%/Private/Ca.pbc
Rem +-+-+-+-+ Fin de la création du certificat auto-signé +-+-+-+-+
Suite des commandes
Rem +-+-+-+-+ Certificats et clés serveur pour un site local +-+-+-+-+
Rem 6- ServerName du site local pour lequel on veut les clés
set SERVLOCAL=aviatechno
Rem 7- Nombre aléatoire (Graîne différente)
openssl rand -out %DIRCERTS%/Server/Server.rnd -base64 1677
Rem 8- Clé RSA privée.
openssl genrsa -out %DIRCERTS%/Server/Server.key -rand %DIRCERTS%/Server/Server.rnd 4096
Rem 9- Demande de signature pour certificat ServerName
Rem /C=FR : Pays -- /ST=Ile de France : État ou région -- /L=Paris : Ville
Rem /O=Otomatic & Cie : Organisation -- /CN=nom du site local
openssl req -new -sha256 -key %DIRCERTS%/Server/Server.key -out %DIRCERTS%/Server/Server.csr -subj "/C=FR/ST=Ile de France/L=Paris/O=Otomatic & Cie/CN=%SERVLOCAL"
Rem 10- Demande de signature pour certificat serveur.
openssl x509 -req -days 4383 -sha256 -in %DIRCERTS%/Server/Server.csr -CA %DIRCERTS%/Cacerts/Ca.crt -CAkey %DIRCERTS%/Private/Ca.key -CAcreateserial -out %DIRCERTS%/Server/Server.crt
Rem 11- Certificat client.
Rem Nota : Un mot de passe sera demandé sauf si option finale -password pass:MyPass
openssl pkcs12 -nodes -export -in %DIRCERTS%/Server/Server.crt -inkey %DIRCERTS%/Server/Server.key -out %DIRCERTS%/Server/Server.pfx -clcerts -descert -name "Client %SERVLOCAL% Certificate" -password pass:MyPass
Rem 12- Copies des clés
copy %DIRCERTS%\Server\Server.crt %DIRCERTS%\Site\%SERVLOCAL%.crt
del %DIRCERTS%\Server\Server.crt
copy %DIRCERTS%\Server\Server.key %DIRCERTS%\Site\%SERVLOCAL%.key
del %DIRCERTS%\Server\Server.key
Arrivé là, si vous avez bien modifié le fichier conf\extra\httpd-ssl.conf pour y mettre les bons chemins de votre site local à passer en https, vous pouvez valider le chargement des deux modules Apache :
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
vous pouvez lancer Wampserver et vérifier que tout va bien (icône verte) et éventuellement (icône rouge), utiliser l'outil de vérification de la syntaxe httpd.conf.
- Pour un autre site local, refaire uniquement de 6 à 12 en changeant le ServerName SERVLOCAL
La fenêtre de commande doit être positionnée sur le dossier wamp/bin/apache/apache2.4.37/bin/ et il est impératif de créer les variables d'environnement (Changez chemin et version si nécessaire) avant de lancer les commandes 6 à 12
set installdir=j:\wamp
set apachever=2.4.37
set openssl_conf=%installdir%\bin\apache\apache%apachever%\conf\openssl.cnf
set DIRCERTS=%installdir%\bin\apache\apache%apachever%\conf\Certs