• http 学习 安全Http


    https是最流行的http安全形式。它是由网景公司首创的,所有主要的浏览器和服务器都支持此协议。 url 以 https:// 开头

    使用https时,所有的http请求和响应数据在发送到网络之前,都要进行加密。Https在http下面提供了一个传输级的密码安全层,可以使用ssl,也可以使用其后继者tls

    http - ssl or tls -tcp-ip-网络接口

    密码:

    是一套编码方案 ,一种特殊的报文编码方式和一种稍后使用的相应解码方式的结合体。加密之前的原始报文通常被称为明文。使用了密码之后的编码报文通常被称作密文。

    加密算法 旋转-N字符 :N的值由密钥控制。将同一条输入报文通过同一台编码机进行传输,会随密钥值的不同产生不同的输出。现在基本上所有的加密算法都会使用密钥。

    数字密钥只是一些数字。这些数字密钥值是编、解码算法的输入。编码算法就是一些函数,这些函数会读取一块数据,并根据算法和密钥值对其进行编、解码。

    编、解码函数都 是互为反函数的

    对称密钥加密技术:在编码时使用的密钥和解码时一样,统称为密钥K

    在对称密钥加密技术中,发送端和接收端要共享相同的密钥K才能进行通信。发送端用共享的密钥来加密报文,并将得到的密文发送给接收端。接收端收到密文,并对其应用解密函数和相同的共享密钥,恢复出原始的明文。

    流行的密钥加密算法包括:DES /Triple-DES/RC2/RC4

    在很多情况下,编、解码算法都是众所周知 ,因此密钥就是唯一保密的东西了。

    用暴力去尝试所有的密钥值称为枚举攻击。可用密钥值的数量取决于密钥中的位数,以及可能的密钥中有多少是有效的。

    公开密钥加密技术:

    公开密钥加密技术没有为每对主机使用单独的加密、解密密钥,而是使用了两个非对称密钥:一个用来对主机报文编码,另一个用来对主机报文解码。编码密钥是众所周知的,但只有主机才知道私有的解密密钥。这样每个人都能找到某个特定主机的公开密钥,密钥的建立变得更加简单。但解码密钥是保密的,因此只有接收端才能对发送给它的报文进行解码。

    公开密钥加密技术避免了对称密钥加密技术中成对密钥数目的n2扩展问题

    RSA:

    所有公开密钥非对称加密系统所面临的共同挑战是,要确保即便有人拥有了下面所有 线索,也无法计算出保密的私有密钥:

    1 公开密钥 是公有的,所有人都可以获得

    2 一小片拦截下来的密文  可通过对网络的嗅探获取。

    3 一条报文及与之相关的密文 对任意一段文本运行加密器就可以得到。

    RSA算法就是一个满足了所有这些条件的流行的公开密钥加密系统,。

    混合加密系统和会话密钥:任何人只要知道了其公开密钥,就可以向一台公工作服务器发送安全报文,所以非对称的公开密钥加密系统是很好用的。

    但公开密钥加密算法的计算可能会很慢。实际上它混合使用了对称和非对称策略。

    数字签名:用加密系统对报文进行签名,以说明是谁编写的报文,同时证明报文未被篡改过。

    数字签名是附加在报文上 特殊加密校验码。使用数字签名有以下两个好处。

    1 签名可以证明是作者编写了这条报文。只有作者才会有最机密的私有密钥,因此,只有作者才能计算出这些校验和。校验和就像来自作者的个人“签名”一样。

    2 签名可以防止报文被篡改。如果有恶意攻击者在报文传输过程中对其进行了修改,校验和就不再匹配了。由于校验和只有作者保密的私有密钥才能产生,所以攻击者无法为篡改了的报文伪造出正确的校验码。

    数字签名通常是用非对称公开密钥技术产生的。因为只有所有者才知道其私有密钥,所以可以将作者的私有密钥当作一种 指纹 使用。

    数字证书

    数字证书中包含了由某个受信任组织担保的用户或公司的相关信息。

    数字证书中还包含一组信息,所有这些信息都是由一个官方的 证书颁发机构 以数字方式签发的。基本的数字证书中通常包含一些纸质ID中常见的内容:

      对象的名称 人、服务器、组织

      过期时间

      证书发布者

      来自证书发布者的数字签名

    数字证书通常还包括对象的公开密钥,以及对象和所用签名算法的描述性信息。任何人都可以创建一个数字证书,但并不是所有人都能够获得受人尊敬的签发权,从而为证书信息担保,并用其私有密钥签发证书。

    用证书对服务器进行认证:

    通用https建立了一个安全web事务之后,现代的浏览器都会自动获取所连接服务器的数字证书。如果服务器没有证书,安全连接就会失败。服务器证书中包含很多字段,其中包括:

      web站点的名称和主机名

      web站点的公开密钥

      签名颁发机构的名称

      来自签名颁发机构的签名

    浏览器收到证书时会对签名颁发机构进行检查。如果这个机构是个很有权威的公共签名机构,浏览器可能已经知道其公开密钥了 浏览器会预先安装很多签名颁发机构的证书。

    如果对签名颁发机构一无所知,浏览器就无法确定是否应该信任这个签名颁发机构,这通常会向用户显示一个对话框,看看他是否相信这个签名发布者。签名发布者可能是本地的IT部门或软件厂商

    Https

    https是最常见的http安全版本。所有主要的商业浏览器和服务器都提供https。https将http协议与一组强大的对称、非对称和基于证书的加密技术结合在一起,使得https不仅很安全,而且很灵活,很容易在处于无序状态的、分散的全球互联网上进行管理。

    https就是在安全的传输层上发送的http.https 在将http报文发送给tcp之前,先将其发送给了一个安全层,对其进行加密。

    http安全层是通过ssl及其现代替代协议tls来实现的。用术语ssl来表示ssl或者tls

     在安全https协议中,url的方案前缀为https

    如果url的方案为http,客户端就会打开一条到服务器端口 80 默认情况下 的连接,并向其发送老的http命令

    如果url的方案为https,客户端就会打开 一条到服务器端口 443 默认情况下 的连接,然后与服务器 握手 ,以二进制格式与服务器交换一些ssl安全参数,附上加密的http命令。

    ssl是个二进制协议,并流量是承载在另一个 端口上的(ssl通常是由端口443承载的)

    建立安全传输:在https中,客户端首先打开一条到web服务器端口443的连接。一旦建立了TCP连接,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥。握手完成之后,ssl初始化就完成 了,客户端就可以将请求报文发送给安全层了。在将这些报文发送给tcp之前,要先对其进行加密。

    ssl握手:在发送已加密的http报文之前,客户端和服务器要进行一次ssl握手,在这个握手过程中,它们要完成以下工作:

      1 交换协议版本号

      2 选择一个两端都了解的密码

      3 对两端的身份进行认证

      4 生成临时的会话密钥,以便加密信道

    服务器证书:ssl支持双向认证,将服务器证书承载回客户端,再将客户端的证书回送给服务器。服务器可以要求使用客户端证书,但实际中很少出现这种情况。

    安全https事务总是要求使用服务器证书的。在一个web服务器上执行安全事务,比如提交信用卡信息时,总是希望是在与那个组织对话。由知名权威机构签发的服务器证书可以帮助你在发送信用卡或私人信息之前评估你对服务器的信任度。

    站点证书的有效性:ssl自身不要求用户检查web服务器证书,但大部分现代浏览器都会对证书进行简单的完整性检查,并为用户提供进行进一步彻查的手段。网景公司提出的一种web服务器证书有效性算法是大部分浏览器有效性验证技术的基础。步骤如下:

      1 日期检测 :浏览器检查证书的起始日期和结束日期,以确保证书仍然有效。如果证书过期了,或者还未被激活,则证书有效性验证失败,浏览器显示 一条错误信息。

      2 签名颁发者可信度检测:每个证书都是由某些证书颁发机构CA签发的,它们负责为服务器担保。证书有不同的等级,每种证书都要求不同级别的背景验证。

      3 签名检测:一旦判定签名授权是可信的,浏览器就要对签名使用签名颁发机构的公开密钥,并将其与校验码进行比较,以查看证书的完整性。

      4 站点身份检测:为防止服务器复制其他人的证书,或拦截其他人的流量,大部分浏览器都会试着去验证证书中的域名与它们所对话的服务器的域名是否匹配。服务器证书中通常都包含一个域名,但有些CA会为一组或一群服务器创建一些包含了服务器名称列表或通配域名的证书。如果主机名与证书中的标识符不匹配,面向用户的客户端要么就去通知用户,要么就以表示证书不正确的差错报文来终止连接。

    虚拟主机 (一台服务器上有多个主机名) ,有些流行的web服务器程序只支持一个证书。如果用户请求的是虚拟主机名,与证书名称并不严格匹配,浏览器会显示警告框。

    https客户端实例

    openssl 是ssl和tls最常见的开源实现。openssl项目由一些志愿者合作开发,目标是开发一个强壮的、具有完备功能的商业级工具集,以实现ssl和tls协议以及一个全功能的通用加密库。

    通过代理以隧道形式传输安全流量

    客户端通常会用web代理服务器代表它们来访问web服务器。代量是防火墙路由器唯一允许进行http流量交换的设备,它可能会进行病毒检测或其他的内容控制工作。

    但只要客户开始用服务器的公开密钥对发往服务器的数据进行加密,代理就再也不能读取http首部了,就无法知道 应该将请求转向何处了。

    为了使https 与代理配合工作,要进行几处修改以告知代理连接到何处。一种常用的技术就是https ssl隧道协议。使用https隧道协议,客户端首先要告知代理,这想要连接的安全主机和端口。这是在开始加密之前,以明文形式告知的,所以代理 可以理解这条信息。

    http通过新的名为connect的扩展方法来发送明文形式的端点信息connect方法会告诉代理,打开一条到所期望主机和端口号的连接。这项工作完成之后,直接在客户端和服务器之间以隧道形式传输数据。connect方法就是一条单行的文本命令,这提供了由冒号分隔的安全原始服务器的主机名和端口号。host:port后面跟着一个空格和http版本字符串,再后面是crlf。接上来是零个或多个http请求首部行,后面跟着一个空行。空行之后,如果建立连接的握手过程成功完成,就可以开始传输ssl数以了。

    connect home.netscape.com:443 http/1.0

    user-agent:mozilla/1.1N

    在请求中的空行之后,客户端会等待来自代理的响应。代理会对请求进行评估,确保它是有效的,而且用户有权请求这样一要连接。如果一切正常,代理会建立一条到目标服务器的连接。如果成功,就向客户端发送一条200 connection established 响应

  • 相关阅读:
    webpack性能优化-PWA(离线访问技术)
    node增删改查
    webpack性能优化
    webpack常见配置
    第一个node接口
    $refs的解释
    vue路由传参的三种基本方式
    结构体的定义
    gcc 的编译流程 和gdb的调试方法
    makefile高级用法
  • 原文地址:https://www.cnblogs.com/caojuansh/p/13164388.html
Copyright © 2020-2023  润新知