2016-06-10 5 views
3

Wir (ich und mein Entwicklerteam) sind relativ neu in Elixir, vor allem nach der erfolgreichen Portierung großer Teile unseres API-Dienstes auf Elixir mit großartigen Ergebnissen.Elixir SOAP (detergentex) mit Client ssl Zertifikat

Wir haben jedoch ein Problem bei der Verbindung mit einem Upstream-SOAP-WebService, der ein SSL-Client-Zertifikat erfordert. Die Wrapper-Bibliothek detergentex scheint die einzige wirklich verfügbare Bibliothek für die Nutzung von Webdiensten zu sein. Ich finde jedoch keine Möglichkeit, Client-SSL-Zertifikate in der Anforderung zu verwenden, die von unserem Dienstanbieter benötigt wird.

Wir verwenden derzeit SUDS in Python, um dies zu erreichen, aber die Portierung auf Elixir wird enorme Vorteile für die Parallelisierung dieser speziellen Anforderungen haben.

Jede Hilfe würde massiv geschätzt werden!

+1

hast du das am Ende funktioniert? –

+0

Ich habe es teilweise funktioniert, aber es gab weitere Probleme mit der Detergensbibliothek in Erlang, die verhinderten, dass die WSDL des Web-Service konsumiert wurde - insbesondere der WebService hatte Importe, die nicht enthalten waren. Am Ende habe ich einfach HTTPoison mit Hackneye verwendet und das XML mit einer XML-Bibliothek explizit analysiert. – Monty

Antwort

2

Es scheint, als ob detergentex selbst es nicht unterstützt, aber die Erlang-Bibliothek, die es umhüllt, detergent, sieht aus, als würde es es unterstützen.

Die Funktion detergent:callcan be called with an optional fourth argument, eine #call_opts{} Rekord. Dieser Datensatz ist in detergent.hrl definiert und enthält ein Feld mit der Bezeichnung http_client_options. In detergent.erl wird dieser Datensatz schließlich an einen von zwei HTTP-Clients übergeben: Er wählt ibrowse, wenn dieser verfügbar ist, und verwendet andernfalls httpc aus der integrierten Anwendung von inet.

Für httpc, können Sie SSL-Optionen als {ssl, [...]} Tupel in http_client_options passieren, während IBrowse das Tupel {ssl_options, [...]} sein erwartet, so dass Sie müssen wissen, welche HTTP-Client-Reinigungsmittel verwenden, um die richtige Wahl zu übergeben.

Die SSL-Optionen sind in der ssl man page beschrieben. Um ein Client-Zertifikat festzulegen, übergeben Sie die Optionen {certfile, "/path/to/client.cert"} und {keyfile, "/path/to/client.key"}. Wenn sich das Zertifikat und der private Schlüssel in derselben Datei befinden, können Sie die Option keyfile weglassen.

Es sollte nicht schwer sein, Unterstützung für detergentex hinzuzufügen, oder Sie könnten Reinigungsmittel direkt aus Elixir nennen.

Verwandte Themen