【问题标题】:How to add a trusted certificate to HTTPPoison/hackney?如何向 HTTPPoison/hackney 添加可信证书?
【发布时间】:2017-02-16 13:27:50
【问题描述】:

当我尝试时:

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 URL 时不会给我 ssl 错误的原因。但似乎 hackney/HTTPoison 忽略了这个配置。

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

【问题讨论】:

  • rabbitmq.com/ssl.html 可能会让您走上正确的道路。归根结底,HTTPoison 包装了 Hackney,它使用 Erlang :ssl 模块进行 TLS。我冒昧地猜测,将该文档中描述的选项传递给 HTTPoison 中的正确调用将起到作用(我自己测试它,但即将用完,抱歉 ;-))

标签: ssl erlang elixir httpoison


【解决方案1】:

我最近也遇到了这个问题。对我有用的是将证书文件的位置直接传递给hackney,正如this ticket 中的开发人员所建议的那样:

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

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

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

【讨论】:

  • 我让它工作了,但这涉及更改第三方依赖项的代码(ueberauth_facebook)。没有全球解决方案吗?
【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2011-08-03
    • 2016-10-25
    相关资源
    最近更新 更多