【问题标题】:Erlang Web framework and SSL?Erlang Web 框架和 SSL?
【发布时间】:2012-04-10 18:46:37
【问题描述】:

谁能 1) 告诉我该怎么做,或者 2) 向我指出如何在 Erlang Web 框架中运行/启用/使用 SSL 的资源?我在任何文档或在线网络搜索中都找不到任何内容,而且他们邮件列表中的最后一篇帖子似乎已经有几年了。

谢谢。

【问题讨论】:

    标签: ssl frameworks erlang


    【解决方案1】:

    在您的 Erlang Web 应用程序中启用 SSL 的第一步是配置底层 Web 服务器。例如,如果您使用的是 Inets,则可以使用该文件:

    config/inets_https.conf:
    

    一个示例配置文件(使用类似 Apache 的语法)如下所示:

    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
    

    您也可以使用“erlang”语法对其进行配置:

    [{inets, [...]}].
    

    有关 Erlang Web 服务器配置文件的更多信息,请访问:

    http://wiki.erlang-web.org/Eptic/ServerConfiguration

    特别是对于 Inets:

    http://www.erlang.org/doc/man/httpd.html

    一旦你准备好了,你就可以在你的应用程序控制器中将用户重定向到 HTTPS,如下所示(假设服务器使用默认端口):

    {redirect, "https://" ++ e_conf:host() ++ "/" ++ wpart:fget("__path")}.
    

    如果你的服务器没有使用默认端口,上面的重定向变成:

    {redirect, "https://" ++ e_conf:host() ++ ":" ++ e_conf:https_port()
                ++ "/" ++ wpart:fget("__path")}.
    

    有关 Erlang Web 中配置参数的更多信息:

    http://wiki.erlang-web.org/ProjectConf

    为了减少冗长,您可能希望查看Erlang Web annotations。例如 ,你可以这样写:

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

    然后在您的控制器功能强制使用 HTTPS 之前使用它:

    ?HTTPS(true).
    my_function(Args) ->
        ....
    

    【讨论】:

    • 是的,我已经完成了配置文件。唯一的区别是 1)我使用 * 的绑定地址,2)我没有使用默认端口)。我在控制器中尝试了您的重定向。它重定向浏览器,然后我收到内部服务器错误。所有的主管流程看起来都很好。我在那里看不到任何错误或失败。我正在使用 inets,还有 Windows(Windows 的使用仅用于开发,而不是生产)。有任何想法吗?谢谢。
    • 你能粘贴你得到的内部服务器错误吗?
    • 这是网页上弹出的内容(交互式外壳上没有弹出任何内容):内部服务器错误服务器遇到内部错误或配置错误,无法完成您的请求。请联系服务器管理员unknown@unknown,并告知他们错误发生的时间以及您所做的任何可能导致错误的事情。
    • 奇怪,我在 dispatch.conf 中添加了重定向,现在它似乎“工作”了。但是,我根本无法使用 https:// 访问服务器。我必须使用普通的 http:// 和普通的端口,但它似乎会重定向到 https:但是 https 永远不会出现在浏览器的任何地方,只是普通的 http。这是它应该工作的方式吗?我或用户如何知道正在加密的内容?
    • 哎呀——没关系。它根本不起作用,我错了:-(
    猜你喜欢
    • 2017-10-17
    • 2011-01-06
    • 2012-08-20
    • 2010-12-20
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2011-12-27
    相关资源
    最近更新 更多