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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。