2016-06-10 210 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中調用洗滌劑。