Apache2
Dans une installation système, il est fortement conseillé de ne pas autoriser de communication externe directe vers le serveur SAINet. Pour ce faire, il est recommandé d’utiliser un service Apache2 qui prendra en charge les connexions HTTP/HTTPS et transfèrera les requêtes à SAINet en arrière-plan.
Apache2 peut être téléchargé ici (prendre la version avec OpenSSL). Pour ce programme, il est également nécessaire d’installer le paquet Redistribuable Visual C++ 2015.
Service
Afin d’installer le service, dans une console Administrateur, exécuter la commande suivante:
<apache>\bin\httpd -k install -n Apache2
Il est conseillé de configurer le service pour que celui-ci redémarre automatiquement en cas de défaillance.
Il est possible de désinstaller le service avec la commande <apache>\bin\httpd -k uninstall -n Apache2
.
Configuration
Une fois le service installé, ouvrir le fichier <apache>\conf\httpd.conf
et le remplacer par
le contenu suivant (remplacer <apache>
par le chemin complet vers le dossier d’installation Apache2):
Define SRVROOT "<apache>"
Define port 9090
ServerRoot "${SRVROOT}"
ServerAdmin admin@example.com
ServerName localhost:80
Listen 80
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule env_module modules/mod_env.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule rewrite_module modules/mod_rewrite.so
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "${SRVROOT}/htdocs"
ErrorLog "logs/error.log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "logs/access.log" common
</IfModule>
<IfModule ssl_module>
Listen 443 https
SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLCompression off
SSLSessionTickets off
SSLHonorCipherOrder on
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:${SRVROOT}/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
CustomLog "${SRVROOT}/logs/ssl_request.log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" env=HTTPS
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
<VirtualHost _default_:80>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost _default_:443>
ProxyPreserveHost on
<Location "/">
ProxyPass "http://localhost:${port}/"
</Location>
SSLEngine on
SSLCertificateFile conf\ssl\server.crt
SSLCertificateKeyFile conf\ssl\server.key
</VirtualHost>
Certificats SSL
Dans la configuration ci-dessus, le certificat est statique. Les fichiers nécessaires sont pointés
par les variables SSLCertificateFile
et SSLCertificateKeyFile
. Par défaut, Apache fournit un
certificat auto-signé, ce qui provoque des messages d’alertes lorsqu’un utilisateur accède à SAINet
par un navigateur Web.
Il existe plusieurs moyens d’obtenir un certificat SSL, moyennant le fait que le serveur SAINet soit sur un serveur publique avec un DNS. Il est recommandé d’utiliser Let’s Encrypt et de configurer un renouvellement automatique avec certbot.
En cas de problème
Si le service Apache ne démarre pas, il est possible d’avoir plus d’informations en utilisant les commandes suivantes:
<apache>\bin\httpd -k stop -n "Apache2"
<apache>\bin\httpd -k start -n "Apache2"
Le terminal doit être ouvert en mode Administrateur.
Une erreur typique peut être un message qui se présente comme ceci:
AH00072: make_sock: could not bind to address 0.0.0.0:80
Cela signifie généralement qu’un autre programme est déjà en train d’écouter sur le port 80. Il est donc nécessaire d’arrêter ce programme ou alors de changer la configuration Apache pour utiliser un autre port.