在当前互联网时代,随着网络安全的要求不断提高,越来越多的网站开始使用 https 协议来保障用户信息的安全。而 SSL(Secure Sockets Layer)证书则是实现 https 加密的必要条件之一。在使用 Docker 部署应用时,如何为应用配置 SSL 证书呢?
本文将介绍如何在 Docker 容器中配置 SSL 证书,详细说明证书的安装和验证两个步骤,并带有示例代码供读者参考。
安装 SSL 证书
首先,我们需要获取一份 SSL 证书。一般情况下,可以向 HTTPS 证书颁发机构购买。如果您想自己创建证书,可以借助 openssl
工具。下面以购买证书的方式为例进行介绍。
首先,需要在证书颁发机构的网站上购买证书。购买流程略过,这里注意需要生成好证书的
*.crt
文件和私钥的*.key
文件。然后,在 Dockerfile 文件中复制
*.crt
和*.key
文件,并将其放置到容器的指定文件夹(下文以./cert
目录为例)。FROM node:latest COPY ./cert/*.crt /etc/ssl/certs/ COPY ./cert/*.key /etc/ssl/private/ ...
最后,在容器启动命令中映射出 443 端口,并指定证书的位置和密码(如果有的话)。
$ docker run \ -p 443:443 \ -v /etc/ssl/certs:/etc/ssl/certs \ -v /etc/ssl/private:/etc/ssl/private \ -e SSL_CERT_FILE='/etc/ssl/certs/your-domain.crt' \ -e SSL_KEY_FILE='/etc/ssl/private/your-domain.key' \ -e SSL_KEY_PASSWORD='your-password' \ your-image
至此,SSL 证书的安装就完成了。接下来,我们需要验证证书是否配置成功。
验证 SSL 证书
验证证书的正确性主要包含两个步骤:一是验证证书是否正确安装,二是验证证书是否可靠。
验证证书是否正确安装
在容器中运行以下命令:
$ openssl s_client -connect your-domain:443
其中,your-domain
指的是您的域名。如果证书安装正确,您应该能够看到以下输出:
// javascriptcn.com 代码示例 CONNECTED(00000003) depth=2 C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority verify return:1 depth=1 C = US, ST = California, L = San Francisco, O = "Cloudflare, Inc.", CN = Cloudflare Inc ECC CA-3 verify return:1 depth=0 C = US, ST = California, L = San Francisco, O = "Cloudflare, Inc.", CN = your-domain verify return:1 --- Certificate chain 0 s:C = US, ST = California, L = San Francisco, O = "Cloudflare, Inc.", CN = your-domain i:C = US, ST = California, L = San Francisco, O = "Cloudflare, Inc.", CN = Cloudflare Inc ECC CA-3 1 s:C = US, ST = California, L = San Francisco, O = "Cloudflare, Inc.", CN = Cloudflare Inc ECC CA-3 i:C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority 2 s:C = US, O = "DigiCert Inc", OU = www.digicert.com, CN = DigiCert Global Root CA i:C = US, O = "DigiCert Inc", OU = www.digicert.com, CN = DigiCert Global Root CA --- Server certificate ...
输出的信息包含了证书的各种信息,可以帮助我们验证证书是否正确安装。其中,如果可以看到 verify return:1
,说明证书已经成功验证。
验证证书是否可靠
为了验证证书是否可靠,我们可以借助 ssltest.py
工具,这是一个 Python 脚本,可以检测服务器上的 SSL 配置是否正确,以及证书是否可靠。可以在 GitHub 上下载:https://github.com/drwetter/testssl.sh 。
下载完成后,在容器中运行以下命令启动检测:
$ python ssltest.py your-domain
其中,your-domain
指的是您的域名。如果检测通过,您应该能够看到输出类似于以下的信息:
// javascriptcn.com 代码示例 ########################################################## ## ## testssl.sh 3.0dev from https://testssl.sh/dev/ ## (sha1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) ## ########################################################## Using "OpenSSL 1.1.1h xxxxxxxx xx xxx xxxx". .... .... .... ..
至此,我们可以验证 SSL 证书的正确性了。
示例代码
下面是一个示例的 Dockerfile 文件,它在容器中配置了 SSL 证书:
// javascriptcn.com 代码示例 FROM node:latest # 将证书文件复制到容器中 COPY ./cert/*.crt /etc/ssl/certs/ COPY ./cert/*.key /etc/ssl/private/ # 指定证书路径和密码 ENV SSL_CERT_FILE='/etc/ssl/certs/your-domain.crt' ENV SSL_KEY_FILE='/etc/ssl/private/your-domain.key' ENV SSL_KEY_PASSWORD='your-password' # 创建 app 目录并放置代码 RUN mkdir /app WORKDIR /app COPY . . # 安装依赖和打包 RUN npm install RUN npm run build # 开放 443 端口,并启动容器 EXPOSE 443 CMD ["npm", "start"]
在启动容器时,我们需要使用以下命令(其中,<your-image>
表示您的 Docker 镜像名):
$ docker run \ -p 443:443 \ -v /etc/ssl/certs:/etc/ssl/certs \ -v /etc/ssl/private:/etc/ssl/private \ -e SSL_CERT_FILE='/etc/ssl/certs/your-domain.crt' \ -e SSL_KEY_FILE='/etc/ssl/private/your-domain.key' \ -e SSL_KEY_PASSWORD='your-password' \ <your-image>
总结
本文介绍了在 Docker 容器中配置 SSL 证书的方法,包括证书的安装和验证两个步骤,并提供了示例代码供读者参考。希望通过本文的介绍,读者能够掌握在 Docker 容器中配置 SSL 证书的实现方法。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6542160b7d4982a6ebbbbc67