zoukankan      html  css  js  c++  java
  • SSL/TLS

    历史

    1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。

    1996年,SSL 3.0版问世,得到大规模应用。

    1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版(Transport Layer Security)。

    2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版,2018年 TLS1.3版本。

    SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密

    通信过程

    SSL/TLS协议的基本过程是这样的:

    (1) 客户端向服务器端索要并验证公钥。

    (2) 双方协商生成"对话密钥"。

    (3) 双方采用"对话密钥"进行加密通信。

    上面过程的前两步,又称为"握手阶段"(handshake)

    SSL、TLS、STARTTLS对比

    SSL vs TLS vs STARTTLS

    对于不同的术语:SSL、TLS、STARTTLS和stl,常常会有相当大的混淆。

    SSL和TLS
    SSL和TLS都是加密协议,都提供了一种方法来加密Internet上两台计算机(例如客户端计算机和服务器)之间的通信通道。SSL代表安全套接字层,当前版本为3.0。TLS代表传输层安全,当前版本为1.2。TLS是SSL的继承者。术语SSL和TLS可以互换使用,除非您指的是特定的协议版本。
    SSL和TLS之间的版本编号不一致。当TLS将SSL作为首选协议名时,它以一个新的版本号开始。协议从最早到最新的顺序是:SSLv2、SSLv3、TLSv1.0、TLSv1.1、TLSv1.2。

    STARTTLS和STL
    STARTTLS是一个协议命令,由电子邮件客户端发出。它表示客户端希望使用SSL/TLS加密协议将现有的不安全连接升级到安全连接。STARTTLS命令名由SMTP和IMAP协议使用,而POP3协议使用STLS作为命令名。
    尽管名称中有TLS,但STARTTLS并不意味着将使用TLS。SSL和TLS都是可接受的通信安全协议。

    明文/纯文本
    没有使用任何安全协议。所有命令、响应和数据都以纯文本传输。
    client.Connect("mail.example.com");

    隐式SSL模式
    隐式SSL模式意味着您连接到SSL/TLS加密端口。
    client.ConnectSSL("mail.example.com");

    显式SSL模式
    显式SSL模式意味着您连接到明文端口,然后通过发出STARTTLS(或STLS)命令来保护连接(显式保护连接)。

    client.Connect("mail.example.com");
    client.StartTLS();

    保护连接
    无论您使用隐式(连接到SSL/TLS加密端口)还是显式(使用STARTTLS升级现有连接)模式,双方都将协商使用哪个协议和哪个版本。此协商基于客户机和服务器的配置方式以及双方支持的内容。

    SSL/TLS支持
    对SSL/TLS的支持几乎是通用的,但是支持哪些版本是可变的。几乎所有的东西都支持SSLv3。大多数机器支持TLSv1.0。

    端口号

    为了增加一些现有协议(IMAP、POP3、SMTP)的安全性,决定只在现有协议下添加SSL/TLS加密层。但是,为了区分软件应该使用SSL/TLS加密版本的协议,而不是纯文本版本,每个协议使用了不同的端口号:

    协议     纯文本          SSL

    IMAP   143               993

    POP3   110               995

    SMTP  587或25       465

    端口太多? 解决方案:纯文本+ STARTTLS
    有时,每个协议有2个端口是很浪费的,而最好有1个以纯文本开头的端口,但是客户端可以使用STARTTLS将连接升级为SSL / TLS加密的连接(或 POP3协议的STLS)命令。

    STARTTLS问题

    这有一些问题。有很多软件,它们使用具有纯SSL / TLS连接的备用端口号。客户端软件的使用寿命可能很长,因此您不能仅在所有软件都升级之前就禁用加密端口。

    每个协议都采用了一些机制来告知客户端 服务器支持升级到SSL / TLS(例如,IMAP的CAPABILITY响应中的STARTTLS),并且他们不应该尝试在未进行STARTTLS升级的情况下尝试登录(IMAP的CAPABILITY响应中的LOGINDISABLED)。这造成了两种不幸的情况:

    • 某些软件只是忽略了“升级之前禁止登录”公告(LOGINDISABLED,STARTTLS),并尝试以任何方式登录,通过明文通道发送用户登录名和密码。服务器拒绝了登录名和密码,但是详细信息已经通过Internet以纯文本格式发送。
    • 其他软件看到了“直到升级之前禁用登录”的公告,但随后不会自动升级连接,因此将登录错误报告给用户,这引起了对错误的困惑。

    这两个问题都导致与现有客户端的重大兼容性问题,因此大多数系统管理员继续在一个端口上使用纯文本连接,而在单独的端口号上使用加密的连接。

    禁用IMAP和POP3的纯文本
    许多公司(例如Gmail,Outlook.com)禁用了普通的IMAP(端口143)和普通的POP3(端口110),因此人们必须使用SSL / TLS加密连接-这完全不需要使用STARTTLS命令。

    SMTP STARTTLS保持
    上面一个真正的例外是SMTP。大多数电子邮件软件在端口25上使用SMTP将邮件提交到电子邮件服务器,以继续传输到目的地。但是SMTP最初是为传输而不是提交而设计的。因此,为消息提交定义了另一个端口(587)。

    587端口没有强制要求使用STARTTLS,但是在意识到客户端和服务器之间的通信进行SSL / TLS加密是一个重要问题的同时,端口587的使用变得很流行。结果是,大多数通过端口587提供消息提交的系统都要求客户端使用STARTLS来升级连接。还需要登录名和密码进行身份验证。

    这种方法也有一个额外的好处。通过使用户远离使用端口25进行电子邮件提交的方式,ISP可以阻止来自用户计算机的出站端口25连接,这是垃圾邮件的重要来源,因为用户计算机感染了垃圾邮件发送病毒。

    参考

    SSL vs TLS vs STARTTLS

    SSL/TLS协议运行机制的概述

  • 相关阅读:
    MySql中的变量定义
    mysql常用脚本
    Spring中依赖注入的使用和配置
    在linux下通过sh运行java程序
    linux下shell脚本学习
    eclipse导出jar包
    mysql中游标的使用
    netty中LengthFieldBasedFrameDecoder的使用
    网络游戏服务器架构(转)
    H2 database的使用
  • 原文地址:https://www.cnblogs.com/peterYong/p/14385903.html
Copyright © 2011-2022 走看看