*********************************************
一、加密算法
二、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__?.?�.x?..>.?Cm酋nJ+?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. i. 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服务器
此时使用客户端验证证书是否生效
本博文至此总结结束,由于多数内容都是个人理解,有不足之处,望广大博友多提宝贵意见。。。。。