加密、解密、openssl的基本应用及CA的实现过程

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

image

2-1.2.看看生成的文件

image

2-1.3:解密该文件

使用命令 openssl enc �Cd -des3�Ca �Csalt �Cin /tmp/fstab.cipher �Cout /tmp/fstab.test(使用帮助:man enc)

密码:redhat

image

2-2:单向加密(计算校验码)

2-2.1:使用命令:sha1sum filename 或 openssl dgst �Csha1 file(使用帮助man dgst),因为他们的计算方式是一样的,所以结果也是一样的, 如:

image

2-3:用户认证

2-3.1使用命令:openssl passwd -1,查看帮助 man sslpasswdimage

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是相对路径,所以得改)

image

3-2.首先进到工目录.cd /etc/pki/CA

只用生成私钥就行了,公钥是私钥中的

使用命令:openssl genrsa �Cout private/cakey.pem 2048

image

3-2.1:上面生成的文件权限太大了,我们必须要改,所以我把他删了,用另外一种方法创建(也可以改权限,我这里只是为了记住另外一种用法)

image

3-3:查看公钥,非必要步骤

使用命令 openssl rsa �Cin private/cakey.pem �Cpubout �Ctext �Cnoout

image

3-4:生成自签证书

使用命令: openssl req �Cnew �Cx509 �Ckey private/cakey.pem �Cout cacert.pem �Cdays 3655

image

image

3-5:创建必要文件以及初始化证书编号(这里echo 01 > serial之前没有写空格是错误的,现在纠正一下...太粗心了,各位改改就行了)

使用命令:touch index.txt serial crlnumber;echo 01>serial

image

客户端:

3-6:假设创建的是http的服务的密钥,在/etc/httpd下创建文件夹ssl,然后进入ssl文件夹中,生成密钥对

使用命令:(umask 077;openssl genrsa >httpd.key 1024)

image

3-7:生成证书签署请求

使用命令:openssl req -new -key httpd.key > httpd.csr

image

3-8:把签署申请发送给主机

使用命令:scp httpd.csr 192.168.1.107:/tmp/(这里是我服务器主机的主机IP)

image

image

3-9:到服务器查看是否有该文件

image

3-10:给该文件签署证书

使用命令:openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3655

image

3-11:把签好的文件发回去

使用命令:scp httpd.crt 192.168.1.108:/etc/httpd/ssl

image

3-12:客户端查看该证书

image

4.吊销证书:(必要时才吊销,这里只是演示)

openssl ca �Crevoke httpd.crt

image

终于写完了.....累屎啦.......

你可能感兴趣的:(加密,相关性)