Как добавить доверенный сертификат в HTTPPoison/hackney?

Когда я пытаюсь:

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 не дает мне ssl ошибок при доступе https URL-адрес. Но похоже, что hackney/HTTPoison игнорирует эту конфигурацию.

Как заставить HTTPoison/hackney распознать сертификат как доверенный сертификат?

2 ответа

Пути к Cert-файлам передаются опциям HTToison, например:

   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)

Я недавно столкнулся с этой проблемой также. То, что работало для меня, передавало местоположение файла сертификата непосредственно hackney как предложено разработчиком в этом билете:

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

В качестве альтернативы вы можете выполнить SSL-соединение без проверки сертификата (подробнее об опциях запроса здесь):

HTTPoison.post(login, headers, hackney: [:insecure])
Другие вопросы по тегам