根据docker部署nginx并且实现https

目录

一、Docker中启用HTTPS有几个重要的原因

二、https介绍

三、https过程

四、安装docker-20.10.18

五、如何获取证书

通过阿里云获取证书

六、docker部署nginx并且实现https

6.1准备证书

6.2准备nginx.conf 和 index.html文件

6.3生成容器

6.4浏览器验证证书


一、Docker中启用HTTPS有几个重要的原因

  1. 安全性:HTTPS通过加密数据传输,可以确保数据在传输过程中不被窃听或篡改。这对于保护敏感信息(如用户凭据、支付信息等)的传输至关重要。

  2. 数据完整性:HTTPS可以验证数据的完整性,确保数据在传输过程中没有被篡改或损坏。

  3. 信任度:使用HTTPS可以增强用户对网站的信任度,因为浏览器通常会显示安全的锁图标或绿色地址栏来指示连接是安全的。

  4. SEO优化:搜索引擎(如Google)通常会更喜欢使用HTTPS的网站,并将其排名更靠前。因此,启用HTTPS可以对网站的搜索引擎优化(SEO)产生积极影响。

  5. 合规性:一些法规和标准要求网站必须使用HTTPS来保护用户数据,如GDPR(欧盟一般数据保护条例)。

总的来说,启用HTTPS可以提高网站的安全性、可信度,同时符合法规要求,因此在Docker中启用HTTPS是一个很好的实践。

二、https介绍

Web网站的登录页面都是使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议,HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

三、https过程

  • 客户端发起HTTPS请求

用户在浏览器里输入一个 https 网址,然后连接到服务器的 443 端口

  • 服务端的配置 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥

  • 传送服务器的证书给客户端 证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等

  • 客户端解析验证服务器证书 这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框提示证书存在问题。如果证书没有问题,那么就生成一个随机值,然后用证书中公钥对该随机值进行非对称加密

  • 客户端将加密信息传送服务器 这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加感解密了

  • 服务端解密信息 服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值

  • 服务器加密信息并发送信息 服务器将数据利用随机值进行对称加密,再发送给客户端

  • 客户端接收并解密信息 客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容

四、安装docker-20.10.18

systemctl stop firewalld.service
setenforce 0#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 
-----------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
-----------------------------------------------------------------------------------------#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce-20.10.18 docker-ce-cli containerd.io  ##安装20版本systemctl start docker.service
systemctl enable docker.service
-----------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
-----------------------------------------------------------------------------------------docker version   #查看 docker 版本信息

五、如何获取证书

  • 在阿里云、华为云、腾讯云等云服务商那里申请一年有效期的免费证书或者购买证书

  • 在本地使用 openssl、mkcert、cfssl、certbot(Let's Encrypt)的工具生成本地私钥证书

通过阿里云获取证书

https://www.aliyun.com/product/cas?userCode=r3yteowb

六、docker部署nginx并且实现https

6.1准备证书

cd /opt
--------------------------------------
vim certificate.shCA_SUBJECT="/O=kgc/CN=ca.kgc.com"
SUBJECT="/C=CN/ST=js/L=nj/O=kgc/CN=www.kgc.com"
SERIAL=34
EXPIRE=202002
FILE=kgc.comopenssl req  -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 202002 -out ca.crtopenssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key  -subj $SUBJECT -out ${FILE}.csropenssl x509 -req -in ${FILE}.csr  -CA ca.crt -CAkey ca.key -set_serial $SERIAL  -days $EXPIRE -out ${
FILE}.crtchmod 600 ${FILE}.key ca.key

bash certificate.sh #执行该脚本后执行后会生成ca.crt  ca.key  certificate.sh  kgc.com.crt  kgc.com.csr  kgc.com.key 这几个文件,需要对其进行处理   
#  kgc.com.crt(购买者)   ca.crt(b颁发者)   www.kgc.com.key(验证钥匙)cat kgc.com.crt ca.crt > www.kgc.com.crt
mv kgc.com.key www.kgc.com.key

#在/mnt下创建一个cert的文件夹,用于存放证书文件
[root@localhost opt]#hostnamectl set-hostname zzz
[root@localhost opt]#su
[root@zzz opt]#mkdir /mnt/cert
[root@zzz opt]#mv /opt/www.kgc.com.crt /opt/www.kgc.com.key /mnt/cert
[root@zzz opt]#
[root@zzz opt]#ll /mnt/cert
总用量 8
-rw-r--r-- 1 root root 2201 5月   4 13:59 www.kgc.com.crt
-rw------- 1 root root 1704 5月   4 13:56 www.kgc.com.key

6.2准备nginx.conf 和 index.html文件

[root@zzz opt]#cd /mnt
[root@zzz mnt]#ls
cert
[root@zzz mnt]#echo "hello nanjing" > index.html
[root@zzz mnt]#ls
cert  index.html
[root@zzz mnt]#cat index.html 
hello nanjing
[root@zzz mnt]#rz -E
rz waiting to receive.
[root@zzz mnt]#ls
cert  index.html  nginx(1).conf
[root@zzz mnt]#mv nginx\(1\).conf nginx.conf
[root@zzz mnt]#ls
cert  index.html  nginx.conf
[root@zzz mnt]#pwd
/mnt
[root@zzz mnt]#
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;events {worker_connections 1024;
}http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 4096;include             /etc/nginx/mime.types;default_type        application/octet-stream;server {listen       80;listen 443 ssl;   ssl_certificate /mnt/www.kgc.com.crt;ssl_certificate_key /mnt/www.kgc.com.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name www.kgc.com;root     /usr/share/nginx/html;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
}

6.3生成容器

​
[root@zzz mnt]#docker run -itd -p 8080:80 -p 8082:443 -v /mnt/nginx.conf:/etc/nginx/nginx.conf -v /mnt/index.html:/usr/share/nginx/html/index.html -v /mnt/cert/:/mnt/ --name nginx nginx:latest 
48944bdf4b31909ee2fc37c3acd16bf1fd4f804f6a00e9a011b9f8a5223657b5
[root@zzz mnt]#docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS         PORTS                                                                            NAMES
48944bdf4b31   nginx:latest   "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8082->443/tcp, :::8082->443/tcp   nginx
[root@zzz mnt]#
[root@zzz mnt]#docker images
REPOSITORY                      TAG               IMAGE ID       CREATED       SIZE
nginx                           latest            605c77e624dd   2 years ago   141MB#生成容器,指定容器内80端口映射到本机的8080端口,指定容器内443端口映射到本机的8082端口  
#将/mnt/nginx.conf挂载到容器内/etc/nginx/nginx.conf下,
#将/mnt/index.html挂载到容器内的/usr/share/nginx/html/index.html,将容器内的index.html覆盖掉
#将/mnt/cert挂载到容器内的/mnt下,/mnt/cert下的所有文件都会出现在容器的/mnt下
#别名为  nginx  使用 nginx:latest 镜像生成并启动

6.4浏览器验证证书

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

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

相关文章

2024年4月24日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.24,华为机试

2024年4月24日华为春招实习试题【三题】-题目题解在线评测,2024.4.24,华为机试 🏩题目一描述:输入格式输出格式样例1样例2样例3数据范围解题思路一:dfs解题思路二:直接二分查找哇!解题思路三&am…

MySQL数据库的初始化(创建库、创建表、向数据库添加测试数据)

MySQL数据库的初始化(创建库、创建表、向数据库添加测试数据) MySQL数据库简介MySQL创建一个新的数据库MySQL创建一张新的数据表简单(设置)表复杂(设置)表 填充测试数据SQL语句mysql>模式下输入的每句sq…

技术爱好者必看:如何用AI问答API彻底改变用户体验!

AI 问答 API 对接说明 我们知道,市面上一些问答 API 的对接还是相对没那么容易的,比如说 OpenAI 的 Chat Completions API,它有一个 messages 字段,如果要完成连续对话,需要我们把所有的上下文历史全部传递&#xff0…

FreeRtos内核源码分析(九)——协程

目录 一、协程简介 二、协程工作机制 2.1 协程控制块结构 2.2 协程管理方式 2.3 协程调度方式 2.4 协程通信机制 三、协程状态及状态切换 3.1 协程状态 3.2 状态切换 四、协程创建 五、协程调度分析 5.1 源码分析 5.2 逻辑图分析 六、协程通信 6.1 协程发送消息…

如何清除DNS缓存,刷新DNS

大家在使用域名访问服务器的时候,经常会遇到一个问题,同一个局域网里的两台电脑,一台可以访问而另一台不行。这是为什么呢?这里我要和大家说下DNS缓存的问题,顾名思义,每台电脑都有DNS缓存,在域…

ElasticSearch 8.X 源码导入idea并配置环境启动调试(mac环境)

主要是用于自己记录配置流程 环境 IntelliJ IDEA 2024.1.1 (Community Edition) jdk17(可以安装jenv管理) macos 14.4.1 gradle 8.5 资源准备 先在官网下载elasticsearch源码(GitHub - elastic/elasticsearch: Free and Open, Distrib…

webservice和TCP类型接口测试

1.webservice类型接口 1.1.webservice类型接口介绍 Web服务(WebService)是一种基于网络的应用程序接口(API),可通过网络来进行通信和交互。它们使用标准化的协议和格式来进行通信,最常见的是使用XML&#…

AI图书推荐:利用生成式AI实现业务流程超自动化

《利用生成式AI实现业务流程超自动化》(Hyperautomation with Generative AI)这本书探索了广泛的用例和示例,展示了超自动化在不同行业、领域和特定部门的多样化应用, 让您熟悉UiPath、Automation Anywhere和IBM等流行工具和平台&…

LeetCode 105.从前序与中序遍历序列构造二叉树

LeetCode 105.从前序与中序遍历序列构造二叉树 1、题目 题目链接:105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树…

MVCC 详解

介绍 MVCC,全称 Multi-Version Concurrency Control,即多版本并发控制 MVCC的目的主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁。 这里的多版本指的是数据库中同时…

【GO】go语言中的HTTP标准库 - http编程

上一节已经学习了HTTP的基础知识,本章将学习关于go语言的HTTP编程,最重要的是掌握 net/http 包的用法,以及如何自己编写一个简单的Web服务端,通过客户端访问Server端等。 编写简单的Web 服务器 http.ListenAndServe 启动 Http S…

Unity开发中导弹路径散射的原理与实现

Unity开发中导弹路径散射的原理与实现 前言逻辑原理代码实现导弹自身脚本外部控制脚本 应用效果结语 前言 前面我们学习了导弹的追踪的效果,但是在动画或游戏中,我们经常可以看到导弹发射后的弹道是不规则的,扭扭曲曲的飞行,然后击…