*********************************************
一、加密算法
二、Openssl 工具使用
三、建立本地CA
四、证书颁发
五、FTP客户端验证
*********************************************
理论讲解篇
一、加密算法
1、 对称加密(移位与置换完成的)
对称加密算法简介
在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
对称加密的特点:
加密速度快,对称性加密通常在消息发送方需要加密大量数据时使用。
常用的对称加密有:
DES: (Data Encryption Standard) 56位
DES3: 3遍DNS加密
AES (Advanced ): 128, 192, 256 高级加密标准
注意:
AES虽然位数增加了一倍,但是复杂度可不仅仅是一倍
2、 非对称加密 (数学函数实现的)
非对称加密简介
非对称加密算法需要两个密钥:公工密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
非对称加密的特点:
算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快
注意:
公钥是从私钥提取而来;
非对称加密工作原理:
私钥加密的数据 --> 与之配对的公钥解密(同时完成了身份验证)
私钥加密数据,只有与之配对的私钥可以机密,此时由于公钥是公开的,所以所有人都可以解密了,那么此种加密方法还有什么意义呢?由于公钥与私钥是一一对应的,所以当我们能解密的时候,是不是验证了加密方的身份,这就是数子签名
公钥加密的数据 --> 与之配对的私钥解密(保证了数据的机密性)
发送方使用对方的公钥加密,这样只有对方有自己私钥,这样对方就可以解密了,此时保证了数据的机密性
对称加密与非对称加密配合使用
当数据量较大的时候,我们使用非对称加密,虽然能保证数据的安全性但是加密速度太慢;此时我们可以提取数据的特征码,然后使用对方的公钥加密特征码,使用对称加密加密数据,对方收到特征码与数据之后,使用自己的私钥解密特征码,并使用与发送方相同的算法解密数据,再次提取特征码,与收到的特征码做比较。如果完全相同,则说明数据是完整的,否则异然。
3、单向加密算法
单向加密算法可以用与提取数据的特征码
常用的单向算法有
md5:128 sha1:160 sha256 sha512
雪崩效应:
输入数据的微小改变会引起输出结果的巨大变化;
理论知识说了这么多,是不是有点晕啊。不要紧的让我们实操一次,帮助你快速理解
操作应用篇
二、Openssl工具使用
查看openssl版本信息
[root@localhost ~]# openssl version OpenSSL 1.0.0-fips 29 Mar 2010
使用Des3加密文件
[root@localhost tmp]# cp /etc/fstab ./ [root@localhost tmp]# openssl enc -des3 -in fstab -e -out fstab.des3 enter des-ede3-cbc encryption password: #输入加密密码此处为redhat Verifying - enter des-ede3-cbc encryption password: [root@localhost tmp]# ls fstab fstab.des3 [root@localhost tmp]# cat fstab.des3 #查看加密之后文件显示乱码 Salted__?.?�7.x?.<pk5]x�`..朝.戤.??T.aW??w.3I?m.?.|宁<u?%?h2I2..湟>.>.?Cm酋nJ+<R困?5.?u�┦U..?吨nХq方{?耆?鲽9t.?.9(?lSD?7Z o.jO?呷?DS.ZAO3Fr>?W5?. .?陆a?╂.).b?j.?? ?T?..??.,林.罂g(*奄E&}fTEp^苜? g .R??qxk.`h?0.?-rg.逢.?Fr.`XA .L*?7.j?..?魂<?腩?t民B,?K?..?R.]?1?~T%L??Y詹q?慝?K缜.4.淝CG?沪9.??- 陪.仙.?哈'f?.??..?..gd. dS逛钓.e.. .?筵.?.r*?.L?祗?6?F锵??dǔ#冯M?/?;Xd.羝.熏J???.L??w? 攵0z?.nyo蜚鲲`写ia.Hbe?凿.?.?9..9骄..??? D?涛~?s.@.ё[=8{?. %UO`?<.T.O. '.Hc i.悃.幔せ7?r?9.x5.祥峁抖1|.????:??[root@localhost tmp]# XshellXshellXshellXshellXshellXshellXshell -bash: XshellXshellXshellXshellXshellXshellXshell: command not found [root@localhost tmp]#
注释:
-des3指定加密算法
-e 代表加密 与之对应的-d代表解密
-in 指定加密文件
-out 指定输入文件
获取文件特征码
[root@localhost tmp]# openssl dgst -md5 fstab MD5(fstab)= c9f4e510c6ee08857b2fee224fdbfdcd [root@localhost tmp]#
修改fastab文件,在此查看特征码
[root@localhost tmp]# echo "123" >> fstab [root@localhost tmp]# openssl dgst -md5 fstab #此时有巨大变化,是不是验证了雪崩效益 MD5(fstab)= 739fac6132b9d7178f898cb004457250
生成随机数
[root@localhost tmp]# openssl rand -hex 4 #生成8位随机数 034a06cc [root@localhost tmp]# openssl rand -base64 4 T1+z2g== [root@localhost tmp]#
生成私钥
[root@localhost tmp]# openssl genrsa 2048 > mykey.pri #生成2048位的私钥并保存为mykey.pri Generating RSA private key, 2048 bit long modulus ...........................................+++ .........................+++ e is 65537 (0x10001) [root@localhost tmp]# ll 总用量 12 -rw-r--r--. 1 root root 783 8月 15 18:42 fstab -rw-r--r--. 1 root root 800 8月 15 18:28 fstab.des3 -rw-r--r--. 1 root root 1679 8月 15 19:12 mykey.pri [root@localhost tmp]#
为了保证私钥的安全性,我们修改私钥的权限为700,在创建私钥的时候指定权限
[root@localhost tmp]# (umask 077; openssl genrsa -out mykey2.pri 1024) Generating RSA private key, 1024 bit long modulus ......++++++ .......................................++++++ e is 65537 (0x10001) [root@localhost tmp]# ll 总用量 16 -rw-r--r--. 1 root root 783 8月 15 18:42 fstab -rw-r--r--. 1 root root 800 8月 15 18:28 fstab.des3 -rw-------. 1 root root 887 8月 15 19:19 mykey2.pri #权限700 -rw-r--r--. 1 root root 1679 8月 15 19:12 mykey.pri [root@localhost tmp]#
通过私钥生成公钥
[root@localhost tmp]# openssl rsa -in mykey2.pri -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRvjEY+fKwIDny+g5ukY3RUd0S 0UlnS4Df3U5//T9xRYdRZizE/HlFKbGXzxtyGkuahkrVPDV9TVmaLnXsCl95smQc w9Qv9K25KdH3ac/wIUfjwJG7qfdjZ/HR5RKXCCO+GejJ+0rQYwhgBVCzuN6Vokn/ XXcCP5I/CTgP8cFAZQIDAQAB -----END PUBLIC KEY-----
此处说明了公钥是通过私钥生成的。。
三、自建立本地CA(证书颁发)
生成CA自己的私钥
[root@localhost ~]# cd /etc/pki/tls/ [root@localhost tls]# ls cert.pem certs misc openssl.cnf private #openssl.cnf为主配置文件 [root@localhost tls]# cd ../CA/ [root@localhost CA]# ls cacert.pem certs crl index.txt index.txt.attr index.txt.old newcerts private serial serial.old [root@localhost CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048) Generating RSA private key, 2048 bit long modulus ......................................................................+++ ..+++ e is 65537 (0x10001) [root@localhost CA]#
为CA生成自签证书
建立序列号文件和数据库文件
[root@localhost CA]# touch serial index.txt [root@localhost CA]# echo 01 > serial [root@localhost CA]#
至此CA创建完成,我们就可以为客户端颁发证书了
四、证书颁发
客户端(ftp)提交证书申请(IP:172.16.10.2)
生成私钥
[root@stu10 ~]# (umask 077; openssl genrsa -out vstpd.key 2048) Generating RSA private key, 2048 bit long modulus ....+++ ...+++ e is 65537 (0x10001) [root@stu10 ~]# ls
制作一个证书签署请求:
将签署请求文件copy到CA服务器上,CA签署(使用scp命令)
[root@stu10 ~]# openssl ca -in vsftpd.csr -out vstpd.crt -days 365 Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Aug 15 06:01:00 2013 GMT Not After : Aug 15 06:01:00 2014 GMT Subject: countryName = CN stateOrProvinceName = Beijing organizationName = xiaodong organizationalUnitName = Tech commonName = 172.16.10.1 X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: CA:39:D6:37:3B:E0:EF:70:6A:01:0B:DF:A1:2A:DC:7D:54:1E:0D:D7 X509v3 Authority Key Identifier: keyid:33:1F:53:F8:CB:40:03:E2:DB:38:FF:6A:40:08:68:D9:91:25:89:BA Certificate is to be certified until Aug 15 06:01:00 2014 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated [root@stu10 ~]#
到此证书签署完成!!!
五、FTP客户端验证
IP:172.16.10.2 为vsftp服务器
[root@stu10 ~]# vim /etc/vsftpd/vsftpd.conf #vsftpd配置
ssl_enable=YES #是否启用SSL ssl_tlsv1=YES #是否使用TLS v1 ssl_sslv2=YES #是否使用SSl v2 ssl_sslv3=YES #是否使用SSL v3 allow_anon_ssl=NO #是否允许匿名用户使用SSL force_local_data_ssl=YES #百匿名用户传输数据是否加密 force_local_logins_ssl=YES #非匿名用户登录时是否加密 rsa_cert_file/root/vstpd.crt #rsa证书文件位置 rsa_private_key_file=/root/vstpd.key #ftp私钥文件位置 [root@localhost ~]# service vsftpd restart #重启Ftp服务器
此时使用客户端验证证书是否生效
本博文至此总结结束,由于多数内容都是个人理解,有不足之处,望广大博友多提宝贵意见。。。。。