1.三种加密方式:对称加密(单密匙加密),公钥加密(非对称加密),单向加密
1-1:对称加密
加密和解密都使用同一个密钥,加密速度比较快,原理:将准备加密的数据切成固定大小的块,逐块加密,加密的块和块之间有相关性,因此解密也要一块一块的解密,少了任何一块都不行
加密算法:DES(56bits),3DES,AES(128bits)--常用,Blowfish,Twofish,IDEA,RC6
缺陷:解密需要同样的密钥,所以在传送数据的时候加密的数据和密钥都需要传送,如果被截取了,截取者篡改你的数据再继续发送,接收方无法验证数据的完整性以及对发送人的有效性认证.通信双方都需要密钥,如果一站点的访问对象很多,会导致存储的密钥过多.
1-2:公钥加密(非对称加密)
加密解密双方都有一对密钥,一个公钥,一个私钥,公钥是公开的,任何人都可以获取到,并且通信的双方是使用对方的公钥加密,因为公钥的公开性,所以为了它的安全,密码都非常的长,加密非常慢,所以通常不用它来加密数据,对方的私钥是用解密的.在数据传输的过程中,首先用对方的公钥加密,把加密的数据发送给对方后,对方用自己的私钥解密,实现了密钥传输.发送的数据用自己的私钥加密,那就只能用自己的公钥解密,所以只要能用自己的公钥解密的,都是我的数据,这就实现了用户身份认证.但是公钥加密的速度非常慢,所以,它又结合了单向加密来实现用户身份认证.(公钥私钥都可以用来加密解密)
加密算法:RSA,EIGamal,DSA
缺陷:用户身份认证慢,还是不能保证数据的完整性
1-3:单向加密
主要用于数据的完整性校验,主要特征是,定长输出和雪崩效应.也就是说,不管你的源数据有多大,使用相同的单向加密算法计算出来的校验码长度都是一定的,雪崩效应是指,源数据只要有一点点的改变,计算出来的结果都会差十万八千里.如何实现数据完整性和用户认证:发送方先使用单向加密计算出要发送数据的特征码,再用自己的私钥加密特征码,接受方只能用发送方的公钥解密.确保了数据不会被篡改,以及保证了发送方的身份.但是还是不能保证数据的私密性.
加密算法:MD5,SHA1,SHA512,CRC-32
1-4:三种结合,互联网加密的机制(保证数据的完整性,私密性,用户认证)
发送方先用单向加密计算出源数据的特征码,然后用自己的私钥加密这段特征码(公钥加密),附在源数据的后面,这样保证了数据的完整性和用户认证,然后使用对称加密把所有数据加密,因为对称加密比较快,再用接收方的公钥加密对称加密的密码(这样只有接收方的私钥可以解密这段数据).然后就可以发送数据了.接受方接到数据后,先用自己的私钥解密,得到对称加密的密码,用对称加密的密码再解密,得到发送方用自己私钥加密的数据,再用发送方的公钥解密,得到源数据和特征码,再使用单向加密计算元数据的特征码,比较是否一致.整个发送接收过程就结束了.
1-5.CA证书颁发机构
在1-4当中的实现看起来很完美,但是如果有那么一个人或者机构很厉害,能全权冒充接受数据方,那怎么办?所以得有一个仲裁机构,一个全球都可以信赖的仲裁机构,这个机构说接受方是接受方,那它就是接受方,别人都冒充不了.这个仲裁机构就是CA,CA会给接收方颁发一个证书.但是全球性的证书都很贵,所以你如果指向在有限的范围内使用证书,如:公司内部,就可以自建证书.CA会给申请者授权,并且自身维护着证书的使用期限,以及证书是否被吊销等,下面会详细介绍,看2-7.
2.openssl
openssl是一个开源套件,一个很小的程序就实现了对称加密,公钥加密,单向加密,他主要有三段组成:1.libcrypto:通用功能的加密库.2.libssl:用于实现TLS/SSL的功能.3.openssl:多功能命令行工具(1.生成密钥.2.创建数字证书.3.手动机密解密数据)
2-1:openssl命令
2-1.1例:给/etc/fstab加密.
使用命令 openssl enc �Cdes3 �Ca �Csalt �Cin /etc/fstab /tmp/fstab.cipher(使用帮助:man enc)
密码使用:redhat
2-1.2.看看生成的文件
2-1.3:解密该文件
使用命令 openssl enc �Cd -des3�Ca �Csalt �Cin /tmp/fstab.cipher �Cout /tmp/fstab.test(使用帮助:man enc)
密码:redhat
2-2:单向加密(计算校验码)
2-2.1:使用命令:sha1sum filename 或 openssl dgst �Csha1 file(使用帮助man dgst),因为他们的计算方式是一样的,所以结果也是一样的, 如:
2-3:用户认证
2-3.1使用命令:openssl passwd -1,查看帮助 man sslpasswd
2-4:公钥加密:公钥加密,私钥解密
2-5:数字签名:私钥加密,公钥解密
算法:RSA,EIGamal,DSA(强调:这个只能私钥加密,公钥解密)
2-6:密钥交换
算法:DH,实际上并不交换密钥,双方在数据发送的时候没有发送任何密码.发送放在本地对数据做一些计算,把计算的结果发送给接受放,接收方对自己要发送的数据做一些运算,将计算后的结果发送给发送方,双方发送数据,发现双方的计算结果都和接收的数据是一样的,就完成了密钥交换...诶 好晕...
2-7:数字证书CA:让第三方机构将申请者的公钥安全的发放出去
数字证书的格式:
a.包含公钥和有效期限
b.数字证书持有者的个人(主机)合法身份信息:(客户端在访问主机时,输入的主机名,一定要和主机申请证书的名字相同)
c.数字证书的使用方式
d.CA(证书颁发机构)的信息
e.CA(证书颁发机构)的签名
f.如果是CA的证书,需要有自签署证书
3.CA的实现
服务器端:
3-1.CA的配置文件:/etc/pki/tls/openssl.cnf(这个配置文件在CentOS5中的dir是相对路径,所以得改)
3-2.首先进到工目录.cd /etc/pki/CA
只用生成私钥就行了,公钥是私钥中的
使用命令:openssl genrsa �Cout private/cakey.pem 2048
3-2.1:上面生成的文件权限太大了,我们必须要改,所以我把他删了,用另外一种方法创建(也可以改权限,我这里只是为了记住另外一种用法)
3-3:查看公钥,非必要步骤
使用命令 openssl rsa �Cin private/cakey.pem �Cpubout �Ctext �Cnoout
3-4:生成自签证书
使用命令: openssl req �Cnew �Cx509 �Ckey private/cakey.pem �Cout cacert.pem �Cdays 3655
3-5:创建必要文件以及初始化证书编号(这里echo 01 > serial之前没有写空格是错误的,现在纠正一下...太粗心了,各位改改就行了)
使用命令:touch index.txt serial crlnumber;echo 01>serial
客户端:
3-6:假设创建的是http的服务的密钥,在/etc/httpd下创建文件夹ssl,然后进入ssl文件夹中,生成密钥对
使用命令:(umask 077;openssl genrsa >httpd.key 1024)
3-7:生成证书签署请求
使用命令:openssl req -new -key httpd.key > httpd.csr
3-8:把签署申请发送给主机
使用命令:scp httpd.csr 192.168.1.107:/tmp/(这里是我服务器主机的主机IP)
3-9:到服务器查看是否有该文件
3-10:给该文件签署证书
使用命令:openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3655
3-11:把签好的文件发回去
使用命令:scp httpd.crt 192.168.1.108:/etc/httpd/ssl
3-12:客户端查看该证书
4.吊销证书:(必要时才吊销,这里只是演示)
openssl ca �Crevoke httpd.crt
终于写完了.....累屎啦.......