09葵花宝典Openssl和DNS
本节主要介绍网络上相关数据加密和DNS知识,以及在 linux 上的实现。
一、常见加解密知识
数据加密是现代网络应用的基础之一。加密技术好比人类的衣服,第一实现了抵御自然环境的变化,第二使人类迈向了文明。
通常来讲,加密就是使用密钥K将数据从A变成B,而解密就是将数据从B通过K(或者与K成对的K1)将其还原为A。其中B可以公开,得到B的人,如果没有密钥K或者K1,将无法或者A是什么。
有三个方面:对称加密、单项加密、公钥加密(非对称加密),每种加密类型都有其特点和相应的应用场景。
1、对称加密。
对称加密使用的加密密钥和解密密钥是相同的,即使用K来加密,也使用K来解密。加密方A和解密方B同时拥有密钥K。在传输数据时,双方必须事先约定好需要使用的密钥K。
常见的对称加密算法有:des,3des,AES等
2、单项加密。
单项加密主要是用于提出数据的特征码或者说指纹信息的。就是将给定的信息A,变成一个固定长度的数据(固定大小)B,这个B就称为A的特征码(指纹)。变化过程成为单项加密。其特点是只要A不变,变化过程使用的算法不变,B就一定不会变。当A有些许的变化时,B就有很大的改变
常见的单项加密算法有:MD5,sha1,sha256等
3、公钥加密。
公钥加密也叫非对称加密,其特点是加密和解密所使用的密钥是成对出现,加密时使用K,解密时使用与其成对的K1,或者加密时使用K1,解密时使用K。一般而言,我们将K和K1分别称为私钥和公钥。其中,公钥可通过私钥导出。
公钥加密有三个作用:一是加密。它可以像对称加密一样,对数据进行加密,但一般而言,公钥加密的计算量是对称加密的3个数量级以上,如果用其对大量数据进行加密,效率是非常低的。二是数字签名。如果用一个公钥能解密一段数据,那么这段数据必然是用与其对应的私钥进行加密的,私钥的拥有着,对其不能否认。第三是密钥分发。前面说到对称加密时,加密双方必须有约定相同的密钥,并且这个密钥不能被第三方获知,否则,加密将没有意义。公钥加密,即可实现双方实时的约定这个密钥,且密钥本身并不在信息传播路径上传送。
实现数据加密功能的公钥加密方法有:RSA,DSA,ElGamal等;实现数字签名功能的公钥加密算法有:RSA;实现密钥分发的公钥加密方法有:RSA,D-H等。
在公钥加密算法中,还有一个重要问题,就是公钥对由谁产生,由谁认证的问题。例如,在数字签名过程中,使用私钥对数据进行签名,那么,这个私钥由谁来认可,这就是一个认证的过程。通常,在网络上,有专门的认证机构,它们之间互相信任,然后,由这些认证机构对其他机构和个人签发证书,证书中包括了该证书的公钥以及使用人相关的信息,相当于电子身份证一样。这个专门的认证机构,称之为CA。在我们练习和某些小规模的生产环境中,需要建立一个私有的CA来签发证书。
二、下面,介绍Linux上面,使用Openssl工具,来实现数据的对称加密、单项加密、以及建立私有CA颁发证书等功能。Openssl命令有三类子命令,即标准命令、消息摘要命令(单项加密)、加解密命令,下面分别说明。
openssl工具的配置文件是/etc/pki/tls/openssl.cnf,定义了openssl的相关默认设置,特别是在用openssl创建私有CA时,也定义了其默认设置。
1、对称加密
]# openssl des3 -e -base64 -in /tmp/fstab -out /tmp/fstab1
使用des3算法,用base64格式,对/tmp/fstab文件进行加密,加密后文件为/tmp/fstab1
]# openssl des3 -d -base64 -in /tmp/fstab1 -out /tmp/fstab1-jie
使用des3算法,对使用base64格式的加密文件/tmp/fstab1进行解密,解密后文件为fstab1-jie
-e 加密(encode) -d 解密(decode) -base64 编码格式(同-a),-in 指明要加密或解密的文件,-out 指明加密后或解密后的文件。
可选的常见对称加密算法可用 openssl ? 来查看 Cipher commands
2、单项加密
]# openssl dgst -md5 fstab
MD5(fstab)= f91e11874e54184589b273386c49c81a
可使用md5sum命令来验证,该命令也是使用md5算法来计算输入数据的特征码
]# md5sum fstab
f91e11874e54184589b273386c49c81a fstab
使用-sha1、-sha256等算法选项,与sha1sum、sha256sum等命令相同,即只要输入数据相同,算法相同,输出必定相同。
使用openssl的dgst自命令对/tmp/fstab来进行单项加密,使用的单项加密算法为sha256,使用openssl ?来查看可使用的单项加密算法
3、公钥加密
3-1、生成私钥
]# openssl genrsa -out /tmp/private.key 1024
但是,通常情况下,私钥文件是不能被除root以外的用户读取的,默认情况下,生成私钥文件的权限时644,需要将其修改为600,可以这样操作:
]# (umask 077; openssl genrsa -out /tmp/private.key 1024)
]# ll private.key
-rw——-. 1 root root 887 May 10 22:29 private.key
3-2、生成CA的自签名证书
CA的自签名证书,需要一个私钥,在openssl.cnf文件中,默认私钥文件存放路径为:private_key = $dir/private/cakey.pem# The private key,其中,$dir 为/etc/pki/CA
生成的证书文件为:certificate = $dir/cacert.pem # The CA certificate
1、生成私钥:]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048
2、生成CA自签名证书:]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert/pem
-new 指明这是一个新的证书签署请求
-x509 outputs a self signed certificate instead of a certificate request,输出自签证书
-key 私钥
-out 自签证书文件
执行上述命令后,会出现交互式命令行,需要输入该自签证书的相关信息,后面请求CA签署的签名除
输入完成后,即可生成CA的自签证书
创建CA所需的目录和文件,其中目录3个,文件2个
mkdir /etc/pki/CA/{certs,newcerts,crr}
touch /etc/pki/CA/{serial,index.txt}
echo 01 > /etc/pki/CA/serial
3、证书请求者生成请求签名的私钥,方法同1,
生成证书请求文件:openssl req -key file/to/private.key -out /file/to/certs.csr
4、使用相应的工具,将请求签名的私钥安全拷贝至CA上,如scp命令
scp root@ipaddr:/path/tofile /path/to/dest/file
将ipaddr主机中/path/tofile文件拷贝至本机的/path/to/dest/file中,前面表示源文件,后面表示目标,也可以源是本机,目标是远程主机。
5、使用ca命令对请求进行签署
]# openssl ca -in /etc/pki/CA/certs/certs.out -out /etc/pki/CA/newcerts/certs.crt
6、使用openssl x509查看以签署证书相关信息
]# openssl x509 -in certs.crt -noout -serial -subject
serial=01
subject= /C=CN/ST=SHANNXI/O=xfy/OU=cb/CN=cb.koala.com/emailAddress=admin.koala.com
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98672
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Python
Paul Barry / O'Reilly Media / 2010-11-30 / USD 49.99
Are you keen to add Python to your programming skills? Learn quickly and have some fun at the same time with Head First Python. This book takes you beyond typical how-to manuals with engaging images, ......一起来看看 《Head First Python》 这本书的介绍吧!