La première étape pour activer SSL dans votre application Web Erlang consiste à configurer le serveur Web sous-jacent. Par exemple, si vous utilisez INET, vous pouvez utiliser le fichier:
config/inets_https.conf:
Un exemple de fichier de configuration (en utilisant Apache comme la syntaxe) ressemble à:
ServerName erlangweb_https
ServerRoot docroot
DocumentRoot docroot
BindAddress 0.0.0.0
Modules e_mod_inets
Port 443
SocketType ssl
SSLCertificateFile my.cert
SSLCertificateKeyFile my.key
SSLVerifyClient 0
Vous pouvez également configurer à l'aide " Erlang » syntaxe:
[{inets, [...]}].
Plus d'informations sur Erlang Web Server fichiers de configuration à:
http://wiki.erlang-web.org/Eptic/ServerConfiguration
Et, plus précisément, pour INET:
http://www.erlang.org/doc/man/httpd.html
Une fois que vous avez cela en place, vous pouvez rediriger les utilisateurs vers HTTPS dans votre contrôleur d'application comme suit (en supposant que le serveur utilise les ports par défaut) :
{redirect, "https://" ++ e_conf:host() ++ "/" ++ wpart:fget("__path")}.
Si votre serveur n'utilise les ports par défaut, la redirection ci-dessus devient:
{redirect, "https://" ++ e_conf:host() ++ ":" ++ e_conf:https_port()
++ "/" ++ wpart:fget("__path")}.
Pour plus d'informations sur les paramètres de configuration dans Erlang Web:
http://wiki.erlang-web.org/ProjectConf
Pour réduire verbosité, vous voudrez peut-être avoir à regarder Erlang Web annotations. Par exemple , vous pouvez écrire quelque chose comme:
?BEFORE.
https(true, _Mod, _Fun, Args) ->
case wpart:fget("__https") of
false ->
Host = e_conf:host(),
Port = e_conf:https_port(),
Path = wpart:fget("__path"),
Redirect = "https://" ++ Host ++ ":" ++ Port ++ "/" ++ Path,
{skip, {redirect, Redirect}};
true ->
{proceed, Args}
end.
Et puis l'utiliser juste avant les fonctions de votre contrôleur pour forcer HTTPS:
?HTTPS(true).
my_function(Args) ->
....
PS: Bienvenue sur SO. –
Ouais, j'avais déjà fait le fichier de configuration. Seules les différences sont 1) J'utilise une adresse de liaison de *, et 2) Je n'utilise pas les ports par défaut). J'ai essayé votre redirection dans le contrôleur. Il redirige le navigateur et puis j'obtiens une erreur de serveur interne. Tous les processus de superviseur semblent bien se dérouler. Je ne vois aucune erreur ou échec là. J'utilise des inets, et aussi Windows (l'utilisation de Windows est seulement pour le développement, pas la production). Des idées? Merci. –
Pourriez-vous coller l'erreur de serveur interne que vous obtenez? –