SSL证书

密钥

	在http通信里面。我们要关注传输的安全性。
	如果使用明文传输,那么我们的密码就会被窃取
	我们毫不犹豫选择密文传输

既然是密文传输就要考虑如何加密和解密问题:
1.服务器如何选择加密算法
2.客户端如何翻译成为明文

加密基础知识
	1.对称加密:指的是加密方和解密方使用的是同一个密钥
		优点:加密解密的速度很快	
		缺点:如果两个从未通信过的用户要进行通信的时候,
	该如何把解密的密钥传输给对方呢(密钥仍然要在网络上传输,
	所以密钥还是可能会被“中间人”截获),这是对称加密最大的缺点;
常见的对称加密算法有:
	DES:使用56位的密钥,2000年的时候被人破解了,所以现在基本不再使用
	AES:高级加密标准,可以使用128,129,256 512 1024 2048 4096密钥
	其他的还有blowfish,Twofish和RC6,IDEA(商业算法),CAST5等

2.非对称加密:非对称加密方式解决了对称加密的缺陷,
	它的加密和解密密钥是不同的,比如对一组数字加密,我们可以用公钥对其加密
	然后我们想要将其还原,就必须用私钥进行解密,公钥和私钥是配对使用的,
	常见的非对称加密算法有:
		优点: 加密和解密 用不同密钥 
		缺点:加密速度非常慢  
	RSA:既可以用来加密解密,又可以用来实现用户认证
	DSA:只能用来加密解密,所以使用范围没有RSA广
	非对称加密长度通常有512,1024,2048,4096位,最常用的就是2048位,
	长度固然可以增加安全性但是需要花费很长时间来进行加密/解密,和对称加密相比,
	加密/解密的时间差不多是对称加密的1000倍,所以我们通常用其作为用户认证,用对称加密来实现数据的加密/解密

3. 单项加密:
	单向加密就是用来计算一段数据的特征码的,为了防止用户通过“暴力破解”的方式解密,所以单向加密一般具有“雪崩效应”。
	就是说:只要被加密内容有一点点的不同,加密所得结果就会有很大的变化。
	单项加密还有一个特点就是无论被加密的内容多长/短,加密的结果(就是提取特征码)是定长的,
	用途:用于验证数据的完整性,常用的单项加密算法
	特点:加密后的数据长度固定:128 
	MD5:这种加密算法固定长度为128位
	SHA1:这种加密算法固定长度是160位

问题:
	密钥不只是一个。
	我要怎么才能知道客户端里面的有什么密钥?支持哪些密钥?
	服务器支持什么密钥?
	如何和客户端约定好,两者使用什么密钥?
这些我们都是要知道的。

为了解决这个问题:
抽象一点:我们一个人管理所有密文。对于服务端只给一部分。
然后由服务端给客户端一部分密钥。
这样子可以保证客户端的密钥都是服务器支持的。
这就是这里的SLL证书。

自己生成根密钥方法:( 自建根证书 )

首先检测自己是不是安装了openssl	
rpm -ql openssl
openssl version
没有安装
apt install openssl

第一步我们建立根证书:(#是注释)
#1.进入根目录,创建文件
cd /
mkdir ca
mkdir ca/root
#2.创建根证书目录
cd /ca/root
#3.#建立相关目录,private存放根凭证的私钥,cert存放根凭证的凭证,signed_certs存放根凭证签发过的凭证的副本.
mkdir private cert signed_certs
#变更private目录的存取权限.
chmod 700 private
#建立index.txt,此档案会用来纪录根凭证签发过的凭证的纪录,每次根凭证签发凭证OpenSSL会自动更新此档案.
touch index.txt
#建立serial,并在档案中填入0001,被签发的凭证都会有序号的栏位,纪录此凭证在上一层签发单位所签发的凭证的序号,此档案会用来纪录根凭证签发的凭证的序号,每次根凭证签发凭证OpenSSL会自动更新此档案.
echo 0001 > serial

创建openssl_root_ca.cnf并放置在root目录内,内容:
[ ca ]
default_ca = CA_default

[ CA_default ]
#放置相关的档案和目录. 
dir           = /ca/root
certs         = $dir/cert
new_certs_dir = $dir/signed_certs
database      = $dir/index.txt
serial        = $dir/serial
RANDFILE      = $dir/private/.rand

#放置私钥和凭证的路径.
private_key   = $dir/private/root_ca.key.pem
certificate   = $dir/cert/root_ca.cert.pem

default_md    = sha256

name_opt      = ca_default
cert_opt      = ca_default
default_days  = 365
preserve      = no
policy        = policy_defualt

[ policy_defualt ]
#签发中继凭证时资料的检查(是否必须和根凭证一样). 
countryName            = optional
stateOrProvinceName    = optional
organizationName       = optional
organizationalUnitName = optional
commonName             = supplied
emailAddress           = optional

[ req ]
# req工具需要的参数. 
default_bits       = 2048
distinguished_name = req_distinguished_name
string_mask        = utf8only
default_md         = sha256

[ req_distinguished_name ]
#产生凭证时要输入的资料的说明.
countryName            = Country Name (2 letter code)
stateOrProvinceName    = State or Province Name
localityName           = Locality Name
0.organizationName     = Organization Name
organizationalUnitName = Organizational Unit Name
commonName             = Common Name
emailAddress           = Email Address

[ root_ca ]
#签发根凭证使用.
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ intermediate_ca ]
#签发中继凭证使用. 
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值