密钥交换

密钥交换的俩种方式

  1. 公钥交换 发送者通过使用接受者的公钥来加密自己的私钥,加密后的数据发送给接收者。接收者亦然来达到密钥交换的目的
  2. DH (Deffie-Hellman):生成对称(会话)密钥 第一步:A主机和B主机提前协商大素数P和整数g 第二步:A主机和B主机各生成随机数a和b 第三步:A主机通过计算g的a次方对P取余,得出结果发送给B主机。B主机计算g的b次方对P取余,得出结果发送给A主机 第四步:A主机和B主机通过计算[(g的b次方对P取余)^a ]%p也就是g^ab%p生成密钥来达到交换的目的

弊端

由于公钥的公开性容易遭到不法分子冒充中间人同时欺骗双方达到窃取数据的目的 中间人.jpg

CA和证书

为了避免遭到不法分子冒充中间人同时欺骗双方达到窃取数据的目的,在网络中我们需要构建CA提供证书来加强服务端和客户端之间信息交互的安全性,以及证书运维相关服务。任何个体/组织都可以扮演 CA 的角色。 CA是证书的签发机构是(PKI:Public Key Infrastructure )公共密钥加密体系的核心。CA解决了公钥不可靠的问题通过颁发证书确保主机收到的公钥是可靠的。


客户端也会对服务器返回的证书验证 1、验证域名、有效期等信息是否正确; 2、判断证书来源是否合法:每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证; 3、判断证书是否被篡改:需要与CA服务器进行校验; 4、判断证书是否已吊销,可用于第3步中,以减少与CA服务器的交互,提高验证效率。 以上条件完全满足时才能证明证书的合法性

证书的作用

保密性 - 只有收件人才能阅读信息。 认证性 - 确认信息发送者的身份。 完整性 - 信息在传递过程中不会被篡改。 不可抵赖性 - 发送者不能否认已发送的信息。 保证请求者与服务者的数据交换的安全性。

HTTPS的通信

HTTPS是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。 https.jpg 1、客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器 ; 2、服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数 ; 3、 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机字符串,并使用服务器的公用密钥对其进行加密(参考非对称加/解密),并将加密后的信息发送给服务器 ; 4、 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC密钥(参考 DH密钥交换算法); 5、客户端将所有握手消息的 MAC 值发送给服务器 ; 6、 服务器将所有握手消息的 MAC 值发送给客户端;

练习

一、根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频 率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT

[root@localhost date]# cat denydos.sh 
#!/bin/bash
link=100
ss -tan | awk -F"[ :]+" '/^ESTAB/{print $(NF-2)}'| sort -nr | uniq -c | sort -nr|while read count ip;do
	if [ $count -gt $link ];then
		iptables -A INPUT -s $ip -j REJECT && echo "$ip is REJECT" >> /date/deny.log
	fi
done
[root@localhost date]# chmod +x denydos.sh 
[root@localhost date]# crontab -e
crontab: installing new crontab
[root@localhost date]# crontab -l
*/5 * * * *  /date/denydos.sh

二、使用awk以冒号分隔获取/ettc/passwd文件第一列

[root@localhost date]# awk -F: '{print $1}' /etc/passwd