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
解密/etc/fstab文件
openssl enc -d -des3 -a -salt -in fstab.cipher -out fstab.cleartext
二、单向加密
openssl命令格式:
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-out filename] 加密文件
-out: 保存至文件中
还可使用的其它命令sha1sum, md5sum, cksum,计算文件特征码。
例如:计算/etc/fstab的特征码
三、公钥加密,使用命令 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是否有私钥:
生成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)
公钥文件不须要特别生成,由于公钥文件是私钥文件的一部分,是从私钥文件提取出来的。提取公钥并不是必要步骤,若是想查看公钥文件可使用如下命令:
openssl rsa -in private/cakey.pem -pubout -text
(2)、生成自签证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
-new: 一个新的申请
-x509: 证书格式
-key: 私钥文件路径
-out: 证书保存路径
-days: 有效期限
执行命令后,需填写证书的相关信息:
查看证书是否生成成功:
(3)、客户端证书申请前的准备工做。
经过配置文件/etc/pki/tls/openssl.conf可知,缺乏三个文件,新建这三个文件:
touch index.txt serial crlnumber
给记录证书数字编号的文件serial写入编号,咱们以01做为它的第一个编号:
(4)、CA自签证书完成,客户端能够开始申请证书了,此时咱们打开另一台虚拟机做为客户端。在客户端中,一般哪一个应用程序要用到数字证书,那么数字证书就要保存在那个程序的配置文件目录,此时咱们以web服务器程序httpd为例。
为了规范,咱们在httpd的配置文件目录新建一个目录ssl,在/etc/httpd/ssl目录中生成客户端的密钥文件。
(umask 077; openssl genrsa -out httpd.key 1024)
(5)、客户端生成证书签署请求
openssl req -new -key httpd.key -out httpd.csr
-new: 生成一个新的签署请求
-key: 以哪一个密钥文件为依据
-out: 生成的文件名
查看文件:
(6)、客户端证书签署请求生成后,接下来把请求发给CA申请数字证书。
使用scp命令将文件传送到服务器的/tmp目录:
scp httpd.csr 192.168.0.6:/tmp/
(7)、回到服务器,CA签署证书
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650
(8)、将签署好的文件传送给客户端
scp /tmp/httpd.crt 192.168.0.111:/etc/httpd/ssl
客户端查看文件
数字证书申请成功,接下来的操做是,配置客户端使用数字证书了。
(9)、假如数字证书过时,能够在CA主机上使用如下命令吊销证书
openssl ca -revoke /path/to/somefile.crt