前言
在开发和部署 Web 服务时,SSL 证书是保证数据传输安全的重要方式之一。针对单个主机的 SSL 证书生成可以使用 easy-rsa 工具进行生成,但在部署到生产环境时,需要生成大量的 SSL 证书,此时手动处理是不可取的。
Docker 提供了一个方便的方式,将 easy-rsa 工具打包成镜像,并且借助 Docker 的容器特性进行 SSL 证书的批量生成。本文将介绍如何使用 Docker 和 easy-rsa 生成 SSL 证书。
概述
什么是 SSL 证书
SSL 证书是一种数字证书,用于加密在客户端和服务器之间传输的数据。一般由专业机构或自己颁发,用于保证数据传输的安全。
通常包括以下几个主要组成部分:
- 证书持有人的名称和信息;
- 出具证书的机构的名称和信息;
- SSL 证书的有效期;
- 证书的唯一序列号;
- 服务器公钥;
- 数字签名。
Easy-rsa 工具
Easy-rsa 是用于生成 SSL 证书的开源工具,主要是由 OpenVPN 社区开发。它是一组 shell 脚本,通过 OpenSSL 库来生成 SSL 证书。Easy-rsa 可以生成 CA(Certificate Authority),并使用根证书签署其他证书。
使用 Docker 和 Easy-rsa 生成 SSL 证书
环境准备
首先需要安装 Docker,如果还没有安装 Docker,可以按照 Docker 官方文档 进行安装。安装完成后,可以通过命令行运行以下命令进行版本验证:
$ docker -v Docker version 20.10.6, build 370c289
创建 Docker 镜像
Easy-rsa 提供了官方的 Dockerfile,可以通过以下命令构建 Easy-rsa 镜像:
$ git clone https://github.com/OpenVPN/easy-rsa.git $ cd easy-rsa/easyrsa3/ $ docker build -t my-easyrsa .
my-easyrsa
是自定义的镜像名称,可自行替换为自己的镜像名称。
生成 SSL 证书
初始化证书
首先,需要在 easy-rsa 镜像中初始化证书。在 easy-rsa/easyrsa3 目录中运行以下命令:
$ docker run --init --rm -it -v $PWD:/easy-rsa/easyrsa3 -w /easy-rsa/easyrsa3 my-easyrsa /bin/bash
执行后,会进入 easy-rsa 容器的 shell,运行以下命令初始化证书:
$ ./easyrsa init-pki
生成 CA 证书
生成证书前,需要先生成 CA 证书,输入以下命令初始化 CA 证书:
$ ./easyrsa build-ca
该命令会生成根证书和私钥,并存储到 pki
目录中。生成的证书有效期可以根据需要进行配置。
生成服务器证书
在生成服务器证书时,需要指定证书名称,例如 example.com
。输入以下命令生成服务器证书:
$ ./easyrsa build-server-full example.com nopass
生成客户端证书
客户端证书可以分发给需要连接该服务器的用户,例如需要为某个用户生成证书时,可以输入以下命令:
$ ./easyrsa build-client-full client1.example.com nopass
该命令会为 client1.example.com
生成客户端证书。在客户端连接时,需要同时提供证书和私钥。
部署 SSL 证书
Easy-rsa 工具将生成的 SSL 证书存储在 pki
目录中。将该目录存储到需要使用 SSL 的服务中,比如可以将证书挂载到 Nginx 容器中:
docker run -d -p 443:443 -v /path/to/pki:/etc/nginx/certs nginx
总结
本文介绍了使用 Docker 和 Easy-rsa 工具生成 SSL 证书的方法。在生产环境下,存在大量的 SSL 证书需求,使用 Docker 可以方便地进行批量处理。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6466dd57968c7c53b0747d09