Contents
  1. 1. 首先 SSL与TLS都是一种接口标准.
  2. 2. SSL协议 与 TLS协议 的关系
  3. 3. SSL(Secure Sockets Layer 安全套接层)能够做的事情
  4. 4. SSL(Secure Sockets Layer 安全套接层)处于网络模型中哪个层次?
    1. 4.1. 首先看下TCP/IP的四个分层结构
    2. 4.2. HTTP协议 与 TCP协议 的关系
    3. 4.3. HTTP协议默认是明文传输数据,不会对传输的数据加密保护
    4. 4.4. 而SSL协议作为提供了 1. 传输数据加密保护,2. 身份验证,3. 传输数据完整性的安全数据传输。并且出现在一个单独的套接层(传输层)
  5. 5. 注意如图中的 应用层,使用的协议仍然是 http
  6. 6. https与http数据传输方式的区别:
  7. 7. 所以严格来说,https 并不是一种通信协议,只是异类的通信方式
  8. 8. 我对HTTPS的理解: HTTPS://形式的URL访问,是SSL层的入口,应用层->SSL层->传输层
  9. 9. 我对HTTP的理解: 无法经过SSL,直接是 应用层->传输层
  10. 10. 数字证书、将一些在验证身份时候需要的一些数据项,通过服务器私钥进行加密后的数据
  11. 11. 客户端与服务端使用https通信的简化过程:
  12. 12. SSL缺点
  13. 13. SSL证书是什么?
  14. 14. SSL证书验证
  15. 15. SSL证书校验过程
  16. 16. 如上过程的关键点: 证书颁发机构CA 根证书的 公钥
  17. 17. SSL Pinning
  18. 18. 直接对比两个证书就能够安全验证服务端与客户端吗?
  19. 19. 所以只要是使用权威CA结机构颁发的证书绝对是安全的
  20. 20. 为什么要用SSL Pinning?

首先 SSL与TLS都是一种接口标准.


SSL协议 与 TLS协议 的关系

  • SSL 是洋文Secure Sockets Layer的缩写,中文叫做 安全套接层

  • SSL协议解决http协议使用明文方式传输数据,防止数据被拦截嗅探

  • 到了1999年,SSL协议 因为应用广泛,已经成为互联网上的标准.

  • 后来SSL协议 又被 IETF组织 标准化,标准化之后的名字叫做 TLS (Transport Layer Security),中文叫做“传输层安全协议”.

  • 所以 SSL协议与TLS协议实际上是同一个东西,只是不同的阶段标准化名.


SSL(Secure Sockets Layer 安全套接层)能够做的事情

  • 事情一、对传输的数据保密
  • 数据发送者数据接收者 互相进行认证
  • 确保数据发送到正确的客户端服务器

  • 事情二、身份认证

  • 可选的 客户端 认证
  • 强制的 服务端 认证

  • 事情三、维护传输数据的完整性

  • 维护数据的完整性 或 防止篡改,确保数据在传输过程中不被改变
  • 一旦发现数据被篡改,就会自动断开网络连接

SSL(Secure Sockets Layer 安全套接层)处于网络模型中哪个层次?

首先看下TCP/IP的四个分层结构

HTTP协议 与 TCP协议 的关系

  • HTTP协议 属于 应用层 最顶端的传输协议,短连接
  • TCP协议 属于 传输层 靠下层的传输协议,长连接
  • 所以说 HTTP协议 是构建于 TCP协议 之上的,并且一次连接之后主动做一次断开操作,形成短连接

HTTP协议默认是明文传输数据,不会对传输的数据加密保护

而SSL协议作为提供了 1. 传输数据加密保护2. 身份验证3. 传输数据完整性的安全数据传输。并且出现在一个单独的套接层(传输层)

  • 原始TCP/IP四层结构中,应用层 直接将 明文数据 传递给 传输层
  • 网络上传输的全是明文数据

  • 而加入 SSL安全套接层 之后

  • 应用层HTTP协议 先将 明文数据 传递给 SSL安全套接层
  • 由 SSL安全套接层 对明文数据进行 加密保护、以及双方身份验证,对数据进行安全处理
  • 最后由 SSL安全套接层 将处理过的加密数据 发送给 传输层

所以传输层收到的是一个 处理过的加密数据 ,那么最终在网络上传输的数据也就是这个加密处理后的数据

注意如图中的 应用层,使用的协议仍然是 http


httpshttp数据传输方式的区别:

  • 最终 应用层 仍然是使用 http协议

  • 识别到时https://,那么走特定的端口 443,表示需要 进入SSL安全套接层加密处理

  • 那么现在就不会像以前直接 应用层 ----> 传输层

  • 而是中间多出了一个SSL层处理,应用层 -----> SSL层 -----> 传输层

  • SSL层负责对传输数据的加密、完整性验证、双方身份认证


所以严格来说,https 并不是一种通信协议,只是异类的通信方式

  • https 只是对 应用层http协议 扩展
  • 应用层 仍然是使用 http协议 进行数据传输
  • 只是https形式的URL访问,会 额外的 经过 SSL层 进行加密处理

我对HTTPS的理解: HTTPS://形式的URL访问,是SSL层的入口,应用层->SSL层->传输层

我对HTTP的理解: 无法经过SSL,直接是 应用层->传输层


数字证书、将一些在验证身份时候需要的一些数据项,通过服务器私钥进行加密后的数据

  • 就是一个很小的计算机文件
  • 用于在SSL协议基础上在客户端与服务端数据传输通道上进行安全认证
  • 作用类似于我们的身份证、护照,用于证明身份(来区分合法请求或非法请求),类似一种 签名,能够 证明 这个机构或人的 身份的真实性
  • SSL安全传输主要基于此实现

客户端与服务端使用https通信的简化过程:

  • 客户端和服务端建立一个连接,服务端 返回给 客户端 一个证书(注意:只包含公钥
  • 客户端由苹果预先存放了 所有受信任颁发证书机构的 根证书

  • 客户端使用这个 根证书服务端返回的证书(公钥) 进行验证

  • 如果 验证证书 是可信任的,就生成一个 pre-master secret

  • 使用之前服务端返回证书(公钥)的 公钥 对这个 pre-master secret 加密

  • 将加密后的 pre-master secret 再发送给 服务端

  • 服务端接收到加密的之后,使用 证书私钥 解密 pre-master secret

  • 再根据某种算法生成 master secret

  • 可能是对称加密,确保对称加密的复杂性

  • 客户端也同样根据这种算法从 pre-master secret 生成 master secret

  • 随后双方的通信都用这个 master secret 对传输数据进行加密解密

  • 如果 验证证书 不是信任的,则会弹出警告提示或终止请求


SSL缺点

  • SSL协议需要在握手之前建立TCP连接,因此不能对UDP应用进行保护
  • 每一次都会身份验证,可能会造成一定性能的下降

SSL证书是什么?

  • 是上面提到的 数字证书 的一种
  • 遵循 SSL协议 规定
  • 由 受信任的数字证书颁发机构CA(如GlobalSign,wosign),在验证服务器身份后颁发
  • 服务器身份验证 和 数据传输加密 的过程中,扮演了不可获取的角色(也就是说借助了SSL证书完成安全传输)

SSL证书验证

  • 服务端身份验证
  • 验证方法一、使用客户端 内置的受信任CA机构的根证书进行验证服务端发送过来的SSL证书
  • 验证方法二、使用客户端 绑定的本地证书验证
  • 1)验证证书的公钥是否一致
  • 2)先验证服务端证书的合法性,再验证证书内容是否一致

  • 客户端身份验证

  • 服务端对客户端发送过来的证书进行验证,看是否是合法用户

SSL证书校验过程

  • 一个证书颁发机构(CA),颁发了一个证书A,服务器用这个证书A建立https连接与客户端传输数据

  • 客户端 在信任列表里有这个CA机构的根证书

  • 证书A里包含有证书内容F,以及使用证书A中的私钥 加密后的内容F1

  • 建立https连接时,服务端 发送证书A 给 客户端

  • 客户端 的系统里的 CA机构根证书 有这个CA机构的 公钥

  • 客户端 用这个 公钥 对 证书A中的加密内容F1 解密得到 F2

  • 客户端 判断 F2 与 证书A中的F 是否一致,若相等就通过验证


如上过程的关键点: 证书颁发机构CA 根证书的 公钥

  • CA机构根证书 的 公钥,是预先存放到 客户端系统中,其他中间人根本无法获取到这个 公钥

  • 无法获取这个 公钥,也就无法 解密 服务端发送过来的证书A中的 F1,那么最终也就无法通过验证


SSL Pinning

  • 直接 SSL证书文件 保存在 客户端的代码中,程序运行时将证书文件读入内存

  • 在之后的每一次https连接时,对比 服务端返回的 和 客户端保存 的两个证书是否一样

  • 如果一致,表明证书是真的,不再去系统的 信任证书机构 里寻找 验证
  • 如果不一致,就会断开连接

  • 因为APP事先已经知道要进行 通信的服务端 host,可以直接在 客户端保存这个服务端的SSL证书 用于校验


直接对比两个证书就能够安全验证服务端与客户端吗?

  • 如果 中间人 从 客户端 取出 证书
  • 再 伪装成 服务端 跟其他 客户端 通信
  • 然后将 证书 发送给 客户端
  • 客户端此时对比本地证书 确实是一致 ,可以通过验证
  • 客户端对要发送给服务端的数据,使用 证书中的公钥 加密,然后发送给服务端
  • 然后被中间人再次拦截,取出证书,但是无法解密传输的数据
  • 因为解密传输的数据,需要证书中的 私钥
  • 证书的私钥,唯一存放在 服务端,不会在网络上传播
  • 所以即使拦截到证书也无法解密拦截到的数据

所以只要是使用权威CA结机构颁发的证书绝对是安全的


为什么要用SSL Pinning?

  • 因为从CA机构 申请颁发证书 价格比较昂贵
  • 小企业或个人用户可能会选择 自己作为证书颁发机构CA 自己颁发证书
  • 但是 自己颁发的证书 无法通过 客户端系统中受信任的CA机构列表 验证
  • 需要 SSL Pinning 这样的方式,去对比本地的SSL证书是否一致即可.
Contents
  1. 1. 首先 SSL与TLS都是一种接口标准.
  2. 2. SSL协议 与 TLS协议 的关系
  3. 3. SSL(Secure Sockets Layer 安全套接层)能够做的事情
  4. 4. SSL(Secure Sockets Layer 安全套接层)处于网络模型中哪个层次?
    1. 4.1. 首先看下TCP/IP的四个分层结构
    2. 4.2. HTTP协议 与 TCP协议 的关系
    3. 4.3. HTTP协议默认是明文传输数据,不会对传输的数据加密保护
    4. 4.4. 而SSL协议作为提供了 1. 传输数据加密保护,2. 身份验证,3. 传输数据完整性的安全数据传输。并且出现在一个单独的套接层(传输层)
  5. 5. 注意如图中的 应用层,使用的协议仍然是 http
  6. 6. https与http数据传输方式的区别:
  7. 7. 所以严格来说,https 并不是一种通信协议,只是异类的通信方式
  8. 8. 我对HTTPS的理解: HTTPS://形式的URL访问,是SSL层的入口,应用层->SSL层->传输层
  9. 9. 我对HTTP的理解: 无法经过SSL,直接是 应用层->传输层
  10. 10. 数字证书、将一些在验证身份时候需要的一些数据项,通过服务器私钥进行加密后的数据
  11. 11. 客户端与服务端使用https通信的简化过程:
  12. 12. SSL缺点
  13. 13. SSL证书是什么?
  14. 14. SSL证书验证
  15. 15. SSL证书校验过程
  16. 16. 如上过程的关键点: 证书颁发机构CA 根证书的 公钥
  17. 17. SSL Pinning
  18. 18. 直接对比两个证书就能够安全验证服务端与客户端吗?
  19. 19. 所以只要是使用权威CA结机构颁发的证书绝对是安全的
  20. 20. 为什么要用SSL Pinning?