寻找一个简单的ssl erlang示例

问题描述 投票:1回答:2

[在书Erlang Programming中,建议的练习之一是使用gen_tcp在屏幕上打印来自浏览器的请求。我是针对http请求制作的,如下所示:

-module(tcp).
-export([server/0, wait_connect/2]).

server() ->
    {ok, ListenSocket} = gen_tcp:listen(1234, [binary, {active, false}]),
    wait_connect(ListenSocket,0).

wait_connect(ListenSocket, Count) ->
    {ok, Socket} = gen_tcp:accept(ListenSocket),
    spawn(?MODULE, wait_connect, [ListenSocket, Count+1]),
    get_request(Socket, [], Count).

get_request(Socket, BinaryList, Count) ->
    Request = gen_tcp:recv(Socket, 0),
    io:format("~p~n", [Request]).

现在,我想知道在https请求的情况下如何做到这一点。您能否提供一个非常简单的示例,或者为我提供一些书籍或在线资源?

ssl erlang gen-tcp
2个回答
3
投票

以下是Erlang SSL应用程序的用户指南:Erlang -- SSL User Guide

该指南在API章节中还包含有关将现有连接更新为SSL的段落。

关于您的代码,您应该执行以下操作:

  • 在服务器和客户端,您必须发出:ssl:start()
  • 服务器端:握手SSL(记住,将监听套接字的'active'设置为false)

    {ok, SSLSocket} = ssl:ssl_accept(Socket, [{cacertfile, "cacerts.pem"}, {certfile, "cert.pem"}, {keyfile, "key.pem"}]).

    其中“ cacerts.pem”,“ cert.pem”,“ key.pem”是与SSL认证相关的文件

  • 客户端:将连接升级到SSL:{ok, SSLSocket} = ssl:connect(Socket, [{cacertfile, "cacerts.pem"}, {certfile, "cert.pem"}, {keyfile, "key.pem"}], infinity).

根据文档,现在SSLSocket是一个ssl通道,可用于发送如下消息:ssl:send(SSLSocket, "foo").

希望这会有所帮助!


1
投票

我建议阅读以下有关Erang中SSL套接字的文章,其中包含SSL回显服务器和客户端的完整代码。

Erlang SSL sockets example - ssl server & client)

© www.soinside.com 2019 - 2024. All rights reserved.