早期的加密技术是二战时期的转轮机,其原理是将包含实际内容的明文字符按照含有特定顺序的密码本进行移位后变为乱码的密文。而解密是则仍是按照密码本的顺序进行反向解密。
网络安全的三个关键目标:
机密性:不能被破解。
完整性:保证接受者接受到的是原始数据,而不是网络问题或黑客攻击造成数据不完整或更改。
可用性:使用的加密算法实际可行,而不是纸上谈兵的。
加密方法:
对称 加 密:
非对称加密:
单向 加 密:
对称加密:
并不是对数据的所有内容进行加密,而是先将数据进行分组,然后分组加密。
在发送密文时需要对数据进行异或运算。
算法: DES:很多年前就被破解,因为只有56位。
3DES:将数据进行3遍DES加密。
AES:高级加密标准。128、256、512位加密算法。DES的升级版本。
非对称加密:
当传输双方需要传递密钥时,首选需要对会话进行非对称加密以用来传递密钥。
它是使用数学函数(费马小定理、欧拉定理)来实现的,完全不同于对称加密。
加密算法:
DH:密钥交换算法。
RSA
DSS
ESS
特点:
私钥加密的数据只能使用与之配对的 公钥解密。
公钥加密的数据只能使用与之配对的 私钥解密。
与对称加密相比,其性能低于其1000倍。
功能:
身份验证:只要公钥能够解开,那么一定是私钥持有者加密发送的数据。
机 密 性:只会用来加密密码。
密钥交换:只用来前期交换密钥
缺点:
性能差。
不能保证数据的完整性。
解决方法是:使用单向加密提取特征码。
身份验证有缺陷:服务器发送公钥时被黑客恶意篡改后再使用公钥加密发送给客户端的情况
其解决方法是:使用浏览器内置的第三方公信机构证书
单向加密:
仅支持从明文→密文。
提取数据的特征码:哈希算法、散列算法。
雪崩效应:数据的微小变化会引起特征码的巨大变化。
定长输出:特征码的长度是一定的。
md5(128)、sha1(160)、sha256)、sha512
数据完整性:发送方会使用自己的私钥将特征加密后发送给服务器。
第三放证书颁发机构(CA):
证书颁发机构的设置类似于DNS的分布式,会在各个地方设置办事处。
在进行证书申请时,会使用U盘等设备进行拷贝,防止中间篡改。
但是证书的使用费很高。
网络内部可以自建CA,然后再给其他人颁发证书。
ssl:
网景公司研发的协议,就是在通信子网(传输层向下)与资源子网(应用层)之间补了半层。
虽然使用的http协议但是与其未加密的传输有本质的区别。ssl1、ssl2、ssl3.
http:80/tcp https:443/tcp
ftp :21/tcp ftps:
smtp:25/tcp smtps:465/tcp
pop3:110/tcp pops :995/tcp
starttls: 根据用户的请求来确定是否对内容进行加密,即一个端口上跑2中服务。
tls:
https(ssl)会话建立过程:
1、由于是基于证书的连接。所以,
首先客户端发送hello到服务器,然后服务器给予客户端hello响应。
这一步双方也协商好了共同使用的加密类型。
2、服务器端把证书发送给客户端,客户端完成身份验证。
(在某些网银交易场景下,客户端也需要发送证书到服务器端。)
3、客户端在完成验证后,会生成一次性密钥发送给服务器。
4、服务器接受到客户端密钥后,可以拿着密钥加密网页。
OpenSSL:
libcrypto:加密、解密的库
libssl :实现ssl
命令使用:
#openssl version 查看版本信息 #openssl ? 查看openssl支持的子命令。 #openssl speed 加密速度测试。默认只使用1个CPU核心。 #openssl enc -des3 -in /path/to/filename -e out /path/to/filename.des3 enc :子命令,表示表示对称密码的加密、解密。可以使用man enc查看使用方法。 -in :指定需要被加密的文件 -e :表示加密文件 -out:将加密后的文件另存。此时使用file命令查看,其文件类型变为data。 #openssl enc -des3 -in /path/to/filename.des3 -d -out /path/to/filename -d :表示解密文件
单向加密的特征码提取命令:
#openssl dgst -md5 -hex /path/to/filename #md5sum /path/to/filename 此条命令的效果同上。 #sha1sum /path/to/filename ...
生成私钥:
#openssl genrsa 2^n > /path/to/siyao.key #openssl genrsa -out /path/to/siyao.key 2^n #(umask 077;openssl genrsa 2^n > path/to/siyao.key) ()表示在子shell中进行。 所以整体意思是在子shell中先将umask值设为077,也就是root创建的所有文件默认都是600的权限。然后再创建私钥。
从私钥中提取公钥:
#openssl rsa -in /path/to/siyao.key -pubout 在申请证书时不需要自己提取公钥。
申请证书步骤:
首先,生成私钥: #(umask 077;openssl genrsa -out /root/siyao.key 2048) 然后,制作证书请求,注意只是请求: #openssl req -new -key /root/siyao.key -out /root/certificate.csr 这里的请求证书必须以“.csr”结尾。否则必须改动/etc/pki/openssl.cnf -key :指定私钥的位置。 -new :关键字选项。 最后再回车后按顺序输入以下信息: CN 国家代码 BJ 指定省份 BJ 指定城市 yy 指定公司名称 tec 指定部门名称 www.yy.com. 指定主机名,也就是浏览器访问时的FQDN。不能指错。 [email protected] 指定邮件 mima 指定查看时的密码 以上信息可以在配置文件中定义,方便使用shell 剩下的事情就是等着第三方机构取走密钥和请求,等待CA的认证。
自建CA:
自建CA首先需要自己生成密钥,然后由自己为自己签好证书后才能为别人签证。
这个过程类似于开公司,老板为自己可一个章,然后任命自己为CEO后,使用自己的章批准。
第一步,为自己生成密钥。 #cd /etc/pki/CA #(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) 第二步,为自己的密钥签证。 #openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365 -x509 指定证书格式,就是自签,不加就是申请。 cacert.pem 一定要是这个名称,否则需要修改配置文件
CA服务器为别人签证:
将certificate.csr复制到CA服务器本地后: #openssl ca -in /root/certificate.csr -out /root/zhengshu.crt -days 365 --days 这里是最后批准的时间,所有时间以这个为准 zhengshu.crt就是最后我们需要的证书
客户端专用测试工具
# openssl s_client -connect HOST:PORT -CAfile /path/to/cacertfile|-CApath /paht/to/cacertfiles_dir/ -ssl2|-ssl3|-tls1
数字证书:x.509v3,这是比较流行的版本
版本号(version)
序列号():证书本身在CA中惟一标识;
签名算法标志
发行者名称
有效期:
证书主体名称:(组织(主机),个人),这个名称必须和浏览器中的地址一样。
如果使用ip访问,则会报错说不是一个主体。
证书主体公钥信息:最重要。
发行商惟一标志
证书主体的惟一标志
扩展:
签名:证书颁发架构的签名。、