当前位置: 首页 > news >正文

重识Nginx - 12 SSL/TLS 浅析

文章目录

  • TLS/SSL的发展
  • SSL/TLS的协议原理
  • TLS 安全密码套件
  • TLS握手过程
  • SSL的认证方式
  • 应用场景
  • 配置nginx

在这里插入图片描述


TLS/SSL的发展

在这里插入图片描述

  • SSL(Secure Socket Layer,安全套接层)v1.0最早于由网景公司(Netscape,以浏览器闻名)在1994年提出,该方案第一次解决了安全传输的问题。

  • 1995年公开发布了SSLv2.0,该方案于2011年被弃用(RFC6176 - Prohibiting Secure Sockets Layer (SSL) Version 2.0)。

  • 1996年发布了SSLv3.0(2011年才补充的RFC文档:RFC 6101 - The Secure Sockets Layer (SSL) Protocol Version 3.0),被大规模应用,于2015年弃用(RFC7568 - Deprecating Secure Sockets Layer Version 3.0)。这之后经过几年发展,于1999年被IETF纳入标准化(RFC2246 - The TLS Protocol Version 1.0),改名叫TLS(Transport Layer Security Protocol,安全传输层协议),和SSLv3.0相比几乎没有做什么改动。

  • 2006年提出了TLS v1.1(RFC4346 - The Transport Layer Security (TLS) Protocol Version 1.1),修复了一些bug,支持更多参数。

  • 2008年提出了TLS v1.2(RFC5246 - The Transport Layer Security (TLS) Protocol Version 1.2)做了更多的扩展和算法改进,是目前(2019年)几乎所有新设备的标配。

  • TLS v1.3在2014年已经提出,2016年开始草案制定,然而由于TLS v1.2的广泛应用,必须要考虑到支持v1.2的网络设备能够兼容v1.3,因此反复修改直到第28个草案才于2018年正式纳入标准(The Transport Layer Security (TLS) Protocol Version 1.3)。TLSv1.3改善了握手流程,减少了时延,并采用完全前向安全的密钥交换算法。


SSL/TLS的协议原理

网络通讯协议关系图_2020版.pdf

SSL/TLS协议是一个分层协议,本身可以分为上下两层:

  • 下层为TLS记录层协议(record layer protocal)
  • 上层为TLS握手层协议(handshake layer protocal)

在这里插入图片描述

在RFC4346中也这样分类,不过上层协议不只是握手协议, 也包括应用层数据、告警协议、密码变更协议,以上四种统称之为TLS Handshake Protocal。

在这里插入图片描述

Record层是SSL/TLS的基础封装协议,所有的TLS交互报文都需要通过TLS Record 层进行封装。

无论应用层数据还是TLS握手协议,都经过Record Layer进行封装。解析时通过ContentType字段进行区分。

在这里插入图片描述

SSL/TLS协议通过握手协议进行参数协商。协商的参数有:采用的加密算法、认证算法、摘要算法、密钥配送算法等等。通过握手协议,通信双方协商出相同的加密套件和密钥信息,后面便可以使用协商出的结果对双方的交互报文进行加密,从而实现安全可靠的信息传递。


TLS 安全密码套件

在这里插入图片描述


TLS握手过程

SSL/TLS使用证书来实现对数据的加密传输以及身份认证。

在这里插入图片描述

导致握手失败的一些原因

  • 两边协议版本不兼容
  • 两边加密算法无匹配项

如何优雅处理HTTPS中的证书问题

在这里插入图片描述


SSL的认证方式

SSL的认证方式有3种:

  • 单向认证。客户端认证服务器。
  • 双向认证。客户端认证服务器、服务器认证客户端。
  • 匿名认证。不做任何身份校验。SSL反对使用该模式。

在这里插入图片描述

单向认证和双向认证相比,只是不需要客户端上传证书,其他没有区别。


应用场景

目前SSL/TLS应用最多的场景便是:

  • 与HTTP结合组成HTTPS。(使用最多的场景)
  • 除此之外还有可以保护SMTPs、POP3s等。

SSL/TLS发展历史和SSLv3.0协议详解


配置nginx

server{
  listen 443;
  server_name artisan.com;
  ssl on;
  ssl_certificate C:\\artisan.crt;
  ssl_certificate_key C:\\artisan.key;
  ssl_protocols SSLv3;
 
  location / {
    root html;
    index index.html;
  }
}

配置对应hosts (win: C:\WINDOWS\system32\drivers\etc\hosts)

ipxxxx	artisan.com

访问 https://artisan.com

在这里插入图片描述

相关文章:

  • 神经网络做多元线性回归,神经网络是线性模型吗
  • 如何查看Debian/Ubuntu和RHEL/AlmaLinux/Rocky软件包的更新日志
  • Java—多线程
  • 【第九篇】商城系统-商城首页功能
  • 【SpringBoot+MyBatisPlus】系统全局异常处理器的使用以及添加员工功能的实现
  • FreeRTOS大杂烩
  • 都这麽大了还不快了解防病毒网关?
  • HTML 笔记(八):SVG
  • 15.5 - 边界值法
  • 图解MySQL 记录
  • Effective C++学习笔记——确定对象被使用前已先被初始化
  • 一文弄懂 HashMap 中的位运算
  • 【易购管理系统】路由界面基础搭建
  • Linux系统常规异常报错解决汇总:
  • 【编程语言】什么是闭包?你可能经常在用它,但不知道它叫闭包!
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • C# 免费离线人脸识别 2.0 Demo
  • Hibernate【inverse和cascade属性】知识要点
  • Just for fun——迅速写完快速排序
  • Linux Process Manage
  • MYSQL 的 IF 函数
  • Protobuf3语言指南
  • React-生命周期杂记
  • Solarized Scheme
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 阿里研究院入选中国企业智库系统影响力榜
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 排序算法学习笔记
  • 前嗅ForeSpider采集配置界面介绍
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 入口文件开始,分析Vue源码实现
  • 使用Swoole加速Laravel(正式环境中)
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (02)Hive SQL编译成MapReduce任务的过程
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (JS基础)String 类型
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (动态规划)5. 最长回文子串 java解决
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (四)Controller接口控制器详解(三)
  • (轉貼) UML中文FAQ (OO) (UML)
  • .chm格式文件如何阅读
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 托管代码与非托管代码
  • .NET面试题(二)
  • @AliasFor注解
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [CQOI 2010]扑克牌