2016-10-07 1 views
6

Wenn ich versuche:Wie fügt man HTTPPoison/hackney ein vertrauenswürdiges Zertifikat hinzu?

HTTPoison.get! "https://facebook.com" 

ich:

** (HTTPoison.Error) {:tls_alert, 'unknown ca'} 
[error] SSL: :certify: ssl_handshake.erl:1606:Fatal error: unknown ca 

    (httpoison) lib/httpoison.ex:66: HTTPoison.request!/5 

die Art erwartet, da in meiner Firma muss ich das Zertifikat der Firewall vertrauen zu bekommen.

Ich habe das Zertifikat (.CER-Datei) systemweit vertraut, weshalb wget mir keine SSL-Fehler beim Zugriff auf https URLs gibt. Aber es scheint, dass hackney/HTTPoison diese Konfiguration ignoriert.

Wie mache ich, dass HTTPoison/hackney das Zertifikat als vertrauenswürdiges Zertifikat erkennt?

+1

https: //www.ra bbitmq.com/ssl.html könnte Sie auf den richtigen Pfad setzen. Am Ende des Tages wickelt HTTPoison Hackney ab, das das Erlang ': ssl'-Modul für TLS verwendet. Ich würde eine Vermutung wagen, dass die Übergabe der Optionen, wie in diesem Dokument beschrieben, an den richtigen Aufruf in HTTPoison den Trick machen würde (ich würde es selbst testen, aber fast auslaufen, sorry ;-)) – cdegroot

Antwort

2

Ich bin kürzlich auch in dieses Problem geraten. Was für mich gearbeitet wurde die Position der Datei direkt auf hackney cert vorbei, wie durch den Entwickler in this ticket vorgeschlagen:

opts = [{:ssl_options, [{:cacertfile, "/<path to my cert>/MyCertificates.pem"}]}] 
HTTPoison.post(login, headers, hackney: opts) 

Alternativ können Sie die SSL-Verbindung durchführen, ohne das Zertifikat überprüft (mehr über Anforderungsoptionen here):

HTTPoison.post(login, headers, hackney: [:insecure]) 
+0

Ich habe es zur Arbeit gebracht, aber das beinhaltete die Änderung des Codes von Abhängigkeiten Dritter (ueberauth_facebook). Gibt es keine globale Lösung? – diogovk

1

Cert Dateipfade toHTTPoison Optionen wie folgt übergeben werden:

defp add_certs do 
      [                                   
      hackney: [ # :hackney options                           
      ssl_options: [ # :ssl options                           
       cacertfile: # CA certificate used to validate server cert; path(), "string" is ok     
       certfile: # client certificate, signed by CA; path(), "string" is ok         
       keyfile: # private key for client.crt; path(). "string" is ok           
       password: # password for keyfile; string(), "string" not ok, use 'char list'         
      ]                                  
      ]                          
      ] 
    end 
    HTTPoison.post(url, request_xml, headers, add_certs) 
Verwandte Themen