Configurer Wampserver pour https SSL en local

MANIFESTEZ-VOUS !
Ceci est la partie la plus IMPORTANTE du site ! Vous avez des grandes idées, des trucs à dire et à partager ? Allez-y ! Faites le savoir !

Modérateurs : TEAM THE C@TZ, MODERATEURS

Répondre
Avatar du membre
N4T0R4
Utilisateur actif
Utilisateur actif
Messages : 57
Enregistré le : dim. déc. 20, 2020 2:21 pm
Localisation : Moncuq
Contact :

Configurer Wampserver pour https SSL en local

Message par N4T0R4 »

Configurer Wampserver pour https SSL en local
-- Procédure expliquée pour wampserver installé dans c:\wamp64 et pour apache 2.4.51
Modifiez les chemins et version en fonction de votre installation
Procédure compilée à partir de comparaisons et d'essais de diverses documentations et explications dont celles d'Artemus24 sur son site [www.jcz.fr]
Ce n'est peut-être pas la meilleure méthode et il y a sans doute des redondances et/ou des trucs en trop, mais :
Cette procédure fonctionne et a été essayée pour Apache 2.4.37 à 2.4.46b en 32 et 64 bit

-- Wampserver doit être arrêté, donc les services stoppés.

-- Modification du fichier c:\wamp64\bin\apache\apache2.4.51\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 c:\wamp64\bin\apache\apache2.51\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 :
c:\wamp64\bin\apache\apache2.51\conf\original\extra\httpd-ssl.conf
qui n'aura pas été modifié.

Remplacer tout le contenu du fichier c:\wamp64\bin\apache\apache[version]\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
# Encryptions TLSv1.2
#SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384
# Encryptions TLSv1.3
SSLCipherSuite TLSv1.3 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384

SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets on
# SSL Protocol support:
SSLProtocol -all +TLSv1.2 +TLSv1.3
# Pass Phrase Dialog:
SSLPassPhraseDialog builtin
# Inter-Process Session Cache:
SSLSessionCache "shmcb:${INSTALL_DIR}/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300

##
## SSL Virtual Host Context
##

Define SERVERNAMEVHOSTSSL local.monsite.fr
Define DOCUMENTROOTVHOSTSSL d:/web/dev/monsite.fr
Define ADMINVHOSTSSL my@email.com
<VirtualHost *:443>
ServerName ${SERVERNAMEVHOSTSSL}
DocumentRoot "${DOCUMENTROOTVHOSTSSL}"
ServerAdmin ${ADMINVHOSTSSL}
ErrorLog "${INSTALL_DIR}/logs/error.log"
TransferLog "${INSTALL_DIR}/logs/access.log"
SSLEngine on
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile "${SRVROOT}/conf/Certs/Site/${SERVERNAMEVHOSTSSL}.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/Certs/Site/${SERVERNAMEVHOSTSSL}.key"
SSLCACertificatePath "${SRVROOT}/conf/Certs/Cacerts"
SSLCACertificateFile "${SRVROOT}/conf/Certs/Cacerts/Certificat.crt"
#
SSLVerifyClient none
SSLVerifyDepth 10

<Directory "${DOCUMENTROOTVHOSTSSL}/">
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>
# End of SSL Virtual Host Context - To be repeated for another SSL VirtualHost

# Do not remove these lines UnDefine
UnDefine SERVERNAMEVHOSTSSL
UnDefine DOCUMENTROOTVHOSTSSL
UnDefine ADMINVHOSTSSL


Le VirtualHost doit déjà exister et être valide en http port 80, donc exister dans le fichier :
e:\wamp64\bin\apache\apache2.4.46b\conf\extra\httpd-vhosts.conf
Il faudra modifier toutes les lignes où il y a MYSITE pour y mettre vos propres données, par exemple :

Define SERVERNAMEVHOSTSSL local.monsite.fr
Define DOCUMENTROOTVHOSTSSL D:\web\dev\monsite.fr
Define ADMINVHOSTSSL my@email.com


-- Remplacer tout le contenu du fichier c:\wamp64\bin\apache\apache2.51\conf\openssl.cnf

#============ openssl.cnf =============#
[ ca ]
default_ca = CA_default

[ CA_default ]
dir = ./Certs
cacerts_dir = $dir/Cacerts
certificate = $cacerts_dir/Certificat.crt
new_certs_dir = $dir/Newcerts
private_dir = $cacerts_dir
private_key = $private_dir/Certificat.key
RANDFILE = $private_dir/Certificat.rnd
other_dir = $dir/Other
database = $other_dir/index.txt
serial = $other_dir/serial.txt
default_crl_days = 14610
default_days = 14610
default_md = sha512
x509_extensions = usr_cert
name_opt = ca_default
cert_opt = ca_default
preserve = no
policy = policy_match

[ 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

[ usr_cert ]
basicConstraints = CA:FALSE
nsCertType = client, email
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer

[ ocsp ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning

[ req ]
default_bits = 4096
default_keyfile = ./Certs/Cacerts/Certificat.pem
encrypt_key = no
default_md = sha512
string_mask = utf8only
prompt = no
utf8 = yes
distinguished_name = req_distinguished_name
req_extensions = v3_req
x509_extensions = v3_ca

[ 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 = address@mail.net
emailAddress_max = 40

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

[ v3_ca ]
# Extensions to use when signing a CA
basicConstraints = critical, CA:true
keyUsage = keyCertSign, cRLSign
nsCertType = sslCA, emailCA
nsComment = "SSL ROOT CA"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always


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 une ligne vide à la fin du bloc, sinon la dernière commande du bloc ne serait pas exécutée.
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 Variables d'installation de Wampserver
Rem À modifier suivant votre installation
set installdir=c:\wamp64
set apachever=2.4.51
Rem
Rem Vérification et création éventuelle des dossiers
cd /D %installdir%\bin\apache\apache%apachever%\conf
Rem Suppression des certificats éventuellement présents
if exist Certs rmdir /S /Q Certs
if not exist Certs md Certs
cd Certs
if not exist Other md Other
if not exist Cacerts md Cacerts
if not exist Server md Server
if not exist Site md Site
Rem Informations à créer
copy nul .\Other\Index.txt
@echo 01> .\Other\Serial.txt
Rem MyPass peut être remplacé par votre propre mot de passe (4 à 20 caractères)
@echo MyPass> .\Other\Password.txt
set /P PASSWORD= <.\Other\Password.txt
Rem
cd..
cd..
cd bin

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 1358 peut être remplacée)
openssl rand -out %DIRCERTS%/Cacerts/Certificat.rnd -base64 1358
Rem 2- Clé RSA privée.
openssl genrsa -out %DIRCERTS%/Cacerts/Certificat.key -rand %DIRCERTS%/Cacerts/Certificat.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%/Cacerts/Certificat.key -out %DIRCERTS%/Cacerts/Certificat.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/Certificat.csr -signkey %DIRCERTS%/Cacerts/Certificat.key -out %DIRCERTS%/Cacerts/Certificat.crt
openssl x509 -in %DIRCERTS%/Cacerts/Certificat.crt -outform der -out %DIRCERTS%/Cacerts/Certificat.der
openssl x509 -in %DIRCERTS%/Cacerts/Certificat.crt -outform pem -out %DIRCERTS%/Cacerts/Certificat.pem
Rem 5- Extraction clé publique Plaintext Block Chaining
openssl rsa -in %DIRCERTS%/Cacerts/Certificat.key -pubout -out %DIRCERTS%/Cacerts/Certificat.pbc
Rem +-+-+-+-+ Fin de la création du certificat auto-signé +-+-+-+-+

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=devel.monsite.fr
Rem 7- Nombre aléatoire (Graîne différente)
if exist %DIRCERTS%/Server/Server.rnd del %DIRCERTS%/Server/Server.rnd
openssl rand -out %DIRCERTS%/Server/Server.rnd -base64 1677
Rem 8- Clé RSA privée.
if exist %DIRCERTS%\Server\Server.key del %DIRCERTS%\Server\Server.key
openssl genrsa -out %DIRCERTS%/Server/Server.key -rand %DIRCERTS%/Server/Server.rnd 4096
Rem 9- Demande de signature pour certificat
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
if exist %DIRCERTS%/Server/Server.csr del %DIRCERTS%/Server/Server.csr
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.
if exist %DIRCERTS%\Server\Server.crt del %DIRCERTS%\Server\Server.crt
openssl x509 -req -days 4383 -sha256 -in %DIRCERTS%/Server/Server.csr -CA %DIRCERTS%/Cacerts/Certificat.crt -CAkey %DIRCERTS%/Cacerts/Certificat.key -CAcreateserial -out %DIRCERTS%/Server/Server.crt
openssl x509 -outform der -in %DIRCERTS%/Server/Server.crt -out %DIRCERTS%/Server/Server.der
openssl x509 -inform DER -outform PEM -in %DIRCERTS%/Server/Server.der -out %DIRCERTS%/Server/Server.pem
openssl crl2pkcs7 -nocrl -certfile %DIRCERTS%/Cacerts/Certificat.crt -certfile %DIRCERTS%/Server/Server.crt -out %DIRCERTS%/Server/%SERVLOCAL%.p7b
if exist %DIRCERTS%/Server/%SERVLOCAL%.pfx del %DIRCERTS%/Server/%SERVLOCAL%.pfx
openssl pkcs12 -export -nodes -in %DIRCERTS%/Cacerts/Certificat.crt -inkey %DIRCERTS%/Server/Server.key-out %DIRCERTS%/Server/%SERVLOCAL%.pfx -descert -name "%SERVLOCAL%" -password pass:%PASSWORD%
Rem
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%/Site/%SERVLOCAL%.pfx -clcerts -descert -name "Client %SERVLOCAL% Certificate" -password pass:%PASSWORD%
Rem 12- Copies des clés
copy /Y %DIRCERTS%\Server\Server.crt %DIRCERTS%\Site\%SERVLOCAL%.crt
copy /Y %DIRCERTS%\Server\Server.key %DIRCERTS%\Site\%SERVLOCAL%.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 ajouter un autre site local, refaire uniquement les lignes de commande de Rem 6 à Rem 12 en changeant le ServerName SERVLOCAL
La fenêtre de commande doit être positionnée sur le dossier wamp/bin/apache/apache2.4.46b/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 Rem 6 à Rem 12

set installdir=e:\wamp64
set apachever=2.4.46b
set OPENSSL_CONF=%installdir%\bin\apache\apache%apachever%\conf\openssl.cnf
set DIRCERTS=%installdir%\bin\apache\apache%apachever%\conf\Certs
cd /D %installdir%\bin\apache\apache%apachever%\bin
set /P PASSWORD= <..\conf\Certs\Other\Password.txt


Où ranger les divers certificats :

--- Le certificat "Certs\Cacerts\Certificat.crt" est à ranger :
-- Windows, dans le gestionnaire de Certificats (Lancé par "certmgr.msc"winking smiley :
dans "Autorités de certification racine de confiance" :
- Clic-Droit sur "Autorités de certification racine de confiance" -> Toutes les tâches -> Importer -> Parcourir
pour aller chercher Certs\Cacerts\Certificat.crt
-- Firefox, Outils -> Options -> Vie privée et sécurité
- Certificats -> Afficher les certificats.
- Magasin "Autorités" puis Importer

--- Le(s) certificat(s) client ou Site avec le suffixe ".pfx ou .p12".
Il contient le certificat, son intermédiaire et la clé privée.
-- Windows, dans le gestionnaire de Certificats (certmgr.msc), magasin "Personnel".
-- Firefox, dans le magasin "Vos certificats".
Le mot de passe sera demandé.
Je ne parle que du navigateur Firefox puisqu'à ma connaissance, c'est le seul qui gère lui-même les certificats, les autres utilisant les certificats de Windows.
Et c'est aussi le seul qui prend bien en compte les certificats auto-signés avec comme informations sur un site local https :
- Connexion sécurisé
- Connexion vérifiée par un émetteur de certificat non reconnu par Mozilla
Les autres navigateurs crient "au scandale" :
- Chrome barrant en rouge https et déclarant le site non sécurisé
- Opera La connexion à ce site n'est pas sécurisée
- Edge La connexion à ce site n'est pas sécurisée
C'est pourquoi je n'utilise que Firefox en développement de site https.

Forcer https pour un ou plusieurs VistualHost
Pour forcer un VirtualHost à être lancé en https, il suffit de rajouter une directive de redirection dans sa structure <VirtualHost *:80> dans le fichier httpd-vhosts.conf.

<VirtualHost *:80>
ServerName monsite
Redirect / https://monsite/
DocumentRoot "G:/www/mondossier"
<Directory "G:/www/mondossier/">
...


Source :
http://forum.wampserver.com/read.php?1, ... msg-159026
Répondre