HTTP/HTTPS(应用层)都建立在 TCP/IP(网络层)之上
消息结构(状态行,请求头,请求体什么的)以及状态码,content-type,MIME 什么的懒得写了
HTTP 的特点:
HTTPS
验证可信的颁发机构颁发的证书(CA)
此协议有加密层 SSL/TLS(后者只是前者标准化的产物)
真正的 SSL 现在基本见不着 (不过 TLS1.0 有时也叫 SSL3.1),而这个过程:
公钥和私钥是配对的,使用公钥加密的数据只能由对应的私钥解开(或者反之,因为使用的是非对称加密)
证书:用于防止黑客拦截并发送自己的公钥(因为他们没有 CA 机构的私钥)。
其中的内容包括证书的所属,有效期,签发机构,主体公钥(上图中的公钥 A),以及 CA 数字签名(这是 CA 机构用自己的私钥加密,加密的数据是证书本身,所有的浏览器或操作系统都会内置对应的公钥,由此可见实际上其他服务器都是要委托 CA 机构的服务器做签名所以一般签名要钱),并验证该证书是否有效(用内置的公钥解密 CA,和证书本身比对)
密码组合用于最后的 KEY, 使用几次传输的随机字符串生成
客户端生成并用公钥加密的称为预主密钥,而黑客由于没有服务器私钥,所以没法解密,从而保证最后的共同密钥(对称加密)无法被窃取
PS:实际上不是内置公钥,而是其证书,即根证书(证书链中根证书总是在最上端,上级证书必须给下级证书签名,就像根证书给其他证书签名)。上图属于单向认证,双向认证在本地也会随机生成一对密钥,并把公钥发送给服务器。单向认证只能保证服务器到客户端数据的安全。
对于服务器来讲,其使用自身的私钥加密数据并发送
对于客户端来讲,其使用对方的公钥来解密
如果是双向认证,那么服务器就会用对方的公钥解密,客户端用自己的私钥加密
尽管黑客仍然可以拦截到两个公钥,但是没有私钥解密,得不到预主密钥,也就得不到 KEY
HTTP 是明文传输,可以进行:
数据窃听,中间人攻击,会话劫持等