对称加密:加密和解密使用同一个密钥。
特性:
缺陷:
常见对称加密算法:
非对称加密:密钥是成对出现。
公钥:public key,公开给所有人,主要给别人加密使用。
私钥:secret key,private key 自己留存,必须保证其私密性,用于自已加密签名。
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然。
功能:
缺点:
常见算法:
Man-in-the-middle,简称为 MITM,中间人。
一般使用对称加密算法需要接收对方的公钥,然后用对方提供的公钥加密。但如果被中间人利用技术手段冒充截取了请求,那么自己的信息就会被泄露。如果有公钥验证是否可以避免?

简单来说,中间人在客户端和服务端之间,来回扮演,窃取信息。

PKI:Public Key Infrastructure 公共密钥加密体系
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书协议:
X.509:定义了证书的结构以及认证协议标准
获取证书两种方法:
CA认证机构列表

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。
强大的安全性:使用最新的加密算法。
灵活性:可以用于各种网络协议。

HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL 或 HTTP over TLS ,对http协议的文本数据进行加密处理后,成为二进制形式传输。

Https工作的简化过程

OpenSSL 是一个功能丰富的加密工具包,提供开源的 SSL 和 TLS 协议实现。
它包含一个通用的加密库和一个命令行工具。
主要功能
组件
基本加密命令格式:
openssl enc -[加密算法] -e -in [输入文件] -out [输出文件]
常用对称加密算法选项
常见附加选项

注意:
实际例子

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

| 选项 | 含义 |
|---|---|
| -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:
证书申请及签署步骤:

配置文件:/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:必须填写这项申请信息


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

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

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

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 证书。以下是各个参数的含义:
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /path/to/cacert.pem;
ssl_certificate_key /path/to/private/cakey.pem;
# 其他配置...
}
建立私钥
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 天。