Elixir 语言 TLS/SSL 证书配置实战

Elixir阿木 发布于 2025-06-19 5 次阅读


Elixir 语言 TLS/SSL 证书配置实战

在当今的网络环境中,安全通信变得越来越重要。TLS(传输层安全性)和SSL(安全套接字层)是确保数据在传输过程中不被窃听和篡改的关键技术。Elixir,作为一种功能强大的函数式编程语言,也提供了丰富的库来支持TLS/SSL的配置和使用。本文将围绕Elixir语言中的TLS/SSL证书配置进行实战讲解,帮助开发者更好地理解和应用这一技术。

环境准备

在开始之前,请确保你的Elixir环境已经搭建好。以下是Elixir和OTP(Open Telecom Platform)的安装步骤:

1. 安装Elixir:

shell

下载Elixir安装包


curl -fsSL https://raw.githubusercontent.com/elixir-lang/elixir/master/get.el | sh


2. 安装OTP:

shell

下载OTP安装包


curl -fsSL https://raw.githubusercontent.com/erlang/otp/master/otp_build.sh | sh


TLS/SSL证书简介

TLS/SSL证书是由证书颁发机构(CA)签发的,用于验证服务器的身份,并加密客户端与服务器之间的通信。在Elixir中,我们可以使用`:ssl`模块来配置和使用TLS/SSL证书。

生成自签名证书

在实际应用中,我们通常会从CA获取证书,但为了演示目的,我们可以使用OpenSSL生成一个自签名证书。

shell

生成CA私钥


openssl genrsa -out ca.key 2048

生成CA自签名证书


openssl req -x509 -new -nodes -key ca.key -sha256 -days 365 -out ca.crt

生成服务器私钥


openssl genrsa -out server.key 2048

生成服务器证书请求


openssl req -new -key server.key -out server.csr

使用CA私钥签署服务器证书


openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -out server.crt -days 365 -sha256


Elixir配置TLS/SSL证书

现在我们已经有了自签名证书,接下来我们将使用Elixir的`:ssl`模块来配置TLS/SSL。

1. 创建一个简单的HTTP服务器

我们需要创建一个简单的HTTP服务器,并使用TLS/SSL证书来加密通信。

elixir

defmodule MyHttpServer do


@moduledoc """


A simple HTTP server using TLS/SSL.


"""

def start(port, cert_file, key_file) do


{:ok, socket} = :ssl.listen(port, [:binary, :active, {:packet, :http}, {:reuseaddr, true}, {:ssl, [verify: :verify_peer, cert: cert_file, keyfile: key_file]}])

loop(socket)


end

def loop(socket) do


{:ok, conn} = :ssl.accept(socket)


loop(conn)


end

def loop(conn) do


case :ssl.recv(conn, 0) do


{:ok, data} ->


IO.puts("Received data: {data}")


:ssl.send(conn, "HTTP/1.1 200 OKrrHello, World!r")


{:error, reason} ->


IO.puts("Error: {reason}")


end


end


end

启动服务器


MyHttpServer.start(8443, "server.crt", "server.key")


2. 创建一个客户端来连接服务器

接下来,我们需要创建一个客户端来连接到我们的TLS/SSL服务器。

elixir

defmodule MyHttpClient do


@moduledoc """


A simple HTTP client that connects to a TLS/SSL server.


"""

def start do


{:ok, socket} = :ssl.connect('localhost', 8443, [:binary, {:packet, :http}, {:ssl, [verify: :verify_none]}])

:ssl.send(socket, "GET / HTTP/1.1rHost: localhostrr")


loop(socket)


end

def loop(socket) do


case :ssl.recv(socket, 0) do


{:ok, data} ->


IO.puts("Received data: {data}")


loop(socket)


{:error, reason} ->


IO.puts("Error: {reason}")


end


end


end

启动客户端


MyHttpClient.start()


3. 运行服务器和客户端

现在,你可以运行服务器和客户端代码,并使用浏览器或工具如`curl`来测试TLS/SSL连接。

shell

启动服务器


elixir -S my_http_server.exs

启动客户端


elixir -S my_http_client.exs

使用curl测试连接


curl https://localhost:8443


总结

本文通过实战演示了如何在Elixir中使用TLS/SSL证书。通过配置自签名证书和创建一个简单的HTTP服务器和客户端,我们展示了如何使用Elixir的`:ssl`模块来确保数据传输的安全性。在实际应用中,你可能需要从CA获取证书,并处理证书的验证和更新。希望本文能帮助你更好地理解和应用Elixir中的TLS/SSL证书配置。