我试图调用我正在使用Hackney开发的API。
此API是一个rails应用程序,用于开发我使用nginx和passenger来提供服务,我使用etcd_ca
生成了CA证书和主机证书。我已经在我的linux框中安装了CA证书,并且没有关于证书的curl,chrome或firefox投诉。
但是当我尝试向Hackney提出请求时,我收到了这个错误:
hackney:request(Method, Uri, Headers, Body, [insecure]).
18:43:15.720 [error] SSL: :certify: ssl_handshake.erl:415:Fatal error: certificate unknown
** (MatchError) no match of right hand side value: {:error, {:tls_alert, 'certificate unknown'}}
(omnitutor_rt) lib/omnitutor_rt/api_client.ex:49: OmnitutorRT.APIClient.request/3
(omnitutor_rt) lib/omnitutor_rt/api_client.ex:7: OmnitutorRT.APIClient.get_session/2
在分期和开发方面,我有一个有效的证书。
我正在运行Arch Linux,Elixir 1.2和Erlang 18。
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Linux 4.4.1-2-ARCH #1 SMP PREEMPT Wed Feb 3 13:12:33 UTC 2016 x86_64 GNU/Linux
etcd-ca使用此模板生成证书:
https://github.com/coreos/etcd-ca/blob/master/Documentation/certificate_template.md
这可能是相关的吗? http://bugs.erlang.org/browse/ERL-33
答案 0 :(得分:0)
查看此错误,我们有一个文件名和行号:
ssl_handshake.erl:415:Fatal error: certificate unknown
reading the source我们发现当发现错误时会发生这种情况,来自ssl_certificate:trusted_cert_and_path
或public_key:pkix_path_validation
。不幸的是,我们无法看到实际的错误信息。
找出问题的最佳方法可能是追踪这两个功能。这是你在Erlang shell中输入的内容; Elixir版本应该类似:
%% start the tracer
dbg:tracer().
%% trace function _c_alls for _all_ processes
dbg:p(all,c).
%% add a _t_race _p_attern for the relevant functions,
%% and look for e_x_ceptions
dbg:tp(ssl_certificate, trusted_cert_and_path, x).
dbg:tp(public_key, pkix_path_validation, x).