Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang:inets-httpd与SSL_Ssl_Erlang_Inets - Fatal编程技术网

Erlang:inets-httpd与SSL

Erlang:inets-httpd与SSL,ssl,erlang,inets,Ssl,Erlang,Inets,这是多么困难,设置起来简直可笑。我已经试了三天了。搜索互联网和这个网站寻求帮助,但没有任何效果 我想要的是概念上简单的。我想要一个带有ssl的iNet httpd服务器。启动并运行服务器不是问题。。。无论如何都是非ssl的。当ssl被添加进来时,它就不起作用了 不要问什么错误,有多个错误,它们的变化取决于我对配置所做的更改。主要是浏览器错误,表示证书不允许这样或那样做,或者如果进行了更改,erlang shell中会出现一系列错误和进程崩溃 我只想知道1)我需要什么ssl证书,2)它们需要什么格

这是多么困难,设置起来简直可笑。我已经试了三天了。搜索互联网和这个网站寻求帮助,但没有任何效果

我想要的是概念上简单的。我想要一个带有ssl的iNet httpd服务器。启动并运行服务器不是问题。。。无论如何都是非ssl的。当ssl被添加进来时,它就不起作用了

不要问什么错误,有多个错误,它们的变化取决于我对配置所做的更改。主要是浏览器错误,表示证书不允许这样或那样做,或者如果进行了更改,erlang shell中会出现一系列错误和进程崩溃

我只想知道1)我需要什么ssl证书,2)它们需要什么格式,3)在httpd服务器端,我需要什么ssl配置选项

没有类似Apache的配置或配置文件。我想要以编程方式执行此操作的配置选项


如果有人能帮上忙,我洗耳恭听。

使用Erlang R16B03,以下设置适合我:

-module(inets_ssl).

-export([start/0]).

start() ->
  inets:start(),
  {ok, Pid} = inets:start(httpd, [
                                  {port, 22443},
                                  {server_name,"localhost"},
                                  {server_root,"./"},
                                  {document_root,"./"},
                                  {bind_address, any},
                                  {socket_type, {ssl, [{certfile, "./server.crt"}, 
                                                {keyfile, "./server.key"}]}},
                                  {mimetypes, [
                                               {"html", "text/html"}
                                              ]}
                                 ]),
  Pid.
cert
(server.crt)和
key
(server.key)文件可以通过以下方式生成:

$ openssl genrsa -des3 -passout pass:x -out server.pass.key 2048
$ openssl rsa -passin pass:x -in server.pass.key -out server.key
$ openssl req -new -key server.key -out server.csr
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
取自


假设
index.html
文件存在于
document\u root
url
https://localhost:22443/index.html
应该可以访问。

这对我使用linux OTP 22版和windows OTP 23版很有效:

当然,我的证书没有签名(必须在Firefox中添加一个例外),在windows中,我的连接似乎刚刚重置

然而,curl对这两种情况都有效,它成功地建立了一种联系

curl-v-k

在我使用127.0.0.1而不是localhost并添加了模块部分后,它工作了:

{modules,[mod_esi,ssl,crypto]}
之后,我从服务器收到了一些TLS通知报告,它在Windows中似乎不起作用的原因是:

TLS server: In state hello at tls_record.erl:539 generated SERVER ALERT: Fatal - Unexpected Message
 - {unsupported_record_type,71}
我的小代码只是增加了一个计数器

编辑:

ssl:cipher_suites(all,'tlsv1.3).

将使通过webbrowser执行get命令成为可能,似乎它默认为旧的tls版本。

不,不起作用。我想我完了。转到非Erlang解决方案。我已经尝试过这段代码,在将文件放在正确的位置并将
“/”
替换为
”(可能是因为我使用的是windows?)
ssl:cipher_suites(all,'tlsv1.3).