【云原生】docker安全与https加密的超文本传输协议CA证书生成

news2024/10/6 0:33:20

目录

一、docker安全

二、http与https的区别

三、为什么要使用 SSL 证书?

四、https证书认证的过程

https单向认证的访问流程

https双向认证的访问流程

五、如何获取证书?

六、实操获取证书并验证

1、通过阿里云获取证书

2、通过mkcert获取证书

3、通过openssl获取证书


一、docker安全

docker容器使用安全注意点:
尽量别做的事:

  • 尽量不用 --privileged 运行容器(授权容器root用户拥有宿主机的root权限)
  • 尽量不用 --network host 运行容器(使用host网络模式共享宿主机的网络命名空间)
  • 尽量不在容器中运行 ssh 服务
  • 尽量不把宿主机系统的关键敏感目录挂载到容器中


尽量要做的事:

  • 尽量使用较小体积的镜像
  • 尽量以单一应用进程运行容器
  • 尽量在容器中使用最新稳定版本的应用
  • 尽量安装使用最新稳定版本的docker
  • 尽量以最低权限运行容器
  • 尽量使用官方提供的镜像或自己构建的镜像
  • 尽量给docker目录(默认/var/lib/docker/)分配独立的文件系统
  • 尽量以资源限制的方式运行容器 -m  --memory-swap  --cpu-quota   --cpu-shares --cpuset-cpus   --device-write-bps
  • 尽量以只读的方式挂载数据卷,持久化容器数据到宿主机的除外     -v 宿主机目录:容器数据卷目录:ro
  • 尽量设置容器的重启策略和次数   --restart always|on-failure:N
  • 尽量对镜像进行漏洞扫描

二、http与https的区别

HTTP与HTTPS的区别如下:

  1. 加密与安全性:HTTP是明文传输,数据在传输过程中容易被篡改和窃取;HTTPS通过SSL或TLS协议对数据进行加密传输,保证数据传输的安全性
  2. 数据完整性:HTTP没有提供数据完整性的保护机制,容易受到中间人攻击;HTTPS使用消息摘要算法来确保数据的完整性
  3. 身份验证:HTTP没有提供身份验证机制;HTTPS使用数字证书来验证服务器的身份
  4. 端口号HTTP使用的是80端口;HTTPS使用的是443端口

三、为什么要使用 SSL 证书?

HTTP协议无法加密数据,数据传输可能产生泄露、篡改或钓鱼攻击等问题,而启用HTTPS后,可帮助Web服务器和网站间建立可信的HTTPS协议加密链接,为网站安全加锁,保证数据安全传输。

四、https证书认证的过程

https单向认证的访问流程

 https的单向认证流程:
0)服务端会事先通过CA签发证书和私钥文件
1)客户端发送https请求到服务端的443端口
2)服务端会先返回一个包含公钥、证书有效期、CA机构等信息的证书给客户端
3)客户端受到服务端发来的证书后,会先用本地的CA证书校验服务端证书的有效性,如果证书有效,则继续,否则告警
4)客户端发送自己可支持的对称加密方案给服务端
5)服务端会选择加密程度最高的方案,并通过明文方式发送给客户端(与双向认证的核心区别)
6)客户端使用选择的加密方案生成随机会话密钥并通过证书中的公钥进行加密,再发送给服务端
7)服务端会用私钥进行解密获取客户端发来的随机会话密钥,并使用这个会话密钥加密要返回的报文,再发送给客户端
8)客户端也是这个会话密钥进行解密获取服务端返回的数据,之后双方可继续这个会话密钥进行加密和解密来实现密文通信

https双向认证的访问流程

https的双向认证流程:
0)服务端和客户端会事先通过CA签发服务端证书和私钥文件
1)客户端发送https请求到服务端的443端口
2)服务端会先返回一个包含公钥、证书有效期、CA机构等信息的证书给客户端
3)客户端收到服务端发来的证书后,会先用本地的CA证书校验服务端证书的有效性,如果证书有效,再将包含公钥的客户端证书发送给服务端
4)服务端收到客户端证书后也会校验证书的有效性,客户端还会发送自己可支持的对称加密方案给服务端
5)服务端会选择加密程度最高的方案,并通过客户端证书里的公钥加密后发送给客户端
6)客户端使用私钥解密获取选择的加密方案,并使用此加密方案生成随机会话密钥,再通过服务端证书中的公钥进行加密,再发送给服务端
7)服务端会用私钥进行解密获取客户端发来的随机会话密钥,并使用这个会话密钥加密要返回的报文,再发送给客户端
8)客户端也是这个会话密钥进行解密获取服务端返回的数据,之后双方可继续这个会话密钥进行加密和解密来实现密文通信

五、如何获取证书?

1)在阿里云、华为云、腾讯云等云服务商那里申请一年有效期的免费证书或者购买证书
2)在本地使用 openssl、mkcert、cfssl、certbot(Let's Encrypt)的工具生成本地私钥证书

六、实操获取证书并验证

1、通过阿里云获取证书

https://www.aliyun.com/product/cas?userCode=r3yteowb
##阿里云购买数字证书

2、通过mkcert获取证书

[root@localhost ~]#mkdir mkcert_list
[root@localhost ~]#cd mkcert_list/
[root@localhost ~/mkcert_list]#mkcert www.xueyin.com

[root@localhost ~/mkcert_list]#ls
www.xueyin.com-key.pem  www.xueyin.com.pem

 

    server {
        listen       443 ssl; #SSL访问端口号为 443
        server_name  www.xueyin.com; #指定绑定证书的域名
        root         /usr/share/nginx/html;
        ssl_certificate /root/mkcert_list/www.xueyin.com.pem; #指定服务端证书文件路径
        ssl_certificate_key /root/mkcert_list/www.xueyin.com-key.pem; #指定服务端私钥文件路径
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL服务器端支持的协议版本
        ssl_prefer_server_ciphers  on;
...
}

 

3、通过openssl获取证书

//用 ca 证书签发 server 端证书
创建服务器私钥
openssl genrsa -out server-key.pem 4096

生成证书签名请求文件(csr文件)
openssl req -new -key server-key.pem -sha256 -subj "/CN=*" -out server.csr

创建ca私钥
openssl genrsa -out ca-key.pem 4096		
----------------------------------------------------------------------------------------------------------
genrsa:使用RSA算法产生私钥
-aes256:使用256位密钥的AES算法对私钥进行加密,这样每次使用私钥文件都将输入密码,可省略
-out:输出文件的路径,若未指定输出文件,则为标准输出
4096:指定私钥长度,默认为1024。该项必须为命令行的最后一项参数
----------------------------------------------------------------------------------------------------------

创建ca证书
openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem			#输入123123
----------------------------------------------------------------------------------------------------------
req:执行证书签发命令
-new:新证书签发请求
-x509:生成x509格式证书,专用于创建私有CA时使用
-days:证书的有效时长,单位是天
-key:指定私钥路径
-sha256:证书摘要采用sha256算法
-subj:证书相关的用户信息(subject的缩写)
-out:输出文件的路径
----------------------------------------------------------------------------------------------------------

使用ca 证书与私钥证书签发服务端签名证书,输入 123123,(需要签名请求文件,ca 证书,ca 密钥)
openssl x509 -req -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -days 1000 -out server-cert.pem
----------------------------------------------------------------------------------------------------------
x509:生成x509格式证书
-req:输入csr文件
-in:要输入的csr文件
-CA:指定ca证书的路径
-CAkey:指定ca证书的私钥路径
-CAcreateserial:表示创建证书序列号文件,创建的序列号文件默认名称为ca.srl
----------------------------------------------------------------------------------------------------------

准备nginx的测试文件

    server {
        listen       443 ssl;
        server_name  www.benet.com;
        ssl_certificate /root/openssl/server-cert.pem;
        ssl_certificate_key /root/openssl/server-key.pem;
        ssl_session_timeout  5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        location ~ \.html$ {
            root   html;
            index  index.html index.htm;
        }
    }

 

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

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

相关文章

Flutter的安装与环境配置

一、下载安装Futter: 1、Flutter中文文档: 安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 2、下载 Futter SDK: Flutter中文文档 里面有,下载完成之后找个文件夹解压出来,最好不要将 Flu…

GoLang和GoLand的安装和配置

1. GoLang 1.1 特点介绍 Go 语言保证了既能达到静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容 Go 语言:Go C Python , 说明 Go 语言既有 C 静态语言程序的运行速度,又能达到 Python 动态语…

编程实战实例分享,棋牌室计时计费管理系统软件教程

编程实战实例分享,棋牌室计时计费管理系统软件教程 一、前言 以下编程实例以 佳易王棋牌计时计费软件V17.8为例说明 1、开始计时和等待中,图片自动识别,自动匹配 2、开始计时后,系统记录开始时间,并直观显示所用的时…

开源项目MessageNest打造个性化消息推送平台多种通知方式

今天介绍一个开源项目,Message Nest - 可以打造个性化消息推送平台,整合邮件、钉钉、企业微信等多种通知方式。定制你的消息,让通知方式更灵活多样。 开源地址: https://github.com/engigu/Message-Push-Nest 测试平台 系统&am…

网安人必看!CISP家族顶流证书攻略

网络安全已成为当今的热门领域,证书在职业发展中的重要性不言而喻。但是,证书市场五花八门,选择适合自己的证书可是个大问题。别担心,今天我们就来聊聊CISP家族的几个热门认证,让你在网络安全领域的发展更加顺利&#…

Android存储系统基础知识

英文原版链接→ Android存储系统概览图(图片模糊的话请拖动图片至新标签页打开): 从 Android 的角度来看 → 内部存储和 → 外部存储: 内部存储 内部存储只能通过已取得 root 权限的设备进行访问。 应用程序包保存在:…

家政小程序开发

随着人民生活水平的提高,我国老龄化日益增加,越来越多的家庭对家政服务需求也日益提升。目前,家政服务业已经成为了人们日常生活中不可缺少的一部分,家政服务市场具有较大的发展潜力。 近几年,家政服务市场规模呈快速…

驱动开发KMDF编译时:cannot open sourcefile “device.tmh“

有人说 设置项目的 WPP Tracing -> 设置 "Run Wpp Tracing" 为 YES,但是属性页压根没有这玩意啊?咋回事呢? 别人的工程属性页是这样的,这是为什么?

IT运维如何帮助企业降本增效?

IT监控运维管理技术发展应用和趋势 1、智能运维 随着人工智能和大数据技术的发展,智能运维将成为IT监控运维管理的重要趋势。通过利用机器学习、深度学习等技术,实现对IT系统的自动化监控、故障预测和智能维护,提高运维效率和质量。 2、容…

数字化转型对企业发展有哪些帮助?

数字化转型利用技术增强流程、运营和客户体验,在业务发展中发挥着至关重要的作用。以下是数字化转型促进企业发展的一些助力: 1.提高效率和生产力: 日常任务和流程的自动化有助于简化操作,减少完成它们所需的时间和精力。数字工…

瑞_数据结构与算法_红黑树

文章目录 1 什么是红黑树1.1 红黑树的背景1.2 红黑树的特性 ★★★ 2 红黑树的Java实现2.1 红黑树颜色枚举类Color2.2 红黑树节点类Node2.2.1 实现判断是否是左孩子方法isLeftChild()2.2.2 实现查找叔叔节点方法uncle()2.2.3 实现查找兄弟节点方法sibling() 2.3 红黑树类RedBla…

《Pandas 简易速速上手小册》第1章:Pandas入门(2024 最新版)

文章目录 1.1 Pandas 简介1.1.1 基础知识1.1.2 案例:气候变化数据分析1.1.3 拓展案例一:金融市场分析1.1.4 拓展案例二:社交媒体情感分析 1.2 安装和配置 Pandas1.2.1 基础知识1.2.2 案例:个人财务管理1.2.3 拓展案例一&#xff1…

Qt之QLabel介绍

概述 QLabel是QT界面中的标签类,它从QFrame下继承,QLabel 类代表标签,它是一个用于显示文本或图像的窗口部件。我们主要介绍一下QLabel的一些简单的使用。 设置颜色背景色和字体的颜色大小 字体及颜色 设置文字使用的是setText函数。 QStri…

linux中常用的命令

一:tree命令 (码字不易,关注一下吧,w~~w) 以树状形式查看指定目录内容。 tree --树状显示当前目录下的文件信息。 tree 目录 --树状显示指定目录下的文件信息。 注意: tree只能查看目录内容,不能…

如何抠图换背景?分享6个不能错过的工具!

在数字化时代,抠图换背景已经成为了一种常见的图像处理需求。无论是出于商业宣传、个人创作还是日常生活分享的需要,抠图换背景都能帮助我们创造出更具视觉冲击力、更富有个性的图片。那么,如何进行抠图换背景呢?又有哪些工具可以…

云计算HCIE备考经验分享

大家好,我是来自深圳信息职业技术学院22级鲲鹏3-1班的刘同学,在2023年9月19日成功通过了华为云计算HCIE认证,并且取得了A的成绩。下面把我的考证经验分享给大家。 转专业进鲲鹏班考HCIE 大一上学期的时候,在上Linux课程的时候&…

2024新鲜出炉 Java集合常见面试题总结(上)

2024新鲜出炉 Java集合常见面试题总结(上) 文章目录 2024新鲜出炉 Java集合常见面试题总结(上)集合概述Java 集合概览说说 List, Set, Queue, Map 四者的区别?集合框架底层数据结构总结ListSetQueueMap 如何选用集合?为什么要使用集合? ListArrayList 和…

MySql 慢SQL配置,查询,处理

一.慢SQL配置相关 1.查看慢SQL是否开启 执行下面命令查看是否开启慢SQL show variables like %slow_query_log; 复制代码 OFF: 未开启ON: 2.打开慢SQL配置 执行下面的命令开启慢查询日志 set global slow_query_logON; 复制代码 3.修改慢查询阈值 前面介绍了SQL执行到达了…

SD-WAN和专线混合组网:企业出海网络解决方案

目前,有很多国内企业涉足海外业务,如跨境电商、游戏、社交网络、区块链等。都会使用海外服务器。同时,这些企业在国内还有自己的机房,IDC或者使用国内其他云厂商的机房。如果他们想要相互通信或传输数据该怎么办?在成本…

【数据结构】链表的一些面试题

简单不先于复杂,而是在复杂之后。 链表面试题 删除链表中等于给定值 val 的所有结点。OJ链接 //1.常规方法struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* cur head, *prev NULL;while(cur){if(cur->val val){//1.头删/…