对称加密
在对称加密中,加密和解密使用的是同一个密钥,即:使用相同的密钥对密文进行加密和解密
比如:A和B,A和B保存同一个密钥,A使用这个密钥对明文进行加密,发送给B,B再使用这个密钥对密文进行解密
缺点是:如果第三个人知道了这个密钥,就能对密文进行解密
常用的对称加密算法是:
DES,3DES,IDEA等
非对称加密
举例说明:
比如Alice 要与Bob直接进行非对称加密的通信
首先Alice根据非对称加密算法,由一个庞大的随机数来生成一对密钥,为公钥public key和私钥private key,这个public key可以让任何人知道,包括Bob
然后Bob也由一个庞大的随机数,根据非对称加密算法来生成一对密钥:公钥public key, 私钥private key,同样这个public key可以让任何人知道,包括Alice
Alice和Bob使用的随机数不同,生成的公钥和私钥也不一样
一般来说私钥放在服务器里,数据经过公钥加密就只能被私钥解密
如果应用到客户端和服务器端,就是服务端自己有成对的私钥和公钥,然后公布自己的公钥让客户端知道,客户端用公钥把自己的数据进行加密,加密后要用服务端的私钥才能解密
证书
非对称加密可以对数据进行加密,但是客户端不知道沟通的服务器是否是自己想要沟通的对象
HTPPS解决这个问题,因为服务器端需要申请SSL证书,来证明自己
SSL证书其实就是保存在源服务器的数据文件,要让SSL证书生效,就需要向CA(第三方证书颁发机构)申请,证书里除了包含域名,日期等,还包括了特定的公钥和私钥,简单来说服务器端安装了SSL证书,客户端就可以使用HTTPS访问了,端口号为443
CA机构会生成一个根证书包括public key,根证书是提前安装在客户端,客户端信任这个根证书,如果服务器端安装了由这个CA机构颁发的证书,CA会对SSL证书进行签名,客户端有CA的public key,就能对CA颁发的SSL证书进行签名认证,客户端就会信任服务器
SSL证书申请流程
- 制作CSR文件
CSR:certificate signning request证书请求文件,这个文件是由申请人制作,制作这个文件时会生成两个密钥:
公钥:就是这个CSR文件
私钥:存放在服务器上
制作CSR文件的方法:1. 使用openssl 2.使用keytool - CA认证
将CSR提交给CA, - 证书安装
收到证书后,可以将证书部署在服务器上
APACHE是将key(密钥)和CER(证书)直接复制到服务器上,然后修改httpd.conf文件
TOMCAT是将CER文件(CA签发的证书)导入到JKS(密钥)中,然后修改server.xml
文件
自签名证书
自己生成的SSL证书,不是由CA机构颁发的证书,就叫做自签名SSL证书
使用openssl生成自签名证书
安装openssl https://www.jianshu.com/p/ce2313b5c00a
https://www.cnblogs.com/jtcr/p/13490550.html
常用的openssl命令
version 用于查看版本信息
enc 用于加解密
ciphers 列出加密套件
genrsa 用于生成私钥
rsa RSA密钥管理(例如:从私钥中提取公钥)
req 生成证书签名请求(CSR)
crl 证书吊销列表(CRL)管理
ca CA管理(例如对证书进行签名)
dgst 生成信息摘要
rsautl 用于完成RSA签名、验证、加密和解密功能
passwd 生成散列密码
rand 生成伪随机数
speed 用于测试加解密速度
s_client 通用的SSL/TLS客户端测试工具
X509 X.509证书管理
verify X.509证书验证
pkcs7 PKCS#7协议数据管理
生成CA的根证书和私钥
自签名证书由于不是CA机构颁发的,所以要有证书和私钥来代替CA机构的功能
需要生成CA根证书和私钥
CA根证书安装在客户端,用户需要信任这个证书
私钥用于对服务器端的SSL证书进行签名
#创建一个文件夹ca
mkdir ca
cd ca
#使用openssl genrsa生成一个私钥,会生成一个ca.key文件
openssl genrsa -des3 -out ca.key 2048
#使用这个私钥,产生一个证书 ca.crt, -x509是证书的格式
openssl req -x509 -key ca.key -out ca.crt -days 365
#查看证书内容
openssl x509 -in ca.crt -text -noout
这样就生成了一个私钥ca.key和一个证书ca.crt
生成CSR文件,证书请求文件
申请者根据自己的公司信息,域名等生成一个CSR文件,发送给CA机构,由CA机构进行签名并生成一个证书并返会给申请者
申请者先生成一个秘钥,再有这个秘钥生成csr文件
#先生成一个秘钥
openssl genrsa -out my-site.com.key 2048
#根据这个秘钥,生成一个csr文件
openssl req -new -key my-site.com.key -out my-site.com.csr
CA机构对CSR文件进行签名,生成一个证书
openssl x509 -req -in my-site.com.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out my-site.com.crt -days 365
最后生成一个my-site.com.crt证书,这个就是安装在服务器端的证书
#查看证书内容
openssl x509 -in my-site.com.crt -text -noout