在虚拟机里实现数据加密和
openssl签证。
一、
数据加密是实现网络安全的关键技术之一,本文首先介绍加密的基本概念,然后着重讨论
三
类最常见的加密技术:
对称加密、非对称加密和单向加密,最后说明怎么样使用
openssl对数据进行加密。
数据加密技术是网络中最基本的安全技术,主要是通过对网络中传输的信息进行数据加密来保障其安全性,这是一种主动安全防御策略,用很小的代价即可为信息提供相当大的安全保护。
既然说到了解密,那为什么要用到加密呢?当然是因为会受到网络攻击,所以才需要通过加密来保证数据传输的安全性与完整性。那么首先介绍一下常见的网络攻击方式:
数据注入:也就是篡改,把别人传输的数据进行非法修改,使其面目全非,无法正常使用。
窃听:
在网络中,当信息进行传播的时候,可以利用工具,将网络接口设置在监听的模式,便可将网络中正在传播的信息截获或者捕获到,从而进行攻击。网络监听在网络中的任何一个位置模式下都可实施进行。而黑客一般都是利用网络监听来截取用户口令。
会话劫持:
(Session hijacking),是一种网络攻击手段,
就相当于截断会话。
黑客
可以通过破坏已建立的数据流而实现
劫持
。
会话劫持利用了TCP/IP工作原理来设计攻击
,
可以对基于TCP的任何应用发起攻击,如HTTP、FTP、Telnet等
。
二、
加密的基本概念
"加密",是一种限制对网络上传输数据的访问权的技术。原始数据(也称为明文,plaintext)被加密设备(硬件或软件)和密钥加密而产生的经过编码的数据称为密文(ciphertext)。将密文还原为原始明文的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。
数据的加密方式有三种:
(
1
)单向加密:
MD5、SHA、HMAC
这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法。我们通常只把他们作为加密的基础。单纯的以上三种的加密并不可靠。
(
2)对称加密:加密和解密使用不同的密码,有代表性的有RSA、DSA、ElGamal和ECDSA。非对称加密/解密的安全性是基于复杂数学难题,特点是运算复杂、速度慢,主要应用于金融、军事等重大机密的系统。
(3)非对称加密:又叫公钥加密。
在公钥密码中,收信方和发信方使用的密钥互不相同,而且几乎不可能从加密密钥推导解密密钥。比较著名的公钥密码算法有:RSA、背包密码、McEliece密码、Diffe��Hellman、Rabin、Ong��Fiat��Shamir、零知识证明的算法、椭圆曲线、EIGamal算法等等。最有影响的公钥密码算法是RSA,它能抵抗到目前为止已知的所有密码攻击。
非对称加密/解密的安全性是基于复杂数学难题,特点是运算复杂、速度慢,主要应用于金融、军事等重大机密的系统。
注意:
加密的强度本身依赖于密码的强度,因为更换密码比更换算法更易实现。
三、下面介绍一下三种加密方式的工作机制:
(1)
单向加密:这种加密方式是不可逆的,并不单独使用。主要是用来获取数据的特征码,保证数据的完整性。特点是:定长输出、不可逆、
雪崩效应(输入数据的稍微改变,就会引起结果的巨大不同)。
(2)
对称加密: 加解密双方使用同一个密钥。如: Tom 要发送数据给Regina,则:
Tom : data : algrithm (passwd) -->code
Regina : code : algrithm (passwd) --> data
这种技术可以实现数据的保密性。
PS: 密钥交换对于对称机制是一个无法解决的难题,因为无法将密钥提供给对方。
(3)
公钥加密:
公钥:是从私钥中提取出来 缺陷:速度非常慢 例子:
Tom
向R
egina
发信息,
Tom
拿自己的私钥,进行加密。 R
egina
拿Tom
的公钥解密,只要能解密出来, R
egina
就可以认为
Tom
就是
Tom
,而不是别人冒充的。
Public Key:公钥
Secret Key : 私钥 (只有用户本人留存,其他任何人不可以查看。)
Tom : data --> PK --> code
Regina : code --> SK --> data
注: 公钥加密只能使用与之配对的私钥解密,反之亦然。
如何完成身份验证?
(1)Tom 用单项加密算法将要传送的数据加密,生成特征码;并用自己的私钥将特征码再加密,传送给Regina.
(2)Regina 用Tom的公钥能够解密数据包,就说明是Tom 发送的,可以用同样的算法解密。(可用来完成身份验证)
此时存在的问题是,Regina 如何知道Tom 的公钥就是Tom的,而不是别人伪造的呢?
三种加密方式的结合:
(1)Tom生成一段要发送给Regina的数据,用单向加密生成数据特征码(就相当于数据签名),放在数据的后面;用自己的私钥加密特征码附加在特征码的后面;再用于Regina商量好的对称算法加密整段数据(比如为x);再用Regina的公钥加密数据x,在发送给Regina。
(2)Regina 收到数据后,先用自己的私钥将数据解密为x,在使用对称算法解密x;然后使用Tom的公钥解密;而后使用同样的单向加密算法解密,查看是否一致(确定数据是否被篡改);最后可以查看数据。
虽然如此,看起来已经很安全可靠了,但是最重要的问题仍然是密钥交换。
基于以上所存在的问题,就诞生了今天的CA。
四、CA 是可信任的第三方证书颁发机构。CA的证书一般包含的信息有:
用户提供的信息:证书持有者的相关信息和公钥。CA提供的信息:CA的相关信息、证书的使用方法(用户或服务器)和证书的有效期。
PKI: Public Key Infrastructure 公钥基础设施,是互联网上以CA提供的公钥安全架构,其核心就是CA。
五、Openssl是Linux系统中常用的加密工具。
SSL: Secure Socket Layer 安全套接字层。七层模型时工作在传输层与会话层之间的半个层;TCP/IP模型时工作在传输层与应用层之间的半个层。
TLS: Transport Layer Security。
openssl有三部分组成,两个库一个文件。
(1)libcrypto 支持加密解密的库文件
(2)libssl 库文件,支持TLS/SSL协议的库(可实现基于会话的安全)
(3)openssl 多用途的加密工具,功能非常强大,可提供单向加密、对称加密和公钥加密,还可以用于创建CA(自建CA的建议解决方案)。
如何加密?
openssl enc -des3 -a -in plaintext -out ciphertext.des3
解说 enc: 使用加密技术的编码
-des: 使用DES加密算法
-a : 使用base64编码
-in : 需要加密的文件
-out: 加密后输出的文件名
如何解密?
openssl enc -d -des3 -salt -a -in ciphertext.des3 -out plaintext
-d : 解密
openssl rand [ -base64 ] num 随机生成数 使用openssl base64将数据编码
md5sum filename1 sha1sum filename2 和 openssl dgst -sha1 filename3 一样,可计算文件的校验码,提取文件的特征码。
生成密钥:
openssl genrsa 2048 > x.key 生成RSA的密钥对,输出的信息为私钥,公钥是从私钥的内容中提取出来的。
提取公钥:
openssl rsa -in filename1(存放私钥的文件,如x.key) -pubout -out filename2(存放公钥的文件)
注意: 若是-pubout 后面没有 -out 和文件名,则输出至屏幕上。
这样生成的私钥是不能被别人看到的,但是可以被读到的,所以还得修改权限:chmod 600 filename2
也可以使用(umask 077; openssl genrsa 2048 > x.key),这样生成的文件直接就是加密存放的,比较安全。() 表示在子shell 中使用,不会对当前shell产生影响。
任何公钥和私钥都是用户自己生成的,CA只是对其进行签名,然后对其负责。
如何用openssl做成证书并颁发给服务器?
(1)
修改SSL的配置文件
# cd /etc/pki/tls
# vim openssl.cnf
将 [ CA_default ] 下的 dir = ../../CA
改为 dir = /etc/pki/CA
(2)
# cd ../CA
(umask 077; openssl genrsa 2048 > private/cakey.pem(红帽要求为此格式的文件后缀))
(3)
签证:
请求发证: openssl req -x509(CA的流行格式)-new -key private/cakey.pem -out cacert.pem
提供自己的信息,
国家:CN
省份:Henan
地区:ZZ
公司:magedu.com(也可以是个人)
部门: Tech(技术部)
服务器名: ca.magedu.com
邮箱: 选填
一系列填完之后就可以了,另外还要建几个目录和文件供后续使用。
# mkdir certs newcerts
# touch index.txt
# echo 01 > serial
# echo 01 > crlnumber ,此时CA服务器就建好了。
若是想给httpd服务发证,该怎么做?
# cd /etc/httpd/ (httpd 服务的配置文件所在的目录)
# (umask 077; openssl genrsa 1024 > httpd.key) 生成私钥文件
# openssl req -new -key httpd.key -out httpd.csr 提取公钥
# openssl ca -in httpd.csr -out httpd.crt 请求CA颁发证书
此时,就又该填写信息了,同上稍微修改即可。把服务器改为: ling.magedu.com
复制刚才的cacert.pem 到Windows 桌面,由于Windows不识别此格式的后缀,所以还要将后缀名修改为 .crt格式。导入到对应浏览器,步骤为
(1)
单击浏览器的选项,-->高级-->
(2)
管理证书-->导入-->
(3)
选择--> 完成
此时,httpd服务的https协议就用openssl做好了。