Ssl 如何让TLS使用Erlang 21?

Ssl 如何让TLS使用Erlang 21?,ssl,erlang,elixir,Ssl,Erlang,Elixir,我有以下问题: 长生不老药 [centos@ip-172-172-3-49 helix]$ env MIX_ENV=prod mix release Could not find Hex, which is needed to build dependency :plug_cowboy Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] Y 18:12:32.462 [inf

我有以下问题:

长生不老药

[centos@ip-172-172-3-49 helix]$ env MIX_ENV=prod mix release
Could not find Hex, which is needed to build dependency :plug_cowboy
Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] Y

18:12:32.462 [info]  ['TLS', 32, 'client', 58, 32, 73, 110, 32, 115, 116, 97, 116, 101, 32, 'hello', 32, 'received SERVER ALERT: Fatal - Handshake Failure', 10]
** (Mix) httpc request failed with: {:failed_connect, [{:to_address, {'repo.hex.pm', 443}}, {:inet6, [:inet6], :enetunreach}, {:inet, [:inet], {:tls_alert, 'handshake failure'}}]}

Could not install Hex because Mix could not download metadata at https://repo.hex.pm/installs/hex-1.x.csv.
我想根本原因是Erlang

Erlang/OTP 21 [erts-10.2.1] [source] [64-bit] [smp:36:36] [ds:36:36:10] [async-threads:1] [hipe]
1> ssl:start().
ok
2> Sock = fun() -> {ok, S} = gen_tcp:connect("google.com", 443, []), S end.
#Fun<erl_eval.20.128620087>
3>  ssl:connect(Sock(), []).
=INFO REPORT==== 28-Dec-2018::18:10:30.019612 ===
TLS client: In state hello received SERVER ALERT: Fatal - Handshake Failure
{error,{tls_alert,"handshake failure"}}
Erlang/OTP 21[erts-10.2.1][source][64位][smp:36:36][ds:36:10][async threads:1][hipe] 1> ssl:start()。 好啊 2> Sock=fun()->{ok,S}=gen_tcp:connect(“google.com”,443,[]),结束。 #乐趣 3> ssl:connect(Sock(),[])。 =信息报告===2018年12月28日::18:10:30.019612=== TLS客户端:处于状态hello已收到服务器警报:致命-握手失败 {错误,{tls_警报,“握手失败”} 有解决办法吗?操作系统是Centos 7

更新1

在MacOS上,它可以工作:

Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:6:6] [ds:6:6:10] [async-threads:1] [hipe] [dtrace]

Eshell V10.2  (abort with ^G)
1> ssl:start().
ok
2>  Sock = fun() -> {ok, S} = gen_tcp:connect("google.com", 443, []), S end.
#Fun<erl_eval.20.128620087>
3>  ssl:connect(Sock(), []).
{ok,{sslsocket,{gen_tcp,#Port<0.6>,tls_connection,undefined},
               [<0.100.0>,<0.99.0>]}}
4>
Erlang/OTP 21[erts-10.2][source][64位][smp:6:6][ds:6:6:10][async threads:1][hipe][dtrace]
Eshell V10.2(使用^G中止)
1> ssl:start()。
好啊
2> Sock=fun()->{ok,S}=gen_tcp:connect(“google.com”,443,[]),结束。
#乐趣
3> ssl:connect(Sock(),[])。
{ok,{sslsocket,{gen_tcp,#端口,tls_连接,未定义},
[,]}}
4>

ssl:connect/2如下所述:

连接与以下操作一样简单:

ssl:start().
ssl:connect("www.google.com", 443, []).

事实证明,我使用的ErlangRPM不支持Erlang中的新SSL

使用不同于Erlang Solutions的版本可以很好地工作:


我认为问题更多的是关于如何进行系统范围的修复(如果可能的话)。我将检查Elixir代码的混合实现。是否可能您的服务器上没有正确的CA证书?常规curl命令有效吗<代码>卷曲https://google.com?我把范围缩小到了我使用的Erlang RPM。另一个Erlang安装工作正常。