您的位置:首页 > 运维架构

加密解密过程以及openssl自建CA

2014-08-03 12:15 483 查看
Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:
openssl: 多用途命令行工具,各功能分别使用子命令实现
libcrypto: 公共加密库
libssl: ssl协议的实现
加密的方式
在讲加密解密之前,我们先来了解下几种加密的方式:
1、对称加密:通信双方使用同一个密钥
比较常见的算法: DES(56),3DES,AES(128,192,256,384,512),Blowfish,Twofish,IDEA,RC6,CAST5

特性:
1、加密、解密使用同一口令;
2、将明文分隔成固定大小的块,逐个进行加密
缺陷:
1、密钥过多;
2、密钥传输;
加密工具:gpg, openssl ,enc
格式:
# openssl enc -des3 -a -salt -in /path/from/somefile -out /path/to/somecipherfile
# openssl enc -d -des3 -a -salt -in /path/from/somecipherfile -out /path/to/somefile
2、公钥加密(也称为非对称加密):密钥成对出现
密钥:公钥public key,私钥 secret key
常用加密算法:RSA, DSA, EIGamal
用途:
身份认证:通过私钥加密发出,对方通过发送者的公钥进行解密,从而对发送者进行身份认证
密钥交换:通过接收者的公钥加密发出,对方通过自己的私钥解密。




3、单向加密:是不可逆的
特点:
定长输出
雪崩效应

加密的算法:MD5、SHA1、SHA256、SHA384、SHA512

加密工具:md5sum, sha1sum, openssl dgst, chsum
格式
# openssl dgst [-md5|-sha1] [-out /path/to/filename] /path/from/somefile
加密和解密
OK,下面我们来讲解下加密和解密的过程,以Bob和Alice两人之间的通信为例:




加密过程:发送方即为Bob
1、Bob用单向加密算法计算数据的特征码;
2、Bob用自己的私钥加密这段特征码,并加在数据尾部;
3、将数据和私钥加密的特征码打包使用对称加密成密文,生成一个对称密钥;
4、使用Alice的公钥加密这个对称密钥,并附加在密文的尾部;
5、发送给Alice。
解密过程:
接收方即为Alice
1、Alice用自己的私钥解密得到对称密钥;
2、使用对称密钥解密密文;
3、使用Bob的公钥解密得到Bob对数据进行单向加密算法的特征码;(这一步实现了对Bob的身份验证)
4、Alice使用同样的单向加密算法计算出数据的特征码;
5、通过比较两段特征码验证Bob发过来的数据的完整性;
大家看完之后可以很清楚看到,在这个过程中公钥起到了至关重要的作用,可是你有没有想过,公钥在网络上传输的时候,可信度得不到验证,而且很容易就会被劫持或伪装。那么我们怎么样才能确定是对方的公钥呢,所以这就急需有一个专门的机构来确保公钥来源的合法性以及可靠性,没错他就是CA(证书颁发机构)。因此,想要完成安全的通信,拥有一个可靠的CA是必不可少的,下面我们就来实现一下一个私有CA的建立过程。
openssl建立私有CA使用openssl建立私有CA需要经过以下几个步骤CA服务器1、生成密钥2、自签署证书节点:1、生成密钥对儿2、生成证书签署请求3、把请求发送给CACA:1、验正请求者信息;2、签署证书;3、把签好的证书发送给请求者; 一、建立CA服务器:1、生成密钥
# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
这里设置umask是为了修改生成密钥的权限的,下同这里的2048是证书的长度。

2、自签证书
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
req: 生成证书签署请求-news: 新请求-key /path/to/keyfile: 指定私钥文件-out /path/to/somefile: -x509: 生成自签署证书,只有服务器才会用这个选项-days n: 有效天数

3、初始化工作环境由于有几个文件是必要的,所以我们还得手动创建,并且还要向证书的序列文件serial给定初始值
# touch /etc/pki/CA/{index.txt,serial}
# echo 01 > /etc/pki/CA/serial


这样我们的一个CA服务器就建好了。二、节点申请证书: (一) 节点生成请求1、生成密钥对儿这里节点生成密钥对跟服务器没什么区别,这里我将生成的密钥放在/etc/httpd/ssl/httpd.key中,这里的ssl目录是我事先创建的。
# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)


2、生成证书签署请求
# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr
需要注意的是一般生成的证书请求的文件后缀名为.csr

需要注意的是下面这几样必须跟CA服务器上的信息完全一样,不然CA将不给于签署

下面这一项用户名或者服务器名称尤其关键,如果这是一台服务器的话,那么名字必须是服务器的主机名。

最后信息填完还可以对其进行密码设定,你也可以直接按回车键不用密码,这里我就忽略了密码,直接回车过去了。 3、把签署请求文件发送给CA服务证书请求做好之后当然就是将其发送给CA签署了,当然方式很多,我们这里使用了SCP这个命令, scp是有Security的文件copy,基于ssh登录。可以实现远程的数据拷贝功能,即能把文件从本地传向目的端,也可以从远程主机中拷贝数据到本地,这里我们就不详细叙述该命令的用法了,如需知道其详细用法建议参考http://blog.csdn.net/jiangkai_nju/article/details/7338177由于我使用的节点和CA服务器是同一台虚拟机,所以这里我就不需要将请求发给CA服务起了,但为了如果不在同一主机的话就需要将文件发送给远程主机了。这里我们就假设将做好的请求文件发往172.16.106.1主机的/etc/httpd目录下
# scp /etc/httpd/ssl/httpd.csr 172.16.106.1:/etc/httpd
(二) CA签署证书当收到节点的证书请求时,CA服务器就可以对其进行签署了。签署的过程又分为以下步骤:1、验正证书中的信息;2、签署证书
# openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N


当CA签署证书的时候可以看到请求者发送的请求中的信息,当然CA如果觉得不行也可以直接拒绝。这样一份证书请求就签好了,当然签署成功以后我们的证书序列号将会改变,我们不妨来查看下/etc/pki/CA/serial,其初始值为1,如果没错的话他现在应该会是2.同时index.txt文件中也会生成相应的数据,并且每发出一份证书都会在/etc/pki/CA/newcerts/生成一个文件记录。








3、发送给请求者;这里我们还是使用scp命令进行发送其格式为:假设传给远程主机为172.16.200.1的/etc/httpd目录下
#scp /etc/httpd/ssl/httpd.crt  172.16.200.1:/etc/httpd
这样一份完整的证书就做好并且可以使用了。三、吊销证书 (一)节点1、获取证书serial
# openssl x509 -in /path/to/certificate_file.crt -noout -serial -subject


这里指定noout为不输出为文件Serial为序列号Subject为主体信息(二) CA2、根据节点提交的serial和subject信息来验正与index.txt文件中的信息是否一致;3、吊销证书(作废证书)一般由于用户私钥泄露等情况才需要吊销一个未过期的证书。
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
需要指出是这里的SERIAL即为想要吊销的证书序列号如果想吊销01序列号的证书则为
# openssl ca -revoke /etc/pki/CA/newcerts/01.pem
4、生成吊销证书的编号(如果是第一次吊销)
#touch  /etc/pki/CA/crlnumber
# echo 00 > /etc/pki/CA/crlnumber
5、更新证书吊销列表
# cd /etc/pki/CA/crl/
# openssl ca -gencrl -out output.crl   生成证书吊销列表,这里输出的名称可以自己随便取
如果需要,查看crl文件的内容:
# openssl crl -in /path/to/crlfile.crl -noout -text
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  加密 CA openssl 解密