运维专题.Docker+Nginx服务器的SSL证书安装

运维专题
Docker+Nginx服务器的SSL证书安装

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/136673190
HuaWei:https://bbs.huaweicloud.com/blogs/423693

【介绍】:在宿主机上集中管理和在每个Docker容器内单独管理SSL证书,每种方法都有其优缺点,但对于大多数生产环境而言,在宿主机上集中管理SSL证书通常是更优的选择。本文针对于这种方案进行了具体草果过程的介绍。

在这里插入图片描述


1. 概述

在现代的网络架构中,确保通信的安全性已经成为了一个不可或缺的要求。SSL证书的安装和配置,特别是在使用 DockerNginx 的环境中,是保护数据传输,防止中间人攻击的重要手段。本文将详细介绍如何在Docker容器化的环境中,配合 Nginx 服务器,获取、存放以及配置 SSL 证书,以确保Web应用的安全通信。
首先,我们将探讨如何获取SSL证书并决定其在系统中的存放位置。随后,我们将详细说明在宿主机上安装和配置SSL证书的步骤,包括如何在Nginx配置文件中引用这些证书文件,以及如何设置 HTTPHTTPS 的自动跳转,以增强 Web 应用的安全性。
此外,我们还将讨论 SSL 证书在 Docker 容器化环境中的管理策略,包括在宿主机上集中管理 SSL 证书与在每个 Docker 容器内单独管理 SSL 证书的利弊。最后,我们将介绍如何配置 Nginx 作为反向代理,将加密的 HTTPS 流量正确地路由到后端的 Docker 容器,从而完成对Web应用安全性的全面加固。

2. 证书的获取与存放

2.1 购买和下载SSL证书

首先你需要现在华为云、阿里云等等云服务提供商上购买一个SSL证书:

在这里插入图片描述

对于个人完整可以使用 **DV (Basic)**成本更低。
在这里插入图片描述

然后,下载到本地,比如阿里云,登录数字证书管理服务控制台。:

在左侧导航栏,单击SSL 证书。

在SSL 证书页面,定位到目标证书,在操作列,单击下载。

在服务器类型为Nginx的操作列,单击下载。
在这里插入图片描述
在这里插入图片描述

解压缩已下载的SSL证书压缩包

在这里插入图片描述

CSR生成方式证书压缩包包含的文件
系统生成选择已有的CSR证书文件(PEM格式):Nginx支持安装PEM格式的文件,PEM格式的证书文件是采用Base64编码的文本文件,且包含完整证书链。解压后,该文件以证书ID_证书绑定域名命名。私钥文件(KEY格式):默认以证书绑定域名命名。
手动填写如果您填写的是通过数字证书管理服务控制台创建的CSR,下载后包含的证书文件与系统生成的一致。如果您填写的不是通过数字证书管理服务控制台创建的CSR,下载后只包括证书文件(PEM格式),不包含证书密码或私钥文件。您可以通过证书工具,将证书文件和您持有的证书密码或私钥文件转换成所需格式。转换证书格式的具体操作,请参见证书格式转换。

2.2 讨论:在哪里存放证书?

Q:假设云服务器宿主机中有多个Docker容器,包含多个容器运行着不同的服务(前端和后端),并且每个容器都有自己的Nginx实例。那么证书放在哪里呢?

A:如何处理SSL证书取决于你的具体架构和安全需求。

在宿主机上的Nginx中安装证书?

如果你在宿主机上运行了一个 Nginx 实例,用作反向代理来处理来自外部的请求并将其转发到相应的容器,那么在这个 Nginx 实例上安装 SSL 证书是最合适的。这种方法的优点是:

集中管理 SSL 证书:你只需要在一个地方(宿主机上的 Nginx )配置和更新 SSL 证书。

  • 安全性:宿主机上的 Nginx 作为入口点,可以提供额外的安全层,如SSL终端和 HTTPHTTPS 的重定向。

  • 性能SSL 终端发生在宿主机上,减轻了容器内 Nginx 的负担。
    要在宿主机上的Nginx中安装证书,你可以遵循阿里云文档中的步骤,将证书文件放在宿主机的某个目录下,并在Nginx配置文件中指向这些文件。

在每个Docker容器中安装证书?

如果你没有在宿主机上运行Nginx实例,而是让每个容器都有自己的Nginx来处理SSL,那么你需要在每个需要SSL的容器中安装证书。这种方法的优点是:
灵活性:每个服务可以独立管理自己的SSL证书,这在处理多个域名时特别有用。
隔离性:服务之间的SSL配置完全独立,增加了配置的灵活性。
要在Docker容器中安装证书,你可以:

  1. 创建一个包含证书的Docker卷,并在启动容器时将其挂载到容器内的适当位置。
  2. 在Dockerfile中添加证书,将证书文件复制到镜像中,这样每个容器实例都会包含这些证书文件。
  3. 使用Docker Secret或类似机制(如果你使用Docker Swarm或Kubernetes)来安全地管理和存储证书。

推荐做法!

对于大多数生产环境,在宿主机上的Nginx中安装证书通常是更好的选择,因为它简化了证书管理,并提供了一个集中的点来处理安全性和性能优化。你可以将宿主机上的Nginx配置为反向代理,根据请求的不同将流量路由到不同的容器
无论哪种方法,确保你的SSL证书私钥文件 安全,避免在源代码管理系统(如Git)中暴露这些敏感文件。

3. 在宿主机中安装证书

远程服务器,登陆Docker容器。在宿主机安装Nginx服务器:

apt update
apt upgrade
apt install nginx -y

在Nginx配置目录下新建证书文件夹:

mkdir /etc/nginx/cert

然后将证书文件和私钥文件上传到Nginx服务器的证书目录(/etc/nginx/cert)。

编辑Nginx配置文件nginx.conf,修改与证书相关的配置:

vim /etc/nginx/nginx.conf

在nginx.conf中定位到server属性配置。(vim中,使用“/”输入文本可以用于定位),如果(新版)初始化没有注释掉的模板server字段也可以自己输入。

server {
     #HTTPS的默认访问端口443。
     #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
     listen 443 ssl;
     
     #填写证书绑定的域名
     server_name <yourdomain>;
 
     #填写证书文件绝对路径
     ssl_certificate cert/<cert-file-name>.pem;
     #填写证书私钥文件绝对路径
     ssl_certificate_key cert/<cert-file-name>.key;
 
     ssl_session_cache shared:SSL:1m;
     ssl_session_timeout 5m;
	 
     #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
     #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

     #表示优先使用服务端加密套件。默认开启
     ssl_prefer_server_ciphers on;
 
 
    location / {
           root html;
           index index.html index.htm;
    }
}

在这里插入图片描述

设置HTTP请求自动跳转HTTPS(如果需要)。

server {
    listen 80;
    #填写证书绑定的域名
    server_name <yourdomain>;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
    location / {
        index index.html index.htm;
    }
}

重启Nginx服务。

ngixn -s stop
nginx -c /etc/nginx/nginx.conf

或者直接;

nginx -s reload

验证SSL证书是否配置成功
证书安装完成后,您可通过访问证书的绑定域名验证该证书是否安装成功。

4. 配置为反向代理到容器

为了配置Nginx作为反向代理,并确保容器化的Web应用通过SSL证书安全地处理HTTPS请求,您需要按照以下步骤操作:

1 确保SSL证书已正确安装

首先,确保您已按照前面的步骤在宿主机的Nginx服务器上安装并配置了SSL证书。这包括证书文件(.pem)和私钥文件(.key)的正确放置,以及Nginx配置文件(nginx.conf)中对这些文件的正确引用。

2 配置Nginx作为反向代理

接下来,您需要修改Nginx的配置文件,以将HTTPS请求代理到后端的Docker容器。这通常涉及到在Nginx的配置文件中添加一个新的server块,专门用于处理加密的HTTPS流量,并将其转发到正确的容器。
打开Nginx配置文件(例如,/etc/nginx/nginx.conf),并添添加加或修改一个server块,如下所示:

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/nginx/cert/your-cert-file.pem;
    ssl_certificate_key /etc/nginx/cert/your-cert-file.key;

    # 其他SSL配置...

    location / {
        # 假设您的Docker容器在本地端口8080上运行
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3 重启Nginx服务

修改配置文件后,您需要重启Nginx服务以应用这些更改。可以使用下面的命令:

ngixn -s stop
nginx -c /etc/nginx/nginx.conf

或者如果你的Nginx已经启动,则可以直接运行命令:

nginx -s reload

4. 验证你的配置

最后,通过访问您的域名(https://yourdomain.com)来测试配置是否正确。如果一切配置正确,您的请求应该会通过HTTPS安全地被代理到后端的Docker容器,并且浏览器不会显示安全警告。

通过以上步骤,您可以确保您的Docker容器化的Web应用能够安全地处理HTTPS请求,同时利用Nginx作为反向代理来增强安全性和性能。

5. 结论

在当今的网络环境中,确保Web应用的通信安全十分重要。通过在Docker和Nginx的环境中正确安装和配置SSL证书,我们不仅能够保护数据传输过程中的安全,防止潜在的中间人攻击,还能够提升用户对网站的信任度。本文详细介绍了获取SSL证书、决定证书存放位置、在宿主机上安装和配置SSL证书的步骤,以及如何将Nginx配置为反向代理,确保HTTPS流量能够正确路由到后端的Docker容器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/455196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣977. 有序数组的平方

思路&#xff1a;暴力法&#xff1a;全部平方&#xff0c;然后调用排序API&#xff0c;排序算法最快是N*log(N)时间复制度。 双指针法&#xff1a;要利用好原本的数组本就是有序的数组这个条件&#xff0c; 只是有负数 导致平方后变大了&#xff0c;那么平方后的最大值就是在两…

【机器学习智能硬件开发全解】(三)—— 政安晨:嵌入式系统基本素养【计算机体系结构中的CPU关系】

通过上一篇文章的学习: 【机器学习智能硬件开发全解】&#xff08;二&#xff09;—— 政安晨&#xff1a;嵌入式系统基本素养【处理器原理】https://blog.csdn.net/snowdenkeke/article/details/136662796我们已经知道了CPU的设计流程和工作原理&#xff0c;紧接着一个新问题…

武汉云仓酒庄:品牌细节,用心呈现葡萄酒文化新高度

武汉云仓酒庄&#xff1a;品牌细节&#xff0c;用心呈现葡萄酒文化新高度 在繁忙的武汉都市中&#xff0c;有一处静谧的角落&#xff0c;那便是云仓酒庄。这里不仅仅是葡萄酒的汇聚之地&#xff0c;更是葡萄酒文化传播与交流的重要平台。近日&#xff0c;武汉云仓酒庄以其精心…

【LeetCode热题100】2. 两数相加(链表)

一.题目要求 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数…

面试复盘记录(数据开发)

一、apple外包1.矩阵顺时针旋转遍历2.两表取差集 二、 一、apple外包 没问理论&#xff0c;就两个算法题。 1.矩阵顺时针旋转遍历 Given an m x n matrix, return all elements of the matrix in spiral order.Example 1:Input: matrix [[1,2,3],[4,5,6],[7,8,9]] Output: …

叶子分享站PHP源码

叶子网盘分享站PHP网站源码&#xff0c;创建无限级文件夹&#xff0c;上传文件&#xff0c;可进行删除&#xff0c;下载等能很好的兼容服务器。方便管理者操作&#xff0c;查看更多的下载资源以及文章&#xff0c;新增分享功能&#xff0c;异步上传文件/资源等 PHP网盘源码优势…

VUE内盘期货配资软件源码国际外盘二合一

开发一个Vue内盘期货配资软件源码&#xff0c;同时兼容国际外盘二合一的功能&#xff0c;是一个复杂且专业的任务&#xff0c;涉及前端Vue.js框架的使用、后端服务器处理、数据库管理、实时交易接口对接等多个方面。下面是一些关于开发此类软件的基本指导和考虑因素&#xff1a…

Docker拉取镜像存储不足

在使用Docker时&#xff0c;我们经常遇到一个问题&#xff0c;就是拉取镜像时提示存储空间不足。这是因为Docker在拉取镜像时需要将镜像文件下载到本地存储中&#xff0c;而有时本地存储空间不足以容纳完整的镜像文件。 本文将介绍一些解决这个问题的方法&#xff0c;并提供相…

Diffusion 公式和代码解读

1、训练过程 下面就是代码实现过程 2、训练过程的损失函数。也就是上面的公式。 二、采样过程&#xff0c;生成过程&#xff1a;

BufferWriter类解析

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

【LLMs+小羊驼】23.03.Vicuna: 类似GPT4的开源聊天机器人( 90%* ChatGPT Quality)

官方在线demo: https://chat.lmsys.org/ Github项目代码&#xff1a;https://github.com/lm-sys/FastChat 官方博客&#xff1a;Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90% ChatGPT Quality 模型下载: https://huggingface.co/lmsys/vicuna-7b-v1.5 | 所有的模…

基于恒功率PQ控制的三电平并网逆变器MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 三相 T 型三电平逆变器电路如图所示&#xff0c;逆变器主回路由三个单相 T 型逆变器组成。 直流侧输入电压为 UPV&#xff0c;直流侧中点电位 O 设为零电位&#xff0c;交流侧输出侧是三相三线制连…

《互联网的世界》第七讲-能源

本想聊聊 tcp 和 quic&#xff0c;但这些都属于术的范畴&#xff0c;变化多端&#xff0c;等孩子们长大了又不知变成什么样子了&#xff0c;趁这段时间在家&#xff0c;还是得讲一些相对不变的东西&#xff0c;或法或势。 从 安阳卖血糕的精巧篦子 想到如何做圆米粉和圆面条&a…

[ThinkPHP]Arr返回1

$detailId (int)Arr::get($detail, null); var_dump($detailId); 打印结果&#xff1a;int(1) 原因&#xff1a; vendor/topthink/think-helper/src/helper/Arr.php

Python使用openpyxl库或pandas库创建.xlsx格式的Excel文件,并向文件不同的sheet按行或按列写入内容

import openpyxl# 创建-一个Workbook对象 wb openpyxl.Workbook()# 创建多个工作表 sheet1 wb.active sheet1.title "s1"sheet2 wb.create_sheet("s2")# 在不同的工作表中写入数据 sheet1["A1"] Data for Sheet1 sheet1["A2"] D…

一.java介绍和idea基础使用

java技术体系 Java技术体系说明Java SE(Java standard Edition):标准版Java技术的核心和基础Java EE(Java Enterprise Edition):企业版企业级应用开发的一套解决方案Java ME(Java Micro Edition):小型版针对移动设备应用的解决方案&#xff08;认可少&#xff0c;主要是安卓和…

Netty线程模型详解

文章目录 概述单Reactor单线程模型单Reactor多线程模型主从Reactor多线程模型 概述 Netty的线程模型采用了Reactor模式&#xff0c;即一个或多个EventLoop轮询各自的任务队列&#xff0c;当发现有任务时&#xff0c;就处理它们。Netty支持单线程模型、多线程模型和混合线程模型…

彩虹知识付费模板MangoA全开源包含秒杀/抽奖/社群/推送等功能

二次开发增加以下功能每日秒杀每日签到官方社群多级分销在线抽奖项目投稿 每日秒杀 每日签到 官方社群 多级分销 在线抽奖 项目投稿 下载地址&#xff1a;https://pan.xunlei.com/s/VNstMfOecGliiqew7UIorsOnA1?pwdhywi#

Flink 的时间属性及原理解析

Flink的API大体上可以划分为三个层次&#xff1a;处于最底层的ProcessFunction、中间一层的DataStream API和最上层的SQL/Table API&#xff0c;这三层中的每一层都非常依赖于时间属性。时间在Flink中的地位如下图所示&#xff1a; 时间属性是流处理中最重要的一个方面&#…

cms垃圾回收

cms垃圾回收 CMS概述CMS收集器整体流程初始标记并发标记重新标记并发清除 CMS卡表什么是卡表(card table)什么是mod-union table CMS概述 CMS(Concurrent Mark Sweep)收集器是Java虚拟机中的一种老年代(old Generation)垃圾收集器&#xff0c;他主要目标是减少垃圾收集时的应用…