2012-04-10 5 views
1

Quelqu'un peut-il soit 1) me dire comment le faire, soit 2) me diriger vers une ressource sur la façon d'exécuter/activer/utiliser SSL avec le framework Web Erlang? Je ne trouve rien dans les documents ou les recherches sur le Web, et il semble que le dernier message de leur liste de diffusion date de deux ans.Erlang Web framework et SSL?

Merci.

Répondre

2

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) -> 
    .... 
+0

PS: Bienvenue sur SO. –

+0

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. –

+0

Pourriez-vous coller l'erreur de serveur interne que vous obtenez? –