HTTPoison post request Handshake Failure

I am getting the following error:

iex(16)>"",'{ "username": "myusername","password": "somepassword,"port": "80"}',[hackney: [ssl: [cacertfile: '/usr/local/share/ca-certificates/extra/RootCA.crt']]])   

14:54:26.183 [info]  TLS :client: In state :hello received SERVER ALERT: Fatal - Handshake Failure
   id: nil,
   reason: {:tls_alert,
     'TLS client: In state hello received SERVER ALERT: Fatal - Handshake Failure\n '}}

We have a local RootCA.crt file which I have added to the OS and makes it so I can make a request with no problems. I am able to make this request in postman as well as from Python but not in Elixir. Perhaps my syntax is wrong or I don’t understand ssl properly (that’s definitely true!). This server is not accessible to the internet. I can provide more information if necessary. Thanks for any help!

Not sure this is the actual issue, but the HTTPoison README does not use the atom :hackney in the SSL options:

url = ""
options = [ssl: [certfile: "certs/client.crt"]]
{:ok, response} =, [], options)

Even when passing a :cacertfile, it seems to be passed directly under :ssl:

1 Like

Along with what @lucaong suggested, once you specify :ssl you have to specify all SSL options, hackney does not merge ssl options.

from hackney readme:

Note that ssl_options overrides all options passed to the ssl module.


Thanks for the tips everybody. Unfortunately I think the problem lies with the IT department of the company I am working with. There appears to be some problems with their ssl setup. I can only access this api by setting a verify=false flag with the request. Which is ok for now but eventually they need to setup their certificates properly.

I solved this problem today like this:"",'{ "username": "myusername","password": "somepassword,"port": "80"}',hackney: [:insecure])

I passed the insecure option to hackney and changed the https to http. I know this is not recommended but I need to login and I don’t have access to the SSL settings on the server.