Elixir SOAP(detergentex)与客户端SSL证书

3
我们(包括我和我的开发团队)相对于Elixir还比较新,但成功将API服务的大部分内容移植到Elixir上并取得了巨大的成果。
然而,我们在连接需要SSL客户端证书的上游SOAP WebService时遇到了问题。包装库detergentex似乎是唯一可用的用于消费web服务的库,但我找不到如何在请求中使用客户端SSL证书的方法,这是我们的服务提供商要求的。
目前我们使用Python中的SUDS来实现这一功能,但将其移植到Elixir将带来巨大的并行化请求的好处。
非常感谢您的任何帮助!

1
你最终解决了这个问题吗? - John Polling
我已经部分地让它工作了,但是在Erlang的清洗剂库中还存在其他问题,这些问题阻止了Web服务的WSDL被消耗--特别是WebService有一些未被包含的导入。最终,我只使用了HTTPoison和Hackneye,并使用一个XML库显式地解析了XML。 - Monty
1个回答

2

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

函数 detergent:call 可以使用第四个可选参数, 这是一个 #call_opts{} 记录。该记录在 detergent.hrl 中定义,其中包含一个名为 http_client_options 的字段。在 detergent.erl 中,此记录最终传递给两个 HTTP 客户端之一:如果可用,则选择 ibrowse,否则使用内置 inets 应用程序中的 httpc

对于httpc,您可以在`http_client_options`中将SSL选项作为`{ssl,[...]}`元组传递,而ibrowse则期望该元组为`{ssl_options,[...]}`,因此您需要知道detergent将使用哪个HTTP客户端以便传递正确的选项。
SSL选项在ssl man page中有描述。要设置客户端证书,请传递选项{certfile,“/path/to/client.cert”}{keyfile,“/path/to/client.key”}。如果证书和私钥在同一个文件中,则可以省略keyfile选项。
将其添加到detergentex中不应该很难,或者您可以直接从Elixir调用detergent。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接