运维专题.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容器。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】—— 代理模式

目录 &#xff08;一&#xff09;什么是代理模式 &#xff08;二&#xff09;为什么使用代理模式 &#xff08;三&#xff09;代理模式实现步奏 &#xff08;四&#xff09;代码示例 &#xff08;五&#xff09;代理模式优缺点 &#xff08;一&#xff09;什么是代理模式 …

备考2025年AMC8竞赛:吃透2000-2024年600道真题(免费赠送真题)

我们继续来随机看五道AMC8的真题和解析&#xff0c;根据实践经验&#xff0c;对于想了解或者加AMC8美国数学竞赛的孩子来说&#xff0c;吃透AMC8历年真题是备考最科学、最有效的方法之一。 即使不参加AMC8竞赛&#xff0c;吃透了历年真题600道和背后的知识体系&#xff0c;那么…

软考高级:需求变更管理过程概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

C++学习随笔(4)——类和对象的初探

本章我们来初步学习一下C中的类和对象&#xff01; 目录 1.类的引入 2.类的定义 类的两种定义方式&#xff1a; 3.类的访问限定符及封装 3.1 访问限定符 3.2 封装 4.类的作用域 5.类的实例化 6.类对象模型 6.1 如何计算类对象的大小 6.2 类对象的存储方式猜测 6.3 …

这个学习Python的神仙网站,后悔没早点发现

Python 作为时下最流行的编程语言&#xff0c;很多初学者都将它作为自学编程的首选。不管是有编程经验的开发者&#xff0c;还是新手小白&#xff0c;在这个 AIGC 时代&#xff0c; Python 都可以带你探索新世界。 入门 Python 绝非难事&#xff0c;但如何让自己坚持学下去是如…

用虚拟机安装win10超详细教程。

前言&#xff1a;安装中有任何疑问&#xff0c;可以在评论区提问&#xff0c;博主身经百战会快速解答小伙伴们的疑问 BT、迅雷下载win10镜像&#xff08;首先要下载win10的镜像&#xff09;&#xff1a;ed2k://|file|cn_windows_10_business_editions_version_1903_updated_sep…

Jmeter---跨越线程组传值

1. 创建两个线程组&#xff0c;并添加请求&#xff0c;设置变量并将其设置为全局变量 2. 设置全局变量&#xff1a;使用函数助手的 setProperty 函数&#xff0c;填写相应内容 3. 设置全局变量&#xff1a;创建一个beanShell&#xff0c;把函数生成的内容粘贴过来 4. 获取全局变…

六 超级数据查看器 讲解稿 详情1 概述

六 超级数据查看器 讲解稿 详情1 概述 点此此处 以新界面 打开B站 当前视频教程 APP下载地址 百度 下载地址 ​ 讲解稿全文&#xff1a; 大家好&#xff0c;今天我们讲解一下超级数据查看器详情界面。由于内容较多&#xff0c;讲解要分为7集&#xff0c;这是第一集 首…

【leetcode热题】寻找旋转排序数组中的最小值 II

难度&#xff1a; 困难通过率&#xff1a; 38.7%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如&#xff0c;数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的…

FastWiki v0.1.0发布!新增超多功能

FastWiki 发布 v0.1.0 https://github.com/239573049/fast-wiki/releases/tag/v0.1.0 更新日志 兼容OpenAI接口格式删除Blazor版本UI删除useEffect,解决可能存在问题的bug修复对话可以看到所有对话Merge branch ‘master’ of https://gitee.com/hejiale010426/fast-wiki更新…

搭建Hadoop3.x完全分布式集群

零、资源准备 虚拟机相关&#xff1a; VMware workstation 16&#xff1a;虚拟机 > vmware_177981.zipCentOS Stream 9&#xff1a;虚拟机 > CentOS-Stream-9-latest-x86_64-dvd1.iso Hadoop相关 jdk1.8&#xff1a;JDK > jdk-8u261-linux-x64.tar.gzHadoop 3.3.6&am…

软考高级:系统工程方法(霍尔三维结构、切克兰德方法等)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Python (用户登录、身份归属地查询添加异常处理、绘制多角星、电影信息提取)

任务一&#xff1a;用户登录 登录系统通常分为普通用户与管理员权限&#xff0c;在用户登录系统时&#xff0c;可以根据自身权限进行选择登录。本任务要求实现一个用户登录的程序&#xff0c;该程序分为管理员用户与普通用户&#xff0c;其中管理员账号密码在程序中设定&#…

04_拖动文件渲染在页面中

新建一个文件夹&#xff0c;跟之前一样&#xff0c;在 Vscode 终端里输入 yarn create electron-app Drag。 在 index.html 添加以下代码&#xff0c;JS 文件夹和 render.js 都是新创建的&#xff1a; 首先&#xff0c;css 文件一般和 html 结合使用&#xff0c;相当于 html 是…

Linux字符设备驱动开发一

linux字符设备驱动 0 驱动介绍1 字符设备驱动1.1 字符设备相关概念和结构体1.2 实现简单的字符设备模块1.3 创建字符设备1.4 总结 应用程序调用文件系统的API(open、close、read、write) -> 文件系统根据访问的设备类型&#xff0c;调用对应设备的驱动API -> 驱动对硬件进…

RedisCluster集群中的插槽为什么是16384个?

RedisCluster集群中的插槽为什么是16384个&#xff1f; CRC16的算法原理。 1.根据CRC16的标准选择初值CRCIn的值2.将数据的第一个字节与CRCIn高8位异或3.判断最高位&#xff0c;若该位为0左移一位&#xff0c;若为1左移一位再与多项式Hex码异或4.重复3至9位全部移位计算结束5…

基于SpringCache实现数据缓存

SpringCache SpringCache是一个框架实现了基本注解的缓存功能,只需要简单的添加一个EnableCaching 注解就能实现缓存功能 SpringCache框架只是提供了一层抽象,底层可以切换CacheManager接口的不同实现类即使用不同的缓存技术,默认的实现是ConcurrentMapCacheManagerConcurren…

20240313寻找集成联调交付的具体方式

集成联调交付&#xff08;Integrated Joint Debugging and Delivery&#xff09;是软件开发过程中的一个阶段&#xff0c;主要涉及将不同的软件模块或组件整合在一起&#xff0c;并进行联合调试和测试&#xff0c;以确保它们能够作为一个整体正常工作。这个过程通常发生在开发周…

云仓酒庄北京朝阳区旗舰店发布活动盛况:红酒品鉴沙龙共筑美好

原标题&#xff1a;云仓酒庄北京朝阳区旗舰店活动盛况&#xff1a;红酒品鉴沙龙与招商交流共筑美好未来 在繁忙的都市中&#xff0c;有一片静谧的天地&#xff0c;那便是云仓酒庄北京朝阳区旗舰店。这里不仅是红酒爱好者的聚集地&#xff0c;更是商业交流的新平台。近日&#…

C编程基础四十分笔记

都是一些基础的C语言 一 输入一个整数&#xff0c;计算这个整数有几位二 编写程序计算一个分布函数三 输入一个字符串&#xff0c;再随便输入一个字母&#xff0c;判断这个字母出现几次四 求 1到10的阶乘之和五 求一个球体体积六 写一个链表&#xff0c;存1&#xff0c;2&#…