CA证书和openssl介绍

news2024/11/24 17:32:40

文章目录

  • 一、加密和算法
    • 常见的安全攻击
    • 加密算法和协议
      • 对称加密
      • 非对称加密算法
  • 二、CA和证书
    • 中间人攻击
    • CA和证书
    • 安全协议SSL/TLS
      • 协议介绍
      • HTTPS
  • 三、openssl
    • openssl介绍
    • 使用openssl实现对称加密
    • 使用openssl命令生成加密密码
    • 生成随机密码
    • 建立私有CA证书申请颁发
    • 建立私有CA实际例子
      • 生成CA私钥
      • 生成CA自签名证书
      • 用户申请证书


一、加密和算法

常见的安全攻击

  • Spoofing 假冒
  • Tampering 篡改
  • Repudiation 否认
  • Information Disclosure 信息泄漏
  • Denial of Service 拒绝服务
  • Elevation of Privilege 提升权限

加密算法和协议

  • 对称加密
  • 非对称(公钥)加密
  • 单向加密
  • 认证协议

对称加密

对称加密:加密和解密使用同一个密钥。

特性:

  • 加密、解密使用同一个密钥,效率高
  • 将原始数据分割成固定大小的块,逐个进行加密

缺陷:

  • 密钥过多
  • 密钥分发
  • 数据来源无法确认

常见对称加密算法:

  • DES:Data Encryption Standard,56bits
  • 3DES:
  • AES:Advanced (128, 192, 256bits)
  • Blowfish,Twofish
  • IDEA,RC6,CAST5

非对称加密算法

非对称加密:密钥是成对出现。

  • 公钥:public key,公开给所有人,主要给别人加密使用。

  • 私钥:secret key,private key 自己留存,必须保证其私密性,用于自已加密签名。

  • 特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然。

功能:

  • 数据加密:适合加密较小数据,比如: 加密对称密钥。
  • 数字签名:主要在于让接收方确认发送方身份。

缺点:

  • 密钥长,算法复杂。
  • 加密解密效率低下。

常见算法:

  • RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,可实现加密和数字签名。
  • DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准)。
  • ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学,比RSA加密算法使用更小的密钥,提供相当的或更高等级的安全。

二、CA和证书

中间人攻击

Man-in-the-middle,简称为 MITM,中间人。

一般使用对称加密算法需要接收对方的公钥,然后用对方提供的公钥加密。但如果被中间人利用技术手段冒充截取了请求,那么自己的信息就会被泄露。如果有公钥验证是否可以避免?
在这里插入图片描述
简单来说,中间人在客户端和服务端之间,来回扮演,窃取信息。

CA和证书

在这里插入图片描述
PKI:Public Key Infrastructure 公共密钥加密体系

签证机构:CA(Certificate Authority)

注册机构:RA

证书吊销列表:CRL

证书协议:
X.509:定义了证书的结构以及认证协议标准

  • 版本号
  • 序列号
  • 签名算法
  • 颁发者
  • 有效期限
  • 主体名称

获取证书两种方法:

  • 自签名的证书: 自已签发自己的公钥。
  • 使用证书授权机构:
    • 生成证书请求(csr)。
    • 将证书请求csr发送给CA。
    • CA签名颁发证书。

CA认证机构列表
在这里插入图片描述

安全协议SSL/TLS

协议介绍

SSL (Secure Sockets Layer) 和 TLS (Transport Layer Security) 是两种用于在网络通信中提供安全性和隐私的加密协议。它们的主要目的是确保数据在互联网上传输时的保密性、完整性和身份验证。让我们详细了解这两种协议:

SSL (Secure Sockets Layer):

历史:SSL 由 Netscape 在 1990 年代初期开发。
版本:SSL 有 1.0、2.0 和 3.0 三个版本。
现状:所有 SSL 版本现在都被认为是不安全的,已被废弃。

TLS (Transport Layer Security):
历史:TLS 是 SSL 的继任者,由 IETF (Internet Engineering Task Force) 开发。
版本:TLS 1.0、1.1、1.2 和 1.3(最新版本)。
现状:TLS 1.2 和 1.3 是当前推荐使用的版本。

SSL/TLS 的工作原理:
握手:客户端和服务器通过一系列消息交换来建立安全连接。
密钥交换:双方协商用于加密通信的对称密钥。
身份验证:服务器(有时也包括客户端)通过数字证书证明其身份。
加密通信:建立安全连接后,所有数据都使用协商的密钥进行加密。

主要特点:
加密:保护数据免受窃听。
完整性:确保数据在传输过程中未被篡改。
身份验证:验证通信双方的身份。
向前保密:即使长期密钥泄露,过去的会话也不会被破解。

应用:
HTTPS:网页安全浏览。
安全电子邮件。
虚拟专用网络(VPN)。
文件传输协议(FTPS)。
即时通讯。

优势:
广泛支持:几乎所有现代web浏览器和服务器都支持SSL/TLS。
强大的安全性:使用最新的加密算法。
灵活性:可以用于各种网络协议。

在这里插入图片描述

  • Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换。
  • ChangeCipherSpec 协议:一条消息表明握手协议已经完成。
  • Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告。
  • Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等。

HTTPS

HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL 或 HTTP over TLS ,对http协议的文本数据进行加密处理后,成为二进制形式传输。
在这里插入图片描述
Https工作的简化过程
在这里插入图片描述

  1. 客户端发起HTTPS请求。用户在浏览器里输入一个https网址,然后连接到服务器的443端口。
  2. 服务端的配置。采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。
  3. 传送服务器的证书给客户端。证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等。
  4. 客户端解析验证服务器证书 。这部分工作是由客户端的TLS(Transport Layer Security)来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值(对称加密的密钥)。然后用证书中公钥对该随机值进行非对称加密。
  5. 客户端将加密信息传送服务器。这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
  6. 服务端解密信息。服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值。
  7. 服务器加密信息并发送信息。服务器将数据利用随机值进行对称加密,再发送给客户端。
  8. 客户端接收并解密信息。客户端用之前生成的随机值解密服务端传过来的数据,于是获取了解密后的内容。

三、openssl

openssl介绍

OpenSSL 是一个功能丰富的加密工具包,提供开源的 SSL 和 TLS 协议实现。
它包含一个通用的加密库和一个命令行工具。

主要功能

  • SSL/TLS 协议实现
  • 对称加密和解密
  • 公钥加密和解密
  • 数字签名和验证
  • 哈希函数
  • 随机数生成
  • 证书管理

组件

  • libssl:实现 SSL 和 TLS 协议
  • libcrypto:实现各种加密算法和函数
  • openssl:命令行工具

使用openssl实现对称加密

基本加密命令格式:

openssl enc -[加密算法] -e -in [输入文件] -out [输出文件]

常用对称加密算法选项

  • -aes-256-cbc: AES 256位 CBC 模式
  • -aes-128-cbc: AES 128位 CBC 模式
  • -des3: Triple DES
  • -camellia-256-cbc: Camellia 256位 CBC 模式

常见附加选项

  • -a: 使用 base64 编码输出
  • -salt: 添加随机盐值(增强安全性)
  • -pbkdf2: 使用 PBKDF2 密钥生成函数(推荐)
  • -iter 10000: 指定迭代次数(与 -pbkdf2 一起使用,增加破解难度)
    在这里插入图片描述

注意:

  1. 执行这些命令时,系统会提示输入密码。请记住这个密码,因为解密时需要相同的密码。
  2. 对于解密,必须使用与加密相同的算法和选项。
  3. -salt 选项在加密时会自动生成随机盐值,解密时会自动读取。
  4. 使用 -a 选项时,加密文件会是base64编码的文本格式。

实际例子
在这里插入图片描述

openssl enc -e -des3 -a -salt -in a.txt -out a.txt.enc 
对a.txt加密,并输出为
openssl enc -e -des3 -a -salt -in a.txt -out a.txt.enc 

使用openssl命令生成加密密码

在这里插入图片描述

选项含义
-crypt (default)使用标准 Unix 密码算法(默认选项)。这是一种较旧的加密方法。
-1使用基于 MD5 的密码算法。比 crypt 更安全,但现在也被认为不够安全。
-apr1使用 Apache 变体的 MD5 基于密码算法。主要用于 Apache 服务器配置。
-salt string使用提供的字符串作为盐值。盐值增加了密码哈希的安全性。
-in file从指定文件中读取密码,而不是从命令行输入。
-stdin从标准输入读取密码。适用于脚本化处理。
-noverify从终端读取密码时不进行验证(不要求输入两次)。
-quiet不显示警告信息。
-table以表格格式输出结果。
-reverse切换表格列的顺序(与 -table 一起使用)。
基本用法
openssl passwd -选项  密码

在这里插入图片描述

生成随机密码

在这里插入图片描述

选项含义
-out file指定输出文件
-engine e使用指定的加密引擎
-rand file:file:…为伪随机数生成器(PRNG)提供种子,使用指定文件的内容来初始化随机数生成器,提高随机性。示例:openssl rand -rand /dev/urandom:/proc/meminfo -base64 12
-base64将二进制输出转换为可打印的 ASCII 字符
-hex使用十六进制编码输出
openssl rand -base64 32 -out random.txt
32 字节的随机数,用 base64 编码,并保存到 random.txt 文件中
openssl rand -hex 16
在屏幕上输出 16 字节的随机数,以十六进制格式显示

在这里插入图片描述

建立私有CA证书申请颁发

建立私有CA:

  • OpenCA:OpenCA开源组织使用Perl对OpenSSL进行二次开发而成的一套完善的PKI免费软件。
  • openssl:相关包 openssl和openssl-libs 。

证书申请及签署步骤:

  1. 生成证书申请请求
  2. RA核验
  3. CA签署
  4. 获取证书

在这里插入图片描述

配置文件:/etc/pki/tls/openssl.cnf
在这里插入图片描述

[ ca ]
37 default_ca      = CA_default           
 默认ca
 
42 dir             = /etc/pki/CA          
ca机构的总目录
43 certs           = $dir/certs           
存放证书
44 crl_dir         = $dir/crl            
证书吊销列表
45 database        = $dir/index.txt     
所有用户的证书的数据库索引,存放用户证书的相关信息。默认文件不存在,需要手动新建,但内容不用管。
    new_certs_dir   = $dir/newcerts        
    存放新证书的


50   certificate     = $dir/cacert.pem       
  ca的自签名证书
51 serial          = $dir/serial           
证书编号
52 crlnumber       = $dir/crlnumber       
  吊销证书的编号

54 crl             = $dir/crl.pem          
当前证书吊销列表
55 private_key     = $dir/private/cakey.pem 
 私钥位置


73 default_days    = 365                   
  证书的有效期
74 default_crl_days= 30                    # how long before next CRL
75 default_md      = sha256                # use SHA-256 by default
76 preserve        = no                    # keep passed DN ordering

证书策略
match:要求申请填写的信息跟CA设置信息必须一致
optional:可有可无,跟CA设置信息可不一致
supplied:必须填写这项申请信息
在这里插入图片描述

建立私有CA实际例子

在这里插入图片描述

touch /etc/pki/CA/index.txt
生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial
指定下一个颁发证书的序列号  必须是01必须是两位,有格式要求
若无默认文件夹,需要单独新建文件夹

在这里插入图片描述

生成CA私钥

cd /etc/pki/CA/ 
(umask 066; openssl genrsa -out private/cakey.pem 2048)
小括号的意思是开启一个新的bash
genrsa: 这是 OpenSSL 的子命令,用于生成 RSA 密钥对。
2048: 这个数字指定了要生成的 RSA 密钥的位数(key size)。

在这里插入图片描述

生成CA自签名证书

openssl req -new -x509 -key   /etc/pki/CA/private/cakey.pem  -days 3650 -out /etc/pki/CA/cacert.pem

选项:

  • -new:生成新证书签署请求
  • -x509:专用于CA生成自签证书 协议x509
  • -key:生成请求时用到的私钥文件
  • -days n:证书的有效期限
  • -out /PATH/TO/SOMECERTFILE: 证书的保存路径
    在这里插入图片描述
openssl x509 -in cacert.pem  -noout -text
-in cacert.pem: 指定要读取的证书文件。
-noout: 这个选项抑制默认的证书输出。
如果不使用这个选项,命令会输出 PEM 格式的证书。
-text: 以易读的文本格式显示证书的详细信息。

在这里插入图片描述
非交互式建立自签名证书

openssl req -utf8 -newkey rsa:1024 -subj "/CN=www.cxk.org" -keyout app.key -nodes -x509 -days 3650 -out app.crt

在这里插入图片描述

这个命令用于使用 OpenSSL 创建一个自签名的 SSL 证书。具体来说,它会生成一个 RSA 密钥和对应的 X.509 证书。以下是各个参数的含义:

  • req: 生成一个证书签名请求(CSR)或自签名证书。
  • -utf8: 使用 UTF-8 编码。
  • -newkey rsa:1024: 生成一个新的 RSA 密钥对,密钥长度为 1024 位。
  • -subj “/CN=www.kgc.org”: 指定证书的主题信息,这里只设置了 CN(Common Name),即证书的通用名称为 www.kgc.org。
  • -keyout app.key: 将生成的私钥保存为 app.key 文件。
  • -nodes: 不加密生成的私钥文件(即不需要输入密码来保护密钥)。
  • -x509: 直接生成一个自签名的 X.509 证书,而不是生成证书请求(CSR)。
  • -days 3650: 指定证书的有效期为 3650 天(约 10 年)。
  • -out app.crt: 将生成的证书保存为 app.crt 文件。
    执行该命令后,会在当前目录下生成两个文件:
    app.key: 私钥文件
    app.crt: 自签名的 SSL 证书

    这些文件可以用于配置 HTTPS 服务器,比如 Nginx 或 Apache。
    配置例子
server {  
    listen 443 ssl;  
    server_name your_domain.com;  

    ssl_certificate /path/to/cacert.pem;  
    ssl_certificate_key /path/to/private/cakey.pem;  

    # 其他配置...  
}

用户申请证书

  • 生成私钥 (一般以key结尾) 私钥
  • 利用生成的私钥 生成 证书申请文件(一般csr文件) csr
  • 生成证书文件(一般以crt结尾) crt
建立私钥
mkdir  /data/app1
openssl  genrsa -out  /data/app1/app1.key 2048
chmod 600 /data/app1/app1.key 

生成证书申请文件
openssl req -new -key /data/app1/app1.key -out /data/app1/app1.csr
注意需要和CA那个匹配条件相匹配。

在这里插入图片描述
颁发证书

openssl ca -in /data/app1/app1.csr -out /etc/pki/CA/certs/app1.crt   -days 1000

openssl: 调用 OpenSSL 工具。

ca: 这是 OpenSSL 的子命令,用于执行证书颁发机构(CA)操作。

-in /data/app1/app1.csr:
指定输入文件,这里是一个证书签名请求(CSR)。
CSR 文件路径是 /data/app1/app1.csr。

-out /etc/pki/CA/certs/app1.crt:
指定输出文件,这将是新生成的证书。
新证书将被保存为 /etc/pki/CA/certs/app1.crt。

-days 1000:
设置证书的有效期为 1000 天。

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

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

相关文章

Java-数据库基本概念

数据库DataBase 定义: 保存一组数据的仓库就是数据库 例 BirdBoot项目中,我们为了保存一组用户信息,创建了一个目录users。里面用若干个文件保存每一个用户信息 此时users目录就可以称为是一个数据库 只不过对于这些数据的维护操作,要么…

【最多可以参加的会议数目】python刷题记录

R4-贪心篇 结束时间升序排列优先队列 class Solution:def maxEvents(self, events: List[List[int]]) -> int:dictdefaultdict(list)for i,val in enumerate(events):dict[val[0]].append(val[1])#优先队列(小根堆)h[]ret0for i in range(1,100001)…

C语言求平方和倒数

文章目录 1. 代码实现float类型数据double类型数据使用 double 类型的调整 2. 魔数与位级别操作浮点数表示位级别魔数操作 3. 牛顿迭代4. 复杂代码具体解释具体解释:目的:举例: 5.感谢 平方和倒数 广泛用于计算机图形学中,尤其是在…

Qt实现类似淘宝商品展示看板功能简版

前一篇文章的简化版本只有浏览功能,前一篇文章链接如下: Qt实现类似淘宝商品看板的界面,带有循环翻页以及点击某页跳转的功能 效果如下: 代码留给有需要的人。 #ifndef ModelDashboardGroup_h__ #define ModelDashboardGroup_…

DC-DC PCB 布线参考

在DC-DC芯片的应用设计中,PCB布板是否合理对于芯片能否表现出其最优性能有着至关重要的影响。不合理的PCB布板会造成芯片性能变差如线性度下降(包括输入线性度以及输出线性度)、带载能力下降、工作不稳定、EMI辐射增加、输出噪声增加等&#…

容量 动效 仪表盘 Canvas 2D API

容量动效 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Canvas 内部圆形波浪</title><…

【区块链+乡村振兴】基于区块链的农权抵押贷款平台 | FISCO BCOS应用案例

当前两权抵押贷款业务逐渐活跃&#xff0c;但因参与两权抵押的相关方独立运营各自的管理系统&#xff0c;办理农权抵押贷款业务时&#xff0c; 存在多方信息不对称、业务办理过程繁琐、低效等问题&#xff0c;且不利于相关部门对农权抵押情况进行监督管理。具体表现在&#xff…

《数据资产管理核心技术与应用》相关分享章节

【图书推荐】《数据资产管理核心技术与应用》-CSDN博客 图书《数据资产管理核心技术与应用》介绍-CSDN博客 本文用于快速了解数据资产管理的概念及其技术范围。 数据资产通常是指那些可以通过分析来揭示价值、支持企业决策制定、优化企业流程、预测行业的未来趋势或产生更大…

dhcp+checkkickstar的实验理解

文章目录 实验介绍使用的服务介绍PXE服务dhcp服务Kickstart 服务tftp服务 第一部分&#xff08;基础部分&#xff09;代码展示注意点第一点![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/13c0f4aabb664655a4dd285dd8e5527a.png)第二点 结果展示 第二部分&#xff08…

元岳食堂采购供应链系统-智慧食堂数据化解决方案

随着社会的发展和科技的进步&#xff0c;在数字化浪潮的推动下&#xff0c;智慧食堂供应链系统逐渐成为食堂管理的重要工具。在此背景下&#xff0c;元岳食堂采购供应链系统应运而生&#xff0c;该系统通过其独特的数字化和自动化功能&#xff0c;能够对食堂的采购、储存、配送…

重庆市合川区第二届网络安全“钓鱼城“杯部分题解

MISC 下载文件后&#xff0c;进行分析 往下划看见smb 最开始以为是通过smb协议下载的文件 找半天没发现&#xff0c;往前翻了翻&#xff0c;看见了flag 存储为原始数据 通过上述分析发现开头是pk&#xff0c;保存为zip压缩包 发现需要密码 感觉是伪加密 使用工具一把梭 再…

免费的GA/T1400视图库平台Easy1400软件又迭代出新版本了!

自从年初发布了这款免费的GA1400视图库平台&#xff08;https://blog.csdn.net/xiejiashu/article/details/135050381&#xff09;&#xff0c;本来就是想做一做能给大家差不多能用就行了&#xff0c;没成想总是忍不住要改一改、优化优化&#xff0c;于是又经过了几个月的优化&…

合宙Air201定位模组,千万不要忘记设置这个......

最近一个杭州的客户&#xff0c;使用合宙的 Air201——4G资产定位模组&#xff0c;做室内wifi定位&#xff0c;发现在同一园区不同楼栋内定位结果相同&#xff0c;找到我们希望做问题排查。 排查过程记录在这里了&#xff0c;如果你也有类似问题&#xff0c;希望可以帮助到你~ …

Pinterest:从 Druid 到 StarRocks,实现 6 倍成本效益比提升

导读&#xff1a; 开源无国界&#xff0c;StarRocks 自开源以来&#xff0c;近3年的时间里已在全球数据技术领域崭露头角。我们欣喜地发现&#xff0c;越来越多的海外用户正在使用并积极推广着 StarRocks。为了促进知识共享&#xff0c;StarRocks中文社区将精选优秀文章与大家共…

华为手机平板开启下方提示条(横条)

打开设置&#xff0c;系统与更新&#xff0c;系统导航方式&#xff0c;手势导航&#xff0c;更多设置&#xff0c;显示提示条。 该功能部分机型不支持&#xff0c;我的MatePad SE支持&#xff08;别买&#xff0c;割韭菜&#xff09;

有自增变量作为循环条件的循环边界的理解

while (i < 100) 先判断后增加 当次i值用于判断&#xff0c;范围1~99&#xff0c; 递增后的i值为当次循环值&#xff0c;即循环内的i值&#xff0c;范围2~100 当 i 9 时&#xff0c;小于 100&#xff0c;进入循环体。在进入循环体之前&#xff0c;i 递增为 10。10满足i…

面试笔记--(正在整理版)

面试常见: Jvm&#xff0c;高并发&#xff0c;多线程&#xff0c;数据库&#xff0c;redis&#xff0c;框架 多线程 1.线程和进程是什么?如何保证线程安全性? 进程线程&#xff08;一&#xff09;——基础知识&#xff0c;什么是进程&#xff1f;什么是线程&#xff1f;_…

手机卡换了上网的ip会改变吗

在数字化时代&#xff0c;互联网已成为我们日常生活不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;我们都离不开网络的支持。而每当涉及到网络连接&#xff0c;IP地址这一概念便显得尤为重要。IP地址不仅是设备在网络中的唯一标识&#xff0c;还关系到我们的网络体验…

Selenium + Python 自动化测试06(frame操作方法)

上一篇我们讲述了特殊元素的操作方法&#xff0c;本篇接着讲一些可能遇到的其它操作方法。 如frame操作。 Frame 标签有Frameset、Frame、Iframe 3种&#xff0c;Frameset可以直接照常进行元素定位。Frame、Iframe需要驱动切换到对应的frame才可以定位到。否则 &#xff0c;会…

Python基础-->数据类型/变量/运算符

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.变量 变量是一个保存数据的容器&#xff0c;变量通常分为变量和常量&#xff0c;常量中存储的是固定数据&#xff0c;而变量中存储的数据是可变的。 # 定义常量 PI 3.14159# 定义变量 rad…