使用SSL分发运行Erlang Escript文件

时间:2010-01-08 21:22:53

标签: erlang erlang-escript

我有一个小的escript文件连接到一个节点并执行一些rpc调用和东西......

它适用于短名称或长名称,但依赖于分布式Erlang的标准http通信。

我想使用它,但使用https / SSL进行分发。

要使用SSL启动“普通”Erlang系统,您必须传递各种标志以告知Erlang以这种方式运行,正如documentation建议的那样:

$ ERL_FLAGS="-boot \"/home/me/ssl/start_ssl\" -proto_dist inet_ssl 
  -ssl_dist_opt client_certfile \"/home/me/ssl/erlclient.pem\" 
  -ssl_dist_opt server_certfile \"/home/me/ssl/erlserver.pem\" 
  -ssl_dist_opt verify 1 -ssl_dist_opt depth 1"
$ export ERL_FLAGS
$ erl -sname ssl_test

这将使用ssl one(inet_tcp_dist)替换默认分发机制(inet_ssl_dist)。

escript将erlang文件作为shell脚本文件运行。

我的问题是:

  • 是否有可能获得运行escript的Erlang'环境'以使用安全分发机制而不是默认分发机制?
  • 如果是的话,我该怎么做?

1 个答案:

答案 0 :(得分:3)

您不必通过环境设置这些标记,也可以将它们直接传递给erl,请参阅ch. 1.4 hereerl标志可以通过%%!参数行传递给escript


<强> z.escript

#!/usr/bin/env escript
%%! -boot start_ssl -proto_dist inet_ssl -ssl_dist_opt client_certfile /home/me/ssl/erlclient.pem -ssl_dist_opt server_certfile /home/me/ssl/erlserver.pem -ssl_dist_opt verify 1 -ssl_dist_opt depth 1
main(_) ->
    io:format("~p~n", [init:get_arguments()]).

zed@zed:~$ ./z.escript 
[{root,["/opt/erlang-R13B03/lib/erlang"]},
 {progname,["erl"]},
 {home,["/home/zed"]},
 {boot,["start_clean"]},
 {noshell,[]},
 {boot,["start_ssl"]},
 {proto_dist,["inet_ssl"]},
 {ssl_dist_opt,["client_certfile","/home/me/ssl/erlclient.pem"]},
 {ssl_dist_opt,["server_certfile","/home/me/ssl/erlserver.pem"]},
 {ssl_dist_opt,["verify","1"]},
 {ssl_dist_opt,["depth","1"]}]