如何将可信证书添加到HTTPPoison / hackney?

时间:2016-10-07 13:58:16

标签: ssl erlang elixir httpoison

当我尝试:

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

我明白了:

** (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

这是预期的,因为在我的公司,我需要相信防火墙的证书才能离开。

我信任系统范围内的证书(.cer文件),这就是为什么wget在访问https网址时没有给我ssl错误的原因。但似乎hackney / HTTPoison忽略了这种配置。

如何让HTTPoison / hackney将证书识别为可信证书?

2 个答案:

答案 0 :(得分:2)

我最近也遇到过这个问题。对我来说有用的是根据this ticket中的开发人员将证书文件的位置直接传递给final CategoryHolder holder = convertView != null ? (CategoryHolder) v.getTag() : new CategoryHolder((CheckBox) v.findViewById(R.id.checkBox), (TextView) v.findViewById(R.id.name));

hackney

或者,您可以在不检查证书的情况下执行SSL连接(有关请求选项here的更多信息):

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

答案 1 :(得分:2)

证书文件路径正在传递给HTTPoison选项,如下所示:

   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)