数据在传输的时候是以广播的方式一个一个路由的发送到明白主机,当有心之人想要截取我们的数据,只要在数据包的所走的路径上的任意一环上接入他们的设备就可以获取我们的通信信息。我们想保证自己通信的私密性,需要把我们通信的数据加密,传输给对方解密后才可以看到正常的通信信息。
数据加密前我们要了解数据传输的流程:数据传输时分为4层的,应用层,传输层,网络层,网际层。其中下三层都是定义好的规范,我们的数据只好在应用层做手脚,这时我们需要一个软件在我们发送数据前把数据加密,然后进行数据包的封装传输。
既然已有数据加密的位置,这里需要定义加密的算法,数据加密分为三种:1对称加密,2单向加密,3非对称加密。既然是加密算法并且大家都要使用,那么就需要把算法公布出来(不公布算法直接发布软件让别人使用,这种行为想想都害怕,怎么保证发布软件的人不破解我们的数据)。
算法是公开的那么怎么保证数据加密,这就需要使用不同密钥,就好比锁家家都使用,但是只有我们自己的钥匙可以开自己家的们。
一单向加密单向加密的作用是保证文件的独特性,有时我们传输一个文件我们不要求这个必须是保密的,但是我们要求这个文件必须和和发布者的一模一样。这时发布者只要把这个文件的单向加密后的数据放在网页上,我们下载完数据后也使用单向加密算一次,对比两次的单向加密的结果就可以了。单向加密其本质就是提取文件的特征码,源文件保持不变。一个例子:
openssl dgst -md5 FILE #把FILE文件进行单向加密 md5sum FILE
单向加密的详细文档可以查看man dgst。单向加密的一些常用选项:
-md5#加密算法,加密算法还有sha1,sha224,sha256
每个算法都有对应的工具sha1sum,sha224sum,sha256sum
二对称加密对称加密的意思是数据加密和解密使用同一个密钥,和我们平时使用的门锁类似,开门关门都使用同一把钥匙。实现的方法:
opensslenc -e -des3 -a -salt -in FILE -out FILE.S #使用这个命令加密数据,是把FILE加密成FIEL.S,加密算法使用的是des3。命令执行后需要输入密码。 opensslenc -d -des3 -a -salt -in FILE.S -out FILE.S #这个命令是把FILE.S文件解密为FILE。这时需要加密时输入的密码
gpg -c FILE #会生成FILE.gpg的加密文件 gpg -o FILE -d FILE.gpg #解密FILE.gpg文件为FILE 对称加密的详细用法可以使用:man enc查看,对称加密的一些常用的参数 -e #对文件进行加密 -d #对文件进行解密 -des3 #使用des3算法,算法还有aes,blowfish,twofish -a #base64的编码方式 -salt #这项是默认的,可以不写,加密文件的时候添加一些其它数据
非对称加密是这一节的重点,非对称加密使用的是一对密钥:公钥和私钥。公钥放在互联网上,允许任何人下载使用;私钥只有一个主机持有。通过公钥加密的数据只有私钥可以解开,通过私钥加密的数据只有公钥可以解开。一个例子:
使用非对称加密需要先生成私钥,然后从私钥中提取公钥。
opensslgenrsa -out FILE.PRIVE 2048 #生成一个2048为的私钥 opensslrsa -in FILE.PRIVE -pubout -out FILE.PUB #从私钥FILE.PRIVE中提取公钥FILE.PUB
以下这些内容根本不重要,我们在网上传送数据何时使用过加密算法,何时那么费劲过,加密文件最多也就是使用对称加密给文件加个密码。
gpg--gen-key #生成密钥对 gpg--list #查看公钥 gpg-a -export -o FILE.pubkey #导出公钥到FILE.pubkey文件中 gpg--import FILE.pubkey #导入公钥 gpg-e -r NAME FILE #使用NAME公钥加密FILE文件 gpg-d FILE #解密FILE文件,解密需要有对应文件的私钥 gpg--delect-keys NAME #删除NAME公钥 gpg--delect-secret-keys NAME #删除NAME私钥 gpg的详细用法man gpg genrsa的详细用法man genrsa四加密类型对比
加密速度 | 密钥数量 | 分发难度 | 密钥安全性 | |
对称加密 | 中 | 多 | 难,方式很多,很混乱 | 安全机制很不健全 |
单向加密 | 块 | 无 | 最简单,官网公布 | 不需要安全性 |
非对称加密 | 慢 | 少 | 中,通过CA分发 | 有健全的安全机制 |
加密类型对比表
传大量私密数据,我们一般采取三种加密方式联合验证的方式传输。假如a给b发送数据,数据的格式如:key(date+sa(date)+pb(key)
pb代表的是b的公钥,sa代表a的私钥,key代表对称加密的密钥。这个方法不仅保证加密的安全性,也保证了加密的速度,同时也知道这个数据时谁发送的。
五非对称加密的密钥认证非对称加密的有一个重点,我们若想和某个主机b通信,必须要有他的公钥才可以发送私密消息,倘若一个网站直接拿出一个公钥说这是就是主机a的公钥,我们怎么证明这个公钥就是b的公钥。互联网上就建设了一些认证机构CA,一个提供服务的服务器要使用加密数据可以去CA机构认证,我们的操作系统会把这些机构认证的公钥下载并导入系统。
有时公司构建一个内部使用的网站不对外提供服务,只是公司内部使用并且需要保证数据安全,这时我们可以建立一个CA给我们公司的网站提供服务。以下我们直接构建一个CA,并模拟一个CA颁发证书的流程。CA的配置文件shi/etc/pki/tls/openssl.cnf
1第一步我们要构建一个CA
cd /etc/pki/CA #切换到构建CA的目录 (umask 066;openssl genrsa -outprivate/cakey.pem 2048) #生成CA使用的2048位的私钥 touch index.txt #创建CA数据库 echo 01 > serial #重置计数器,给证书编号使用,移除证书时也要使用这编号 openssl req -new -x509 -key private/cakey.pem-days 7300 -out cacert.pem #CA生成自签名证书,输入这行命令会进入交互界面,交互界面内容如下: Country Name (2 letter code) [XX]:CN #这一步是输入国家 State or Province Name (full name)[]:beijing #指定省份 Locality Name (eg, city) [DefaultCity]:haidian #指定市 Organization Name (eg, company) [DefaultCompany Ltd]:oldking.org #公司名称 Organizational Unit Name (eg, section)[]:directors #部门名称 Common Name (eg, your name or your server'shostname) []:oldking.org #服务器名字 Email Address []:oldking@gmail.com #邮箱
2生成请求授权文件
这是在其它主机执行的命令,也就是向CA申请证书文件的服务器执行的命令。
cd /etc/httpd/ssl/ (umask 066;openssl genrsa -outhttpd.key 2048) #给当前主机创建私钥密钥 openssl req -new -key httpd.key -out httpd.csr-days 730 #生成请求文件,这个同样会进入交互式模式: Country Name (2 letter code) [XX]:CN State or Province Name (full name)[]:beijing Locality Name (eg, city) [DefaultCity]:haidian Organization Name (eg, company) [Default CompanyLtd]:oldking.org Organizational Unit Name (eg, section)[]:IT Common Name (eg, your name or your server'shostname) []:lw.org Email Address []: Please enter the following 'extra'attributes to be sent with your certificate request A challenge password []: An optional company name []:lw is good
3 CA授权
scp httpd.csr 172.16.29.1:/root #把请求文件发送到CA上 openssl ca -in /root/httpd.csr -outcerts/httpd.crt -days 730 #这一步也要进入交互式模式,确认授权信息
4 CA吊销证书
openssl x509 -in /PATH/FROM/CERT_FILE-noout -serial -subject #查找授权文件的信息 openssl ca -revoke /etc/pki/CA/newcerts/ SERIAL.pem #吊销指定证书 echo 01 > /etc/pki/CA/crlnumber #生成吊销证书的编号(第一次吊销一个证书时才需要执行) openssl ca -gencrl -out/etc/pki/CA/crl/ca.crl #更新证书吊销列表 openssl crl -in /etc/pki/CA/crl/ca.crl -noout-text #查看crl文件
这一节主要了解三个加密方式的简单用法,了解加密算法的优缺点。熟练CA授权证书的流程,并可以自建CA并给其他主机授权。