PKI即公钥基础设施,包括注册机构(RC),签证机构(CA),证书撤销列表(CRL)发布机构,证书存取库,我们利用openssl来实现以上内容。
一,我们来梳理一下常见的加密算法
1,对称加密算法
常见的对称加密算法有:DES,3DES,AES
工作机理:通过移位来达到加密效果
适用场景:机密性
2,非对称加密算法
常见的非对称加密算法有:RSA ,DSS,ECC,DH
工作机理,通过数学函数,结果不可逆推的原理来达到加密效果
适用场景:身份验证,密钥交换,机密性
3,单项加密加密算法
常见的单项加密算法有:MD5,SHA1,SHA2,SHA3,SHA256,SHA512
工作机理:通过散列计算,提取特征码
适用场景:保证数据完整性
二,PKI是什么
为了保证通信双方的安全性,我们通常会利用可信的第三方机构给我们讲发来的证书。第三方是被双方都可信任的机构,想想我们常见到的场景
1,淘宝,我在淘宝上输入密码,怎样才能保证不被Heck所窃取到呢,首先淘宝在著名的第三方机构申请一个数字证书,我们浏览网页的时候,淘宝把数字证书发给我们,我们自己生产一段密钥,然后利用数字证书里的公钥去加密自己产生的秘钥,然后发给淘宝,淘宝利用自己的私钥解密,得到自己的那段密钥,然后淘宝利用发给他的那段密钥加密网页,传给我们,我们就可以看到加密后的网页了,我们利用自己的密钥解密(OK,好起来好麻烦的样子哦,直接来图吧,或许理解的会快一些)
2,U key,我们去银行去办理银行卡,办公人员都会我们推荐U key ,这样网购可以方便些,其实Ukey 里面内置了数字证书,就是为了网购的时候,银行验证我们的身份,原理和上面类似,网上银行去获取我们的数字证书看看是不是我们本人。
其实这些都是由PKI来做的,那我们的PKI到底是什么呢?
OK,简单来说PKI就是利用公钥技术建立的提供安全服务的基础设施,上面的淘宝和网银的UKEY就是最好的例证,充分说明了PKI是电子商务的最基础也是最核心的东西之一。
三,利用openssl 建立PKI
1,一些基础的命令
a)实现加密,openssl支持众多加密算法,ok,我们加密一段文字,使用3des
[root@dns1 ~]# openssl enc-des3 -in ~/fstab -e -out ~/fstab.des3
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbcencryption password:
他会要求我们输入密码去加密当前用户家目录下的fstab
们查看加密以后的文件,会发现是一些很无厘头的乱码,实在不知思
我们看下怎样解密
[root@dns1 ~]# openssl enc-des3 -in ~/fstab.des3 -d -out ~/fstab.txt
enter des-ede3-cbc decryption password:
输入密码就可以解密了
b)提取特征码
特征码有诸多用处,定长而且具有雪崩效应,所以一般被用来验证省份,OK,我们提取家目录下的fstab的特征码
[root@dns1 ~]# openssl dgst-md5 -hex ~/fstab
MD5(/root/fstab)=f907200d3f3df47c03ac1ebf2780c7ee
利用MD5技术提取特征码,后面的-hex 表示利用16进制表示
c)产生非对称的私钥
首先我们要说明的是,非对称的私钥别人是不能有读取权限的
[root@dns1 ~]# (umask077;openssl genrsa -out ~/mykey.pri 2048)
Generating RSA private key,2048 bit long modulus
.............................................................+++
................................................................+++
e is 65537 (0x10001)
提取其中的公钥
[root@dns1 ~]# openssl rsa -in~/mykey.pri -pubout
2,自建PKI
CA是PKI重要的组成部分之一,CA要给别人发证书,当然也要自己也的有证书,CA的证书要不来自根CA给他的,要不就是自己给自己颁发。
我们来看看怎样给自己颁发
我们进入/etca/pki/CA/
上面最重要的内容是Common Name,网站的话,写你网站的域名,不然,呵呵,浏览器不让你访问不怪我啊,这样我们就生成了申请文件。
自签名,我们知道PKI是需要有一个库,这个库可以实现证书的存取。
我们来建立
[root@dns1 CA]# touch index.txt
[root@dns1 CA]# echo 01 > serial
我们新建一个申请
openssl req -new -key/root/mykey.pri -out /root/web.csr
利用私钥到处申请文件
openssl ca -in/root/web.csr -out private/web.crt -days 365
申请证书。
接下来问你是不是证书有效期为365 天
接下来问还要不要处理其他请求。