openssl实现加密解密及CA

1、数据的加密方式
web

    数据好好的为何要加密?鲁迅说过,世上本没有路,走的人多了,也就成了路。一样的道理,数据本不用加密的,上网的人多了,也就必需要加密了。只要电子设备联网,就没有安全可言,安全历来都是相对的。理论上只要CPU的运算速度够快,世界上没有破解不了的密码,只是时间问题,可是咱们仍是得加密。数据的加密方式一般用三种:对称加密、公钥加密和单向加密。算法

一、对称加密shell

    数据的加密一般都要依托于一种算法,所谓的算法,能够简单的理解为,将一类数据有目的从新排列、组合使之面目全非的计算方法。而对称加密,就是使用这一类算法计算明文,生成密文。可是,密文依旧可使用加密算法的逆算法还原成明文。这种加密方式是可逆的,具备对称性,因此叫做对称加密。经常使用的加密算法有:DES, 3DES, AES, Blowfish,Twofish, IDEA, RC6, CAST5, Serpent等。安全

    咱们知道,两台主机在网络上互相通讯,数据颇有可能被中间人截获。因而使用对称加密的数据就有可能被中间人还原,而后中间人对还原后的数据进行添加、删除、修改操做,而后使用相同的算法加密修改后的数据,再转发给目的地。所以对称加密虽然好用,但面临了好多问题:首先面临口令传输安全性的问题;其次没法确认收发信息者的身份;还有一个就是没法确认传输数据的完整性。
服务器


二、公钥加密网络

    公钥加密也叫,非对称加密。经常使用的公钥加密算法有:RSA, EIGamal。它是使用一类公钥加密算法,生成一对密钥文件,一个是私钥本身持有但毫不公开,另外一个是公钥,能够对外公开。公钥文件是用来加密的,私钥用来解密。公钥加密速度很慢,一般不用来加密大数据文件,而是用来加密口令。由于密钥文件只有成对的才能完成加密与解密的操做,因此公钥加密也能用来做身份认证。因此当两台主机通讯,传输数据时,使用对称加密技术加密数据,加密数据的口令再使用公钥加密方法加密,这样重重加密后的数据,在传输上因而就解决了口令传输安全性的问题,又解决了身份验证的问题。使用这两种方式结合的加密技术,虽然解决了这两个问题,数据不能被第三者还原,可是颇有可能被第三者破坏,若是要保证数据的完整性,那就要用到第三种加密方式,单向加密。
ide

公钥加密技术有一项延伸应用,叫做数字签名。数字签名的加密方式恰好和公钥加密相反,它是私钥加密、公钥解密,使用的算法为DSA。工具


三、单向加密大数据

    经常使用的单向加密算法有:MD5, SHA1, SHA512, CRC-32。单向加密技术并非用来加密的,它是使用一种单向加密算法提取文件的特征码的操做。任何一个文件经过单向加密方式生成的特征码都是惟一的。任何一个文件其中微小的变化经过单向加密算法运算后,最终的结果都会发生翻天覆地的变化。而且,每一个文件计算出来的特征码都不能还原。因而,单向加密技术轻松的解决了数据传输过程当中,文件完整性的问题。加密


四、CA

    论理上公钥加密虽然能够解决身份认证的问题,可是,当两台主机在传输数据时,两主机间的第三者也能够生成一对本身的密钥文件,近而中转两台主机的数据。因此使用公钥加密做数据传输时,此时的这个环节是一个很大的漏洞。因此,此时若是网络上有一个机构专门负责分发密钥文件,及检查密钥文件持有者的合法性,那么这个问题就很好的解决了。一般网络上的这种机构咱们称之为CA,CA发放的密钥文件咱们称之为,数字证书。

    CA证书通常都是固定格式,数字证书的制做使用的就是公钥加密技术,申请证书只须申请者按照必定格式把数字证书制做好后,提交给CA机构审核,审核经过后,该数字证书就行之有效了。需要说明的是,制做数字证书时,私钥本身持有且必须严密保存,公钥文件能够对外公开,每一个数字证书都有时间期限,证书丢失后,须向CA机构申请吊销。


我图画的很差,关于上面说的,我列个表格对比一下吧。

加密方式 对称加密 公钥加密 单向加密 CA
优 点 一、加密速度快;

一、密钥成对,能实现身份识别,及密钥交换;

二、当对称加密、公钥加密、数字签名、单向加密相结合时,相对很安全;

一、加密速度快;

二、算法具备惟一性,结果不可逆;

一、集众家之长,安全;
缺 点

一、算法公开,容易反解;

二、不能识别解密者身份合法性;

一、加密大文件速度慢;


一、贵!普通人用不起;
便 利 性 操做方便,数据加密后只有一个口令; 加密后会成生两个密钥文件,私钥必须好好保存不能让第两者知道; 操做方便,数据加密生成特征码后不能再修改文件,如若修改需从新加密; 须要向第三方CA机构申请数字证书,而且证书有时间期限;
经常使用算法 DES, 3DES, AES, Blowfish,Twofish, IDEA, RC6, CAST5, Serpent RSA, EIGamal, DSA MD5, SHA1, SHA512, CRC-32

关于密钥的交换,除了可使用公钥加密算法外,还可使用的一种算法是DH算法,DIFFIE-Hellman。


说了那么多,咱们使用openssl命令实际操做一遍。


2、使用openssl命令

   openssl是一个套件,它由三部分组成,libcryto、libssl、openssl。libcryto是一个通用功能加密库,里面实现了众多的加密算法;libssl用于实现TLS/SSL的功能;openssl是一个多功能的命令行工具,它可以让你建立证书、吊销证书、加密解密数据等。在命令行输入openssl ?,能够查看openssl的相关加密解密选项。


一、对称加密,使用enc选项,可使用man enc查看enc子命令的帮助。

加密格式:

openssl enc -des3 -a -salt -in 要加密的文件 -out 文件保存路径

-des3: 使用des3加密算法加密,也可使用其它加密算法

-a: 以base64位格式输出

-salt: 加盐

-in: 要加密的文件路径

-out: 文件加密后的保存路径


解密格式:

openssl enc -d -des3 -a -salt -in 要解密的文件 -out 文件保存路径

加密/etc/fstab文件

enc -des3 -a -salt -in /etc/fstab -out fstab.cipher

wKioL1Mq4BCQvGGxAAPvw3CHcZ0561.jpg


解密/etc/fstab文件

openssl enc -d -des3 -a -salt -in fstab.cipher -out fstab.cleartext

wKiom1Mq4T6xOzuLAAMoxcSFiQA745.jpg


二、单向加密

openssl命令格式:

openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-out filename] 加密文件

-out: 保存至文件中


还可使用的其它命令sha1sum, md5sum, cksum,计算文件特征码。


例如:计算/etc/fstab的特征码

wKiom1Mq4yngZv0AAAD8_aOH3Y8193.jpg


三、公钥加密,使用命令 openssl rsautl ,用的很少,主要的运用仍是数字证书。


四、CA数字证书


数字证书的格式一般为x509,主要包含如下几个部分:

公钥和有效期限;
要包含持有者的我的合法身份信息;# 身份信息一般为主机名
证书的使用方式;
CA的信息;
CA的数字签名;


为了模拟操做,咱们得本身充当CA,做为CA,身份也得验证,因此CA也得有一个数字证书,可是CA是专门给别人发证书的,本身的证书无人可发,因而CA能够本身给本身发放数字证书,这叫自签署证书。咱们先来查看一下CA的配置文件/etc/pki/tls/openssl.conf中[ CA_default ]的各项参数:

[ CA_default ]
dir             = /etc/pki/CA           # CA工做目录
certs           = $dir/certs            # 数字证书所在位置
crl_dir         = $dir/crl              # 数字证书吊销列表
database        = $dir/index.txt        # 数字证书及吊销证书记录文件
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # 刚签属的证书
certificate     = $dir/cacert.pem       # CA本身的证书,CA的公钥
serial          = $dir/serial           # 当前数字证书的编号
crlnumber       = $dir/crlnumber        # 当前吊销证书的编号
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # 当前正在使用的的CRL
private_key     = $dir/private/cakey.pem# CA本身的私钥
RANDFILE        = $dir/private/.rand    # 随机数据文件
x509_extensions = usr_cert              # x509证书的扩展,用户证书


实例:用openssl实现私有CA

(1)、进入CA的工做目录/etc/pki/CA,给CA本身生成一个私钥。

查看CA是否有私钥:

wKiom1Mq7eDiqjroAACLiOs6heo438.jpg


生成CA私钥:

openssl genrsa -out private/cakey.pem 2048

说明:-out参数为保存路径,2048为密钥文件的长度。

注意:私钥文件是一个很重要的文件,所以分配权限要注意,而且文件要做特别的加密保存,此处由于实验,因此不做加密。此处咱们须要给CA密钥最小权限,能够修改umask的值为077,为了避免影响整个shell环境,咱们能够在小括号里执行命令,小括号里的命令默认是在一个子shell进程里执行,所以执行完命令umask值不影响父shell。

(umask 077; openssl genrsa -out private/cakey.pem 2048)

wKiom1MrBaHCdpZqAAEkFNSUGY8341.jpg


公钥文件不须要特别生成,由于公钥文件是私钥文件的一部分,是从私钥文件提取出来的。提取公钥并不是必要步骤,若是想查看公钥文件可使用如下命令:

openssl rsa -in private/cakey.pem -pubout -text

wKiom1Mq81WQ5VdPAAMW_OEPjmQ674.jpg


(2)、生成自签证书

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

-new: 一个新的申请

-x509: 证书格式

-key: 私钥文件路径

-out: 证书保存路径

-days: 有效期限


执行命令后,需填写证书的相关信息:

wKiom1MrBpajmKfcAANrvnWSulU261.jpg


查看证书是否生成成功:

wKioL1Mq9uTjTHDdAAExvMVOaIQ399.jpg


(3)、客户端证书申请前的准备工做。

经过配置文件/etc/pki/tls/openssl.conf可知,缺乏三个文件,新建这三个文件:

touch index.txt serial crlnumber

wKioL1Mq98rjm72XAACfg3wL1rw091.jpg


给记录证书数字编号的文件serial写入编号,咱们以01做为它的第一个编号:

wKiom1Mq-D_TwMDwAABZs5L9Eg4931.jpg


(4)、CA自签证书完成,客户端能够开始申请证书了,此时咱们打开另一台虚拟机做为客户端。在客户端中,一般哪一个应用程序要用到数字证书,那么数字证书就要保存在那个程序的配置文件目录,此时咱们以web服务器程序httpd为例。

为了规范,咱们在httpd的配置文件目录新建一个目录ssl,在/etc/httpd/ssl目录中生成客户端的密钥文件。

(umask 077; openssl genrsa -out httpd.key 1024)


wKiom1Mq-hbhyla-AAGGjTOEA9o962.jpg


(5)、客户端生成证书签署请求

openssl req -new -key httpd.key -out httpd.csr

-new: 生成一个新的签署请求

-key: 以哪一个密钥文件为依据

-out: 生成的文件名

wKioL1MrAVLxj6qWAAO8FGoaXKg655.jpg


查看文件:

wKiom1Mq_MLTSEotAAA0NqwjV-M919.jpg


(6)、客户端证书签署请求生成后,接下来把请求发给CA申请数字证书。

使用scp命令将文件传送到服务器的/tmp目录:

scp httpd.csr 192.168.0.6:/tmp/

wKioL1Mq_a-i1_OGAAG5sremeK4009.jpg


(7)、回到服务器,CA签署证书

openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650

wKioL1MrAJiS84zzAAOe3GY-qXU738.jpg


(8)、将签署好的文件传送给客户端

scp /tmp/httpd.crt 192.168.0.111:/etc/httpd/ssl


客户端查看文件

wKioL1MrA1LhLYhFAABOot7dAl4624.jpg


数字证书申请成功,接下来的操做是,配置客户端使用数字证书了。


(9)、假如数字证书过时,能够在CA主机上使用如下命令吊销证书

openssl ca -revoke /path/to/somefile.crt


wKioL1MrBKvDHXrjAACv_MnbO6I652.jpg

相关文章
相关标签/搜索