一、密码技术

要了解SSL协议,首先要了解:加密算法、消息摘要算法(又称为哈希算法Hash),数字签名等概念。这些技术每个都可以写出一整本的书,它们结合在一起,提供了保密性、完整性和身份验证的功能。

1.1、加密算法


设想:ALICE想发消息给她的银行要汇出一笔款。ALICE希望这些消息是保密的,因为这里面包括她的帐户资料和汇款金额。一种办法是使用加密算法,这种技术将她要传递的消息变成经过加密的密文,直接银行解密才可以被读取。 如果采用这种形式,消息只能被一个密钥所加密。没有这个密钥,消息就是无用的。一个良好的加密算法,可以使入侵者面临无法克服困难来解密原文。
有两种加密算法系列:传统加密算法(对称加密)和公钥加密算法(非对称加密)

1.1.1、对称加密

传统加密算法---对称加密,需要发送者和接收者共享一个密钥:同时用于加密和解密的信息。 只要密钥是保密的,除了收件人和发件人外没有人可以阅读该消息。如果Alice和银行知道这个密钥,那么他们可以给对方发送的经过此密钥加密的消息。这种算法的主要任务在于发送者和接收者如何共享一个密钥,同时确保没有第三方知道这个密钥,如果多人之间传递消息,如何保证这么多密钥的安全,就是一个棘手的问题。

1.1.2、非对称加密

公钥加密算法---为非对称加密技术,通过使用2个密钥(其中一个可以解密另外一个加密的消息),解决了加密密钥交换的问题。 如果用其中的一个密钥用于加密信息,必须使用另外一个密钥来解密。这样就有可能获得简单地发布一个密钥(公钥),并使用未发布的密钥(私钥)来接受经过公钥加密的消息。

任何人都可以使用公共密钥加密消息,但只有私钥拥有者将能够读取它。这样,ALICE可以在发送需要保密的汇款消息给银行的时候,可以使用银行的密钥对中的公钥来对这个消息进行加密,而只有银行可以使用他们自己保管的私钥来进行解密。

1.2、消息摘要算法


虽然ALICE可以加密她的消息,但仍然有一个问题,就是有人可能会修改她发给银行的消息,并将ALICE的钱转移到自己的帐户上。为了保证ALICE消息在传递过程中没有被人篡改,可以让她创建一个消息的摘要和加密的消息一起寄到银行,银行收到消息后,将消息和消息的摘要做一个比较,如果消息内容和摘要匹配,则就可以证明消息传递过程中,没有别人篡改。

像这样的摘要被称为消息摘要, 单向函数哈希函数 。消息摘要用于创建一个简短的固定长度,或可变长度的消息。消息摘要算法被设计成为每个消息产生一条独立的信息摘要。消息摘要算法的目的,就是让人无法为两条不同的消息找到相同的消息摘要,从而消除了使用一条摘要相同的消息替换另外一条消息的可能性。

另一个爱丽丝面临的挑战是找到一种方法,即使安全地将消息摘要发送到银行;如果消息摘要发送过程不安全,银行将无法判断消息是否就是来自ALICE。只有在消息摘要能安全地发送,才能够使消息的完整性被确定。

一个安全发送消息摘要的方式是使用数字签名。

1.3、数字签名

当Alice将消息发送给银行,银行需要确保消息真正地是从她这里发出的,以确保入侵者不能使用她的帐户进行交易。 签名就是由ALICE为实现这一目的而创建的一个专门消息。

数字签名主要使用私钥来加密消息摘要和其他信息,譬如一个序列号,虽然任何人都可以使用公钥解密数字签名,只有发送方知道私钥。这意味着,只有发件人可以签署了该消息。包含了信息摘要的签名表示这个签名只对这个消息有效,而且它确保了消息的完整性,即这个消息的发送过程中没人可以改变摘要并另外对它做签名。

为了防止入侵者拦截,并在以后再次使用这个签名,签名包含一个唯一的序列号。 这样可以保证ALICE无法否认她曾经发送过这条消息,因为只有她可以签名这条消息(不可抵赖性)。

1.4、证书

虽然ALICE给银行发出一条经过她个人私钥签名的消息,并且可以确保她发送的消息是真实可靠的,但她依然要确保她的确是和银行在通信。这意味着她必须确保她使用的公钥是银行密钥对中的公钥,而不是入侵者的。同样道理,银行业也需要核实用于签名该消息的私钥是属于ALICE的。如何使银行和ALICE能否核实对方的身份呢?

如果每个人的证书都由一个大家都信任的机构签名,那么每个人都可以验证其他有该证书的人的身份。这种被大家都信任的机构,称为认证中心(CA),他们负责认证证书。
证书的内容

证书内容包括:

公钥和真实身份识别信息,包括个人,服务器或其他实体。如表1所示,主题信息包括身份识别信息(DN)和公钥。它还包括认证和签发的CA签发这个证书的有效期,还可能有一些其他的信息(或者成为扩展信息),一般由CA自行定义使用的管理信息,譬如序列号等。

证书信息

识别名(DN)信息

识别名DN是用来提供对某个特定背景下的身份,例如:某个人作为公司的一个雇员而拥有一个证书。识别名DN有X.509标准定义,包括它的字段,字段名和相应的缩写表示。

证书颁发机构可以定义一个策略,指明哪些识别名字段名是可选的,哪些是必需的。很多证书还对某些字段的内容做出要求。例如,Netsacpe浏览器要求一个服务器证书的CN能够匹配通配符样式的域名,例如:*.snakeoil.com。

证书的二进制格式是使用了ASN.1(抽象语法标记)定义[X208] [ PKCS]。 这种表示法定义了如何指定编码规则的内容和如何将信息转换成二进制形式。证书的二进制编码使用了区分编码规则Distinguished Encoding Rules (DER),它是基本编码规则Basic Encoding Rules (BER)的一个子集。对于那些不能采用二进制的信息传递,二进制形式可以转化为一个ASCII形式使用Base64编码[MIME]。当证书放置在Begin和End分割线中的时候,这种编码被称为增强型安全私人邮件格式(PEM -"Privacy Enhanced Mail") 编码的证书。
PEM编码证书的样例(snakioil.crt)

Example of a PEM-encoded certificate (snakeoil.crt)
-----BEGIN CERTIFICATE-----
MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
A1UEChMOU25ha2UgT2lsLCBMdGQxHjAcBgNVBAsTFUNlcnRpZmljYXRlIEF1dGhv
cml0eTEVMBMGA1UEAxMMU25ha2UgT2lsIENBMR4wHAYJKoZIhvcNAQkBFg9jYUBz
bmFrZW9pbC5kb20wHhcNOTgxMDIxMDg1ODM2WhcNOTkxMDIxMDg1ODM2WjCBpzEL
MAkGA1UEBhMCWFkxFTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25h
a2UgVG93bjEXMBUGA1UEChMOU25ha2UgT2lsLCBMdGQxFzAVBgNVBAsTDldlYnNl
cnZlciBUZWFtMRkwFwYDVQQDExB3d3cuc25ha2VvaWwuZG9tMR8wHQYJKoZIhvcN
AQkBFhB3d3dAc25ha2VvaWwuZG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
gQDH9Ge/s2zcH+da+rPTx/DPRp3xGjHZ4GG6pCmvADIEtBtKBFAcZ64n+Dy7Np8b
vKR+yy5DGQiijsH1D/j8HlGE+q4TZ8OFk7BNBFazHxFbYI4OKMiCxdKzdif1yfaa
lWoANFlAzlSdbxeGVHoT0K+gT5w3UxwZKv2DLbCTzLZyPwIDAQABoyYwJDAPBgNV
HRMECDAGAQH/AgEAMBEGCWCGSAGG+EIBAQQEAwIAQDANBgkqhkiG9w0BAQQFAAOB
gQAZUIHAL4D09oE6Lv2k56Gp38OBDuILvwLg1v1KL8mQR+KFjghCrtpqaztZqcDt
2q2QoyulCgSzHbEGmi0EsdkPfg6mp0penssIFePYNI+/8u9HT4LuKMJX15hxBam7
dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
-----END CERTIFICATE-----

1.5、证书颁发机构CA

通过在批准证书之前核实证书请求中的信息,CA可以保证密钥对的私钥所有人的身份。举例,如果Alice请求一个个人证书,证书颁发机构必须首先核实ALICE在证书申请中所提交的个人信息和资料。

证书链
CA机构有时也会为另外一家CA机构颁发证书。当检查证书的时候,ALICE可能需要检查每一级证书的父亲证书,一直找到一个她所能信任的证书为止。为了降低她在检查证书链中遇到一个“坏”证书的风险,ALICE可能会设定可信证书链的深度。

创建一个根CA
如前所述,每个证书需要发行者来声明证书拥有者身份的有效性,一直到最顶层CA。 这就产生了一个问题:谁来保证最顶层CA的权威性,而这个CA是没有发行者。在这个独特的情况下,证书采用一种“自签名”的方式,所以证书的发行者就是证书拥有者自己。浏览器会将一些知名的CA配置成可信,将他们的根证书安装到自己的受信根证书列表中,但如果要自己添加信任的自签名证书,就需要特别当心。
一些公司,已经建立了他们自己的证书颁发机构,用户也可以创建自己的证书颁发机构。虽然在互联网上存在比较大的风险,但它在企业内网中是很有用的,可以轻松地验证个人和服务器的身份。

证书管理
建立一个证书机构需要有坚实的行政,技术和管理框架。证书颁发机构不仅颁发证书,他们还要管理好证书,也就是说,他们确定证书在多久的时间内仍然有效,他们有一个列表,里面列举了过去颁发的,但已经不再有效的证书,并且不断更新这个列表(证书吊销清单,或CRL)。

例如:ALICE曾经作为公司的雇员获得一个证书,但她现在已经离开公司了,她的证书就需要被吊销。由于证书只在审核完当事人身份后被签发,并且被传递给需要和当事人沟通的同事,从证书本身告诉去告知它已经被吊销了是不可能的。因此要检查一个证书是否有效,就必须联系CA机构获取证书吊销清单CRL,而这通常是无法自动完成的。

注意:
如果你需要使用一个不是浏览器缺省信任的CA机构,就必须将这个CA的根证书装入浏览器的可信根证书列表,使浏览器可以识别这个CA颁发的服务器证书,但这样做是非常危险的,因为一旦加载了这个CA的根证书,浏览器将接受所有由这个根证书签发的服务器证书。

二、安全套接字层(Secure Sockets Layer)

SSL是工作在面对连接网络层(如TCP层)和应用层(HTTP层)之间的协议层。SSL层协议通过为客户端和服务器提供双向认证,对隐私数据的加密,和用数字签名来保证数据完整性,从而提供了一个安全的通信通道。

本协议被设计为支持一系列制定的算法用于加密,数据摘要和签名。这允许对特定服务器的算法选择建立在法律、出口和其他问题的基础上,并且使协议能够利用新的算法。在客户机和服务器试图建立一个对话的时候,会协商算法。
SSL协议的版本

如上所示,有多个SSL协议的版本,其中SSL3.0的一个优势就是它增加了对证书链加载的支持。这项功能使服务器可以将自己的服务器证书和发行者的证书一起传给浏览器。证书链的加载,使得客户机即使没有安装过服务器的中间证书,也可以来验证服务器证书的有效性,因为服务器的中间证书被放在证书链中一起发送给了客户机。SSL 3.0是安全传输层TLS协议的基础,这项协议正由IETF负责制订开发。

2.1、建立会话


客户机和服务器同构一种“握手”次序来建立SSL会话,如图1.这个握手次序可能会有所不同,这取决于服务器是否配置成提供服务器证书,或者需要客户机提供客户证书。虽然在其他情况下存在因对密码管理要求不同而不同的“握手”步骤,详见各种SSL协议规范,但本文总结了一个基本的握手次序。

图1:基本握手次序

注意:
服务器为每个SSL会话分配一个唯一的会话标识符并缓存在服务器和客户端(直到会话标识符过期),使客户在下次连接的时候减少了握手的时间。
在握手序列中的被客户端和服务器使用的各项要素,如下列所示:

协商数据传输中使用的加密套接字。
在客户机和服务器中建立并共享一个会话密钥。
可选的服务器端身份认证
可选的客户端身份认证

首先,加密套接字协商,允许客户端和服务器选择一个他们都是支持的加密套接字方式。SSL3.0协议定义了31种加密套接字方式,每一种安全套接字由下列部分组成:

密钥交换方法
数据加密传输
创建消息认证码(MAC)的消息摘要

2.2、握手次序协议

握手次序使用三个协议:
SSL Handshake Protocol. SSL握手协议执行客户端和服务器SSL会话的建立过程。
SSL Change Cipher Spec Protocol .SSL更改密码协议负责协商会话用的密码套接字。
SSL Alert Protocol.SSL告警协议负责在客户端和服务器间传递SSL错误信息。
这些协议以及应用协议数据,都被SSL记录协议封装,如图2所示。封装好的数据被不检查数据的低一层的协议传递。下一层的协议对封装协议来说是未知的。

图2:SSL协议栈

SSL控制协议对记录协议的封装,使一个正在进行的会话在需要重新协商时,控制协议能够被安全地传输。如果没有前一个会话,则使用空的密码套接字,也就是说,在会话建立以前,不会使用密码也没有验证完整性的消息摘要。
数据传输

SSL记录协议,如图3所示 , 用于在客户端和服务器之间传递SSL控制协议和应用层数据,必需将这些数据分割成较小的单元,或者将多个较高层协议数据合并为一个单元。它可能会在将这些数据传递到下一层可靠的传递协议前将这些数据压缩、加密和附加一个摘要签名。(注:目前主流的SSL都没有对压缩的支持)。

图3:SSL记录协议

2.3、安全HTTP通信
SSL最常见的一想用途就是在浏览器和WEB服务器之间加密安全的WEB HTTP通信。使用加密的HTTP(称为HTTPS),即在SSL协议上使用HTTP协议,并没有排除HTTP协议,不过在URL地址中使用HTTPS来替换原来的HTTP,并使用另外一个服务器端口(HTTPS缺省使用443,HTTP使用80)。

三、SSL 应用

SSL证书经过身份验证,确保证书持有组织的真实性。从而最大限度上确保网站的安全性,树立网站可信形象,不给欺诈钓鱼网站以可乘之机。
对线上购物者来说,绿色地址栏是验证网站身份及安全性的最简便可靠的方式。在IE7.0、FireFox3.0、Opera 9.5等新一代高安全浏览器下,使用扩展验证(EV)SSL证书的网站的浏览器地址栏会自动呈现绿色,从而清晰地告诉用户正在访问的网站是经过严格认证的。此外绿色地址栏临近的区域还会显示网站所有者的名称和颁发证书CA机构名称。如果不是绿色地址栏的 SSL 类型,则可以点击浏览器处的锁头标志来查看网站信息。所有的一切,均向客户传递同一信息,该网站身份可信,信息传递安全可靠,而非钓鱼网站。

SSL - 简介的更多相关文章

  1. SSL简介

    注:本文基于互联网内容整合而成,非原创.参考文章参加[7.参考资料].引用时请附上原文地址. SSL(Secure Socket Layer,安全套接字层)是位于可靠的面向连接的网络层协议和应用层协议 ...

  2. ssl简介与openssl的使用

    SSL证书:  是数字证书的一种,类似于驾驶证.护照和营业执照的电子副本.因为配置在服务器上,也称为SSL服务器证书. ssl也是传输协议. 基于ssl协议开发的一款软件叫openssl linux系 ...

  3. 面试题-------SSL协议简介

    SSL协议简介 SSL简介 Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之 ...

  4. SSL/TLS 高强度加密: 常见问题解答

    关于这个模块 mod_ssl 简史 mod_ssl会受到Wassenaar Arrangement(瓦森纳协议)的影响吗? mod_ssl 简史 mod_ssl v1 最早在1998年4月由Ralf ...

  5. java ssl https 连接详解 生成证书

    我们先来了解一下什么理HTTPS 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全 ...

  6. 浅析nodeJS中的Crypto模块,包括hash算法,HMAC算法,加密算法知识,SSL协议

    node.js的crypto在0.8版本,这个模块的主要功能是加密解密. node利用 OpenSSL库(https://www.openssl.org/source/)来实现它的加密技术, 这是因为 ...

  7. Java进阶(三)Java安全通信:HTTPS与SSL

    通过一个系统,接触到了Java安全机制,故作一小节,供朋友们参考学习. 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure ...

  8. SSL 原理及 https 配置

    目录 1. SSL 原理 1.1. SSL 简介 1.2. 主要概念 1.3. 建立安全连接的过程 2. https 配置 (以 nginx 为例) SSL 原理 SSL 简介 SSL (Secure ...

  9. HTTP安全通信:Https和SSL

    1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HT ...

随机推荐

  1. Wndows 下npm 安装依赖时出现错误:MSBUILD : error MSB4132: The tools version "2.0" is unrecognized. Available tools versions are "4.0".

    当在Windows环境中使用npm install或者yarn 安装依赖时,可能会出现如下类似的错误: MSBUILD : error MSB4132: The tools version " ...

  2. MySql 链接字符串

    MySql连接字符串总结 1.本地数据库连接    <connectionStrings>        <add name="ConnectionString" ...

  3. IPv4选项

    IPv4数据报的首部由固定首部(20字节)和可变部分组成(40字节).选项可用于网络的测试和排错. 1:选项的组成(TLV:type-length-value) 1.1:一个字节的类型字段. 1.1. ...

  4. jQuery id模糊 选择器 批量处理

    $("span[id^='province_']").each(function(index,obj){        $(obj).bind("click", ...

  5. spring securiry Xml 配置 登陆

    参考:https://blog.csdn.net/yin380697242/article/details/51893397 https://blog.csdn.net/lee353086/artic ...

  6. 机器学习入门-主成分分析(PCA)

    主成分分析: 用途:降维中最常用的一种方法 目标:提取有用的信息(基于方差的大小) 存在的问题:降维后的数据将失去原本的数据意义 向量的内积:A*B = |A|*|B|*cos(a) 如果|B| = ...

  7. Spring MVC 异常处理 - DefaultHandlerExceptionResolver

    对一些特殊的异常进行处理,比如方法类型不匹配, 转换错误.

  8. ABAP-长文本处理

  9. Python Spider 抓取猫眼电影TOP100

    """ 抓取猫眼电影TOP100 """ import re import time import requests from bs4 im ...

  10. How a non-windowed component can receive messages from Windows

    Why do it? Sometimes we need a non-windowed component (i.e. one that isn't derived fromTWinControl) ...