Rebar3代理环境下无法下载包:CA证书缺失/未知问题求助
解决rebar3/mix在自定义CA代理环境下的TLS证书错误
当在使用自定义CA证书的企业代理环境中,执行rebar3或mix deps.compile时出现以下TLS握手报错:
TLS client: In state certify at ssl_handshake.erl:2015 generated CLIENT ALERT: Fatal - Unknown CA
本质原因是Erlang OTP的默认信任证书池中未包含企业自定义CA证书,以下是具体解决方案:
全局Erlang环境配置(适用于所有基于Erlang的工具)
- 找到你的企业自定义CA证书文件(通常为
.crt或.pem格式),将其复制到Erlang SSL模块的信任证书目录:- Linux系统:
/usr/lib/erlang/lib/ssl-*/priv/cacerts/ - macOS(Homebrew安装Erlang):
/usr/local/Cellar/erlang/*/lib/erlang/lib/ssl-*/priv/cacerts/ - Windows系统:
C:\Program Files\erl*\lib\ssl-*\priv\cacerts\
- Linux系统:
- 执行Erlang自带的
c_rehash工具生成证书哈希链接,确保OTP可识别该CA:c_rehash /path/to/erlang/cacerts/
rebar3项目单独配置(不修改全局环境)
- 在项目根目录的
rebar.config中添加SSL配置,指定自定义CA证书路径:{ssl_opts, [{cacertfile, "/绝对路径/到/自定义CA证书.crt"}]}. - 临时生效方式(无需修改配置文件):
export REBAR_SSL_OPTS="{cacertfile, \"/绝对路径/到/自定义CA证书.crt\"}" rebar3 get-deps
mix项目单独配置(不修改全局环境)
- 在项目根目录的
config/config.exs中添加SSL全局配置:config :ssl, :cacertfile, "/绝对路径/到/自定义CA证书.crt" - 临时生效方式(无需修改配置文件):
export ERL_SSL_CACERTFILE="/绝对路径/到/自定义CA证书.crt" mix deps.compile
额外注意事项
- 若使用HTTP/HTTPS代理,需提前配置对应环境变量:
export HTTP_PROXY=http://你的代理地址:端口 export HTTPS_PROXY=http://你的代理地址:端口 - 确保自定义CA证书文件权限为可读(Linux/macOS下可执行
chmod 644 /path/to/ca.crt)
内容的提问来源于stack exchange,提问作者Ondrej Valenta
相关产品推荐
相关产品推荐

