2016-06-10 211 views
3

我们(我和我的开发团队)对Elixir来说相对来说比较新,特别是在成功将大部分API服务移植到Elixir后取得了巨大成效。Elixir SOAP(Detergentex)与客户端SSL证书

但是,我们遇到了连接到需要SSL客户端证书的上游SOAP WebService的问题。包装库detergentex似乎是消费Web服务的唯一真正可用的库,但我找不到在请求中使用客户端SSL证书的方式,这是我们的服务提供商所要求的。

我们目前在Python中使用SUDS来实现这一点,但是移植到Elixir对于这些特定请求的并行处理将具有巨大的好处。

任何帮助将大规模赞赏!

+1

你最终得到了这个工作吗? –

+0

我得到了它的部分工作,但Erlang中的清洁剂库存在进一步的问题,导致无法使用Web服务的WSDL - 特别是WebService导入的内容未被包含。最后,我只是用Hackneye使用HTTPoison,并且明确地使用XML库解析XML。 – Monty

回答

2

看起来像detergentex本身不支持它,但它包装的Erlang库,detergent,看起来像它会支持它。

功能detergent:callcan be called with an optional fourth argument,a #call_opts{}记录。该记录在detergent.hrl中定义,并包含一个名为http_client_options的字段。在detergent.erl中,该记录最终会传递给两个HTTP客户端之一:如果可用,则选择ibrowse,否则使用内置的inets应用程序中的httpc

对于httpc,您可以通过SSL选项为{ssl, [...]}元组http_client_options,而ibrowse预计,元组是{ssl_options, [...]},所以你需要知道哪些HTTP客户端洗涤剂会为了传递正确的选择使用。

SSL选项在ssl man page中描述。要设置客户端证书,请传递选项{certfile, "/path/to/client.cert"}{keyfile, "/path/to/client.key"}。如果证书和私钥在同一个文件中,则可以省略keyfile选项。

不应该很难为此添加对Detergentex的支持,或者您可以直接从Elixir中调用洗涤剂。