SSL(Secure Sockets Layer,安全套接层),及其继任者 TLS(Transport Layer Security,传输层安全)是为网络通讯提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络链接进行加密。html
为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程当中不会被截取及窃听。web
SSL协议位于TCP/IP协议与各类应用层协议之间,为数据通信提供安全支持。SSL协议可分为两层:
SSL记录协议(SSL Record Protocol):它创建在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议(SSL Handshake Protocol):它创建在SSL记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务主要有:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程当中不被改变。算法
1、什么是SSL?
SSL或者Secure Socket Layer,是一种容许web浏览器和web服务器经过一个安全的链接进行交流的技术。这意味着将被发送的数据在一端被翻译成密码,传送出去,而后在另外一 端解开密码,再进行处理。这是一个双向的过程,也就是浏览器和服务器都须要在发送数据以前对它们进行加密。
SSL协定的另外一个重要方面是认证(Authentication)。这就是说,在你开始试图经过一个安全链接与一个Web服务器交流的时候,这个服务器 会要求你的浏览器出示一组证件,经过“鉴定”的方式来证实这就是你所声明的网站。在某些状况下,服务器还会要求你的web浏览器的认证书,证实你就是你所 说的那我的。这就是所知的“客户认证”,尽管实际状况中,更多地用在商务-对-商务(B2B)交易,而不是对我的用户。大多数有SSL功能的web服务器 不要求客户认证(Client Authentication)。浏览器
2、证书: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 和物理地址)网络
您的公钥ide
公钥的到期日期网站
发出此 ID 的 CA 的名称(如 VeriSign)编码
一个惟一的序列号
VeriSign 的数字签名
3、证书格式
主要的证书类型有:
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 文件。
4、加密算法
加密算法有俩大类,第一种是不基于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_A一、KEY_A2, 其中KEY_A1是A的私有密钥,KEY_A2是A的公共密钥。
B 拥有 KEY_B一、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。
5、数字签名
数字签名也是不对称加密算法的一个重要应用,理解它对于理解SSL很重要的,放在这里一块儿介绍一下。
签名是什么你们都很熟悉吧?证实该东西是你写的,是你发布的,你就用签名搞定。看看那些重要文件都要头头签名。数字签名就是数字化的签名了。记得公用密钥 和私有密钥的特征吗?只有你一我的有你本身的私有密钥。而你的公用密钥是其余人都知道的 了。那么你在写完一封邮件以后,用本身的私有密钥加密本身的名字,接收人用你的公共密钥解开一看,哦,是你发的。这就是你的数字签名过程了。
上面的解释是很简化的了,其实数字签名比这个复杂多了,但咱们没有了解的必要,知道数字签名是这么一回事就能够了。
还有一种咱们须要知道的加密算法,其实我不以为那是加密算法 ,应该叫哈希算法, 英文是message digest, 是用来把任何长度的一串明文以必定规则变成固定长度的一串字符串。它在SSL中的做用也很重要,之后会慢慢说起的。通常使用的是MD五、SHA、 base64不是加密算法,但也是SSL常用的一种算法,它是编码方式,用来把asc码和二进制码转来转去的。
具体的加密解密过程咱们不须要了解,由于SSL根本不关心。但了解加密算法的一些基本原理是必要的,不然很难理解SSL。
参考:http://baike.baidu.com/view/16147.htm
http://blog.csdn.net/xxf634/article/details/2713311
http://blog.csdn.net/hj5182001/article/details/1767380
本文转载自:http://www.cnblogs.com/adforce/archive/2012/11/27/2790937.html