本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。
本文系马哥Linux学习笔记整理而成
当今社会信息技术突飞猛进,大家平时少不了浏览网页,那么我们是如交换图文数据的呢?
简单来说由如用户的浏览器发起请求,网站响应请求并返回图文数据
C/S
架构与Socket
简述
用户端叫做Client
。网站端叫Server
,这种架构模式我们称之为C/S
(client/server
)架构。客户端是主机,服务器也是主机,主机与主机之间的通信其实就是socket
进程间的通信,port
就是进程的地址,是进程向内核注册来使用某端口,注册就意味着占用了该端口。
由于网站服务器需要向外提供网页服务即
HTTP
服务,那么它就得时刻待命着访客的到来!但是我们作为用户又怎么知道他们的地址呢?
比如说我们知道了谷歌的地址,但是进程间的通信是IP:port
这样进行的,难道我们每次访问都要输入一遍端口吗?要是每一个网站都是不一样的端口,谁记得住???!因此,就产生了标准,定义端口为何种协议何种程序所占用!
端口大致又分为三类:
- 固定端口(固定为最常见的服务使用):
1
-1023
,如HTTP
服务是80
端口 - 半随机端口(常见服务):
1024
-40000
,如MySQL
是3306
端口 - 随机端口:
40000
以上,比如恐怖黎明联机的端口是42085
举个例子
比如说访问web
服务是这样的clientip:55673
<---->serverip:80
55673
端口在这次通信进程中被发起请求的客户端所占用,跟shell一样,它的生命周期是当前进程,结束进程也就是释放端口
但是
HTTP
它是出现很早以前的,那时候有能力购买计算机又有能力使用互联网的人少之又少,因此HTTP并非是加密的协议,在互联网上是明文传输的,任何人截获到报文都可以看到里面传输的信息!那么,我们不想让别人看到我们的数据怎么办?
那就加密!!!
因此,就有加密协议诞生了!比如说SSL
、TSL
!
SSL
:Secure Sockets Layers
;HTTP
通过调用SSL
成为HTTPS
,实现加密功能
今时今日,网络安全的重要性越来越高!我们为了安全的目的是什么???下面简述一下
- 保密性,英文
Confidentiality
;很好理解,就跟你睡觉家里关门一样,就算我没干什么见不得人的勾当我也不想别人能看见我在房间里干什么!对不对! - 完整性,英文
Integrity
;我想上网看一些照片,结果就传过来半张,这有什么意义! - 可用性,
Availability
;也可以说是易用性
既然我们追求安全,那就意味着互联网上存在着很多攻击行为,按照上面的目的我们又可以给它们做如下分类:
-
针对保密性的攻击:
-
窃听:比如美国棱镜门事件,监听信息
-
针对完整性的攻击:篡改、伪装、重放、否认;比如说我黑进银行系统,将我存款多给它加几个零!
-
针对可用性的攻击:拒绝服务(
DOS
);这也好理解,你不是大门洞开广迎四方贵客吗?我把门都给你堵上,看你怎么迎客!
既然这么多攻击手段,我们又该如何去防御攻击行为呢?
- 对数据实行加密
- 好比将信放进信封,我不让你看见我写的什么。
- 对访问进行认证
- 想进来我们小区,必须得拥有小区的通行证
###加密有什么算法和协议?
####对称加密:来看看对称加密有哪些协议
DES
:Data
Encryption
Standard
;2003
年左右被破解了3DES
看名字就知道是上面的加强版AES
:Advanced
Encryption
Standard
(有128bits
,192bits
,256bits
,384bits
)- ......
#####对称加密有何特性
- 加密、解密使用同一个密钥
- 将原始数据分割成固定大小的块,逐个进行加密
#####对称加密的缺陷: - 密钥过多;像上面所说逐个加密,因此数量过多
- 密钥分发困难;多了肯定发起了麻烦啊!
####密钥加密:密钥分为密钥和私钥,
- 公钥:
Pubkey
;从私钥中提取产生:可公开给所有人 - 私钥:
Secret key
;通过工具创建,使用者自己留存,必须保存其私密性
#####密钥加密特点:用公钥加密的数据,只能使用与之配对的私钥解密;反之亦然
#####密钥加密的用途有哪些:
- 数字签名:主要在于让接收方确认发送方的身份;比如说财务转账需要验证签证来证明身份
- 密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方
- 数据加密:有点啰嗦,请听我道来
1.A
要发送一段数据给B
!那么A
先用单向加密算法计算出要发送的数据的特征码
2.A
用自己的私钥加密这段特征码,并将结果附加在数据后面
3.A
生成一个临时的对称密钥并加密之前的整段数据
4.A
将使用b的公钥加密刚才的临时对称密钥并将结果附加在后面,然后发送给b
5.B
收到消息后,先用自己的私钥解密得到临时的对称密钥
6.用临时的对称密钥解密这整段内容
7.用A
的公钥解密特征码获得完整的数据,能解开则表达身份得到确认
8.然后B
同样的对称加密算法计算这段特征码,并于解密出来的比较,一致证明数据的完整性
但是这样会产生一个问题!
比如有第三方如C
,伪装成A
和B
去获取双方的公钥,因为AB无法分辨对方;然后窃听信息,这就是中间人攻击;怎么办呢?
这就有了第三方认证机构,如CA
机构,A
向CA
机构申请证书,CA
认证过后会给A
发送的证书中包含A
的个人信息、公钥、证书有效期;CA
用自己的私钥加密整段数据的特征码并将结果附加在后面,因此想解密必须拥有CA
机构的公钥,想拥有CA
机构的公钥则必须向CA
机构申请证书,这需要费用等;如A
遗失了自身的私钥,则需要立即向CA
机构吊销证书
再来看看别的加密协议
####单向加密:提取数据指纹即特征码;只能加密,不能解密
- 特性:定长输出、雪崩效应
- 功能:数据完整性验证
- 算法:
MD5
Message Digest v5
,位长是128bits
- sha1:secure hash algorithrm 1,160
- sha224,sha256,sha384,sha512
还有别的协议
####密钥交换协议:IKE
(Internet key exchange
)
具体有:
- 公钥加密
DH
(deffie-heliman
) - 双方通过一种类似公式的算法规则计算出密码而不是传输密码
以上的种种催生了密钥基础设施,我们来简述一下
PKI
:public key infrastructure
;公钥基础设施;以考取HCIE
证书为例- 签证机构:
CA
;签发证书的是Huawei
公司 - 注册机构:
RA
;这个就多了,跟考试一样,很多地方可以考试,只要是Huawei
授权了的,它们就可以受理你的业务 - 证书吊销列表:
CRL
;比如说你的证书遗失了去找Huawei
挂失,Huawei
就会将遗失的那份证书吊销作废 - 证书存储库:
CB
;就像上网查证书真伪一样
CA
机构不止一家,要是每一个都不一样,岂不是很混乱?因此就有标准组织定义了证书的标准
目前的是X.509 v3
版协议,里面定义了证书的结构以及认证标准;如下所示
- 版本号
- 序列号
- 签名算法
ID
- 发行者名称
- 有效期限
- 主体名称
- 主体公钥
- 发行者的唯一标识
- 主体的唯一标识
- 扩展信息
- 发行者的签名