`
geeksun
  • 浏览: 952923 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SSL/TLS 协议详解

 
阅读更多

SSL(Secure Sockets Layer,安全套接层),及其继任者 TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃~听。

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: 
      SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 
      SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL协议提供的服务主要有:
  1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
  2)加密数据以防止数据中途被窃取;
  3)维护数据的完整性,确保数据在传输过程中不被改变。

 

一、什么是SSL?

      SSL或者Secure Socket Layer,是一种允许web浏览器和web服务器通过一个安全的连接进行交流的技术。这意味着将被发送的数据在一端被翻译成密码,传送出去,然后在另一端解开密码,再进行处理。这是一个双向的过程,也就是浏览器和服务器都需要在发送数据之前对它们进行加密。

      SSL协定的另一个重要方面是认证(Authentication)。这就是说,在你开始试图通过一个安全连接与一个Web服务器交流的时候,这个服务器会要求你的浏览器出示一组证件,通过“鉴定”的方式来证明这就是你所声明的网站。在某些情况下,服务器还会要求你的web浏览器的认证书,证明你就是你所说的那个人。这就是所知的“客户认证”,尽管实际情况中,更多地用在商务-对-商务(B2B)交易,而不是对个人用户。大多数有SSL功能的web服务器不要求客户认证(Client Authentication)。

 

 二、证书:Certificate

     为了能实施SSL,一个web服务器对每个接受安全连接的外部接口(IP地址)必须要有相应的认证书(Certificate)。关于这个设计的理论是一个服务器必须提供某种合理的保证以证明这个服务器的主人就是你所认为的那个人,特别是在接收任何敏感信息之前要这样做。关于Certificates的更广泛的解释超过了这个文档资料的范围,就把一个认证书当作一个英特网地址的“数码驾驶执照”。这个认证书要陈述与这个网站相关联的公司,以及这个网站的所有者或系统管理员的一些基本联系信息。

     这个"驾驶执照"由所有人以密码方式签字,其他人非常难伪造。对于进行电子商务 (e-commerce)的网站,或其他身份认证至关重要的任何商业交易,认证书要向大家所熟知的认证权威 (Certificate Authority (CA))如VeriSign或Thawte来购买。这样的认证书可用电子技术证明属实——实际上,认证权威单位会担保它发出的认证书的真实性,如果你信任发出认证书的认证权威单位的话,你就可以相信这个认证书是有效的。

     从技术上说,SSL 证书(也称为数字证书)将身份与一对可用于加密和签名数字信息的电子密钥绑定。SSL 证书能够实现对某人自称有权使用特定密钥的声明的验证,有助于防止有人使用欺骗性密钥来模拟其他用户。当与加密配合使用时,SSL 证书可提供完整的安全解决方案,可以保证参与事务的一方或各方的身份。

     SSL 证书是由受信任的第三方(称为证书颁发机构 (CA))发放的。CA 的作用有些像护照办理处。CA 必须采取一些措施来确定要向其发放 ID 的人或组织的身份。一旦 CA 建立某个组织的身份后,就可以发出一个包含该组织的公钥的证书,并用 CA 的私钥对其签名。

     通过使用 SSL 证书,您就能在自己的站点上开展验证身份的、加密的在线商务活动。访问您站点的用户将可以向站点提交信用卡号或其他个人信息,从而保证他们真心实意与您进行业务交易(并非是骗子),并且他们发送给您的信息不会被目标接收者以外的任何人截取或解密。您的 SSL 证书将包含下列信息:

     您的组织的公用名称(如 www.bea.com)

  •     其它标识性信息(如 IP 和物理地址)
  •     您的公钥
  •     公钥的到期日期
  •     发出此 ID 的 CA 的名称(如 VeriSign)
  •     一个唯一的序列号
  •     VeriSign 的数字签名

 

 三、证书格式

主要的证书类型有:
    PEM
    DER
    PKCS#12

PEM
    可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ascii 报头包围,因此适合系统之间的文本模式传输。

-----BEGIN CERTIFICATE-----
MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
EzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFTAT
BgNVBAoTDEJFQSBXZWJMb2dpYzERMA8GA1UECxMIU2VjdXJpdHkxIzAhBgNVBAMT
GkRlbW8gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9zdXBw
b3J0QGJlYS5jb20wHhcNMDAwNTMwMjEzODAxWhcNMDQwNTEzMjEzODAxWjCBjDEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xFTATBgNVBAoTDEJFQSBXZWJMb2dpYzEZMBcGA1UEAxMQd2VibG9n
aWMuYmVhLmNvbTEeMBwGCSqGSIb3DQEJARYPc3VwcG9ydEBiZWEuY29tMFwwDQYJ
KoZIhvcNAQEBBQADSwAwSAJBALdsXEHqKHgs6zj0hU5sXMAUHzoT8kgWXmNkKHXH
79qbPh6EfdlriW9G/AbRF/pKrCQu7hhllAxREbqTuSlf2EMCAwEAATANBgkqhkiG
9w0BAQQFAANBACgmqflL5m5LNeJGpWx9aIoABCiuDcpw1fFyegsqGX7CBhffcruS
1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
-----END CERTIFICATE-----

DER
    辨别编码规则 (DER) 可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。它是无报头的 - PEM 是用文本报头包围的 DER。

PKCS#12
    公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件。

 

四、加密算法

加密算法有俩大类,第一种是不基于KEY的,另一种是不基于KEY的。

    基于KEY的,举个简单的例子,我要加密"fordesign"这么一串字符,就把每个字符都变成它的后一个字符,那么就是"gpseftjhm"了,这样的东西人家当然看不明白,接收方用相反的方法就可以得到原文。当然这只是个例子,现在应该没人用这么搞笑的加密算法了吧。

    不基于KEY,好象一直用到了计算机出现。我记得古中国军事机密都是用这种方式加密的。打战的时候好象军队那些电报员也要带着密码本,也应该是用这种方式加密的。这种算法的安全性以保持算法的保密为前提。
    这种加密算法的缺点太明显了,就是一旦你的加密算法给人家知道,就肯定挂。日本中途岛惨败好象就是密码给老米破了。设计一种算法是很麻烦的,一旦给人破了就没用了,这也忑浪费。

    我们现在使用的加密算法一般是基于key的,也就是说在加密过程中需要一个key,用这个key来对明文进行加密。这样的算法即使一次被破,下次改个key,还可以继续用。key是一个什么东西呢?随便你,可以是一个随机产生的数字,或者一个单词,啥都行,只要你用的算法认为你选来做key的那玩意合法就行。

    这样的算法最重要的是:其安全性取决于key,一般来说取决于key的长度。也就是说应该保证人家在知道这个算法而不知道key的情况下,破解也相当困难。其实现在常用的基于KEY的加密算法在网络上都可以找到。

基于key的加密算法又包括俩类:对称加密和不对称加密。

    对称加密指的是双方使用完全相同的key, 最常见的是DES. DES3, RC4等。对称加密算法的原理很容易理解,通信一方用KEK加密明文,另一方收到之后用同样的KEY来解密就可以得到明文。

    不对称加密指双方用不同的KEY加密和解密明文,通信双方都要有自己的公共密钥和私有密钥。 
    举个例子比较容易理解, 我们们假设通信双方分别是A、B。
    A 拥有 KEY_A1、KEY_A2, 其中KEY_A1是A的私有密钥,KEY_A2是A的公共密钥。
    B 拥有 KEY_B1、KEY_B2, 其中KEY_B1是B的私有密钥,KEY_B2是B的公共密钥。
    公共密钥和私有密钥的特点是,经过其中任何一把加密过的明文,只能用另外一把才能够解开。也就是说经过KEY_A1加密过的明文,只有KEY_A2才能够解密,反之亦然。


通信过程如下:

    A-------->KEY_A2------------>B
    A<--------KEY_B2<------------A
    
    这个过程叫做公共密钥交换,老外管这叫key exchange。
    之后A和B就分别用对方的公共密钥加密,用自己的私有密钥解密。
    一般公共密钥是要发布出去的,然后你通过自己的私有密钥加密明文,人家用你的公共密钥解密,如果能解开,那么说明你是加密人,这就是SSL使用的验证机制。

我如果要发给你,我就用你的公钥加密,这让只有你能用自己的私钥解密。如果我用自己的私钥加密,然后发布出去,这就不属于保密,而是属于认证,证明这条信息是我发的,而且我不能赖帐,因为私钥只有我自己知道。

常用的不对称加密一般有RSA、 DSA、 DH等。我们一般使用RSA。

 

五、数字签名

     数字签名也是不对称加密算法的一个重要应用,理解它对于理解SSL很重要的,放在这里一起介绍一下。

     签名是什么大家都很熟悉吧?证明该东西是你写的,是你发布的,你就用签名搞定。看看那些重要文件都要头头签名。数字签名就是数字化的签名了。记得公用密钥和私有密钥的特征吗?只有你一个人有你自己的私有密钥。而你的公用密钥是其他人都知道的 了。那么你在写完一封邮件之后,用自己的私有密钥加密自己的名字,接收人用你的公共密钥解开一看,哦,是你发的。这就是你的数字签名过程了。

     上面的解释是很简化的了,其实数字签名比这个复杂多了,但我们没有了解的必要,知道数字签名是这么一回事就可以了。

      还有一种我们需要知道的加密算法,其实我不觉得那是加密算法 ,应该叫哈希算法,英文是message digest, 是用来把任何长度的一串明文以一定规则变成固定长度的一串字符串。它在SSL中的作用也很重要,以后会慢慢提及的。一般使用的是MD5、SHA、base64, 不是加密算法,但也是SSL经常使用的一种算法,它是编码方式,用来把asc码和二进制码转来转去的。

     具体的加密解密过程我们不需要了解,因为SSL根本不关心。但了解加密算法的一些基本原理是必要的,否则很难理解SSL。

Quote : http://www.cnblogs.com/adforce/archive/2012/11/27/2790937.html

分享到:
评论

相关推荐

    SSL&TLS认证原理详解

    SSL/TLS协议是为了解决这三大风险而设计的,希望达到:所有信息都是加密传播,第三方无法窃听,具有校验机制,一旦被篡改,通信双方会立刻发现,配备身份证书,防止身份被冒充。 本文章会详细讲解SSL/TLS密钥签发与...

    SSL&TLS 协议详解

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。 安全传输层协议(TLS)...

    TLSSSL协议详解

    SSL全称是“Secure Socket Layer”,字面上可以从“Secure”单词可以看出,SSL是负责“安全”传输的,并不关心传输的内容是什么。而HTTPS只是SSL应用的一种,即用SSL加密HTTP内容(普遍采用443端口),SSL还可以加密...

    详解:TLS SSL技术.docx

    TLS以及安全套接字层(SSL)协议,版本2.0和3.0通过使用基于证书的身份验证和对称加密密钥来验证和保护数据传输。 本节介绍了TLS和SSL是什么,TLS和SSL如何使用安全支持提供程序接口(SSPI)和Schannel SSP来保护...

    Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法

    HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的。HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层...

    HTTPS协议详解(二):TLS:SSL工作原理1

    HTTPS协议详解(二):TLS:SSL工作原理1

    利用C#实现SSLSocket加密通讯的方法详解

    SSL Socket通讯是对socket的扩展,增加Socket通讯的数据安全性,SSL认证分为单向和双向认证。单向认证只认证服务器端的合法性而不认证客户端的合法性。双向认证是同时认证服务端和客户端。下面我分别说说使用C#实现...

    为docker中的nginx配置https的方法步骤

    对于商业网站来说,花钱购买 SSL/TLS 证书并不是什么问题。但对于个人用户来说,如果能有免费的 SSL/TLS 证书可用将会是非常幸福的事情!Let’s Encrypt 就是一个提供免费 SSL/TLS 证书的网站,由于其证书期限只有三...

    SSL工作原理详解

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

    leetcode答案-Data-Structure-and-Algorithms:数据结构与算法

    阮一峰——图解SSL/TLS协议: 深入理解HTTPS原理、过程与实践: HTTP/2 研发者社区http2.0解释: 理解http2.0(掘金): UDP协议(简单理解即可,与TCP区别,有哪方面优势) UDP详解: HTTP/3 (简单了解即可,基于...

    HTTPS协议详解(四):TLS:SSL握手过程1

    1、握手与密钥协商过程 2、会话缓存握手过程 3、重建连接

    HTTP协议详解需要可以下载

    协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信 ...常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常

    H3C安全 技术协议培训视频.rar

    目录: H3C NAT444技术简介 IPSec技术 MPLS BGP 跨域技术 RDIUS及802.1X协议详解 SSL与TLS协议浅析

    微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)

    小程序也要求 TLS(传输层安全协议)的版本至少为 1.2,在配置好 https之后,如果 TLS 的版本较低,就涉及到升级问题 所以 Server端环境配置的主要步骤: 申请 SSL 证书 配置web服务器支持https(我使用的是...

    Nginx配置https原理及实现过程详解

    提供免费的SSL/TLS证书 2015年12月3日,该服务进入公测阶段,正式面向公众。 2016年4月12日,该项目正式离开Beta阶段。 到2016年9月9日,Let’s Encrypt 已经发放 1000 万张证书。 因此对于大部分中小型网站来说...

    详解HTTPS 的原理和 NodeJS 的实现

    HTTPS是HTTP与SSL/TLS的组合,即使用加密通讯以及网络服务器的身份鉴定来进行信息的安全传输。其核心有二: 使用证书对服务器及请求端的身份验证 使用一组对称秘钥加密包括请求头在内的所有信息传输 握手流程 ...

    Java如何跳过https的ssl证书验证详解

    主要介绍了Java跳过https的ssl证书验证的解决思路,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们来深入学习下吧

    详解nginx实现https网站设置

    HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据 2.https协议原理 首先,客户端与服务器...

    H3C大讲堂H3C安全培训.rar

    目录: H3C NAT444技术简介 IPSec技术 MPLS BGP 跨域技术 RDIUS及802.1X协议详解 SSL与TLS协议浅析-刘斌 组播 .mp4

Global site tag (gtag.js) - Google Analytics