Erlang:inets-httpd与SSL
这是多么困难,设置起来简直可笑。我已经试了三天了。搜索互联网和这个网站寻求帮助,但没有任何效果 我想要的是概念上简单的。我想要一个带有ssl的iNet httpd服务器。启动并运行服务器不是问题。。。无论如何都是非ssl的。当ssl被添加进来时,它就不起作用了 不要问什么错误,有多个错误,它们的变化取决于我对配置所做的更改。主要是浏览器错误,表示证书不允许这样或那样做,或者如果进行了更改,erlang shell中会出现一系列错误和进程崩溃 我只想知道1)我需要什么ssl证书,2)它们需要什么格式,3)在httpd服务器端,我需要什么ssl配置选项 没有类似Apache的配置或配置文件。我想要以编程方式执行此操作的配置选项Erlang:inets-httpd与SSL,ssl,erlang,inets,Ssl,Erlang,Inets,这是多么困难,设置起来简直可笑。我已经试了三天了。搜索互联网和这个网站寻求帮助,但没有任何效果 我想要的是概念上简单的。我想要一个带有ssl的iNet httpd服务器。启动并运行服务器不是问题。。。无论如何都是非ssl的。当ssl被添加进来时,它就不起作用了 不要问什么错误,有多个错误,它们的变化取决于我对配置所做的更改。主要是浏览器错误,表示证书不允许这样或那样做,或者如果进行了更改,erlang shell中会出现一系列错误和进程崩溃 我只想知道1)我需要什么ssl证书,2)它们需要什么格
如果有人能帮上忙,我洗耳恭听。使用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
urlhttps://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).