在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了。本文追本溯源围绕这个模式谈一谈。
名词解释
首先解释一下上面的几个名词:
https:在http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议。http协议直接放置在TCP协议之上,而https提出在http和TCP中间加上一层加密层。从发送端看,这一层负责把http的内容加密后送到下层的TCP,从接收方看,这一层负责将TCP送来的数据解密还原成http的内容。
SSL(Secure Socket
Layer):是Netscape公司设计的主要用于WEB的安全传输协议。从名字就可以看出它在https协议栈中负责实现上面提到的加密层。因此,一个https协议栈大致是这样的:
数字证书:一种文件的名称,好比一个机构或人的签名,能够证明这个机构或人的真实性。其中包含的信息,用于实现上述功能。
加密和认证:加密是指通信双方为了防止铭感信息在信道上被第三方获取而泄漏,将明文通过加密变成密文,如果第三方无法解密的话,就算他获得密文也无能为力;认证是指通信双方为了确认对方是值得信任的消息发送或接受方,而不是使用假身份的骗子,采取的确认身份的方式。只有同时进行了加密和认真才能保证通信的安全,因此在SSL通信协议中这两者都被应。
因此,这三者的关系已经十分清楚了:https依赖一种实现方式,目前通用的是SSL,数字证书是支持这种安全通信的文件。另外有SSL衍生出TLS和WTLS,前者是IEFT将SSL标准化之后产生的(TSL1.0),与SSL差别很小,后者是用于无线环境下的TSL。
如何加密
SSL的加密过程
需要注意的是非对称加解密算法的效率要比对称加解密要低的多。所以SSL在握手过程中使用非对称密码算法来协商密钥,实际使用对称加解密的方法对http内容加密传输。
下面是对这一过程的形象的比喻:
假设A与B通信,A是SSL客户端,B是SSL服务器端,加密后的消息放在方括号[]里,以突出明文消息的区别。双方的处理动作的说明用圆括号()括起。
A:我想和你安全的通话,我这里的对称加密算法有DES,RC5,密钥交换算法有RSA和DH,摘要算法有MD5和SHA。
B:我们用DES-RSA-SHA这对组合好了。
这是我的证书,里面有我的名字和公钥,你拿去验证一下我的身份(把证书发给A)。
A:(查看证书上B的名字是否无误,并通过手头早已有的数字的证书验证了B的证书的真实性,如果其中一项有误,发出警告并断开连接,这一步保证了B的公钥的真实性)
(产生一份秘密消息,这份秘密消息处理后将用作对称加密密钥,加密初始化向量和hmac的密钥。将这份秘密消息-协议中称为per_master_secret-用B的公钥加密,封装成称作ClientKeyExchange的消息。由于用了B的公钥,保证了第三方无法获取)
我生成了一份秘密消息,并用你的公钥加密了,给你(把ClientKeyExchange发给B)
注意,下面我就要用加密的办法给你发消息了!
(将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥)
[我说完了]
B:(用自己的私钥将ClientKeyExchange中的秘密消息解密出来,然后将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥,这时双方已经安全的协商出一套加密办法了)
注意,我也要开始用加密的办法给你发消息了!
[我说完了]
A: [我的秘密是...]
B: [其它人不会听到的...]
从上面的过程可以看到,SSL协议是如何用非对称密码算法来协商密钥,并使用密钥加密明文并传输的。还有以下几点补充:
1.B使用数字证书把自己的公钥和其他信息包装起来发送A,A验证B的身份,下面会谈到A是如何验证的。
2.A生成了了加密密钥、加密初始化向量和hmac密钥是双方用来将明文摘要和加密的。加密初始化向量和hmac密钥首先被用来对明文摘要(防止明文被篡改),然后这个摘要和明文放在一起用加密密钥加密后传输。
3.由于只有B有私钥,所以只有B可以解密ClientKeyExchange消息,并获得之后的通信密钥。
4.事实上,上述过程B没有验证A的身份,如果需要的话,SSL也是支持的,此时A也需要提供自己的证书,这里就不展开了。在设置IIS的SSL
Require的时候,通常默认都是igore client certification的。
分享到:
相关推荐
关于生成SSL数字证书的总结 在本文中,我们将详细介绍如何生成SSL数字证书,并在Tomcat服务器上配置SSL数字证书。同时,我们还将总结一些常见的问题和解决方法。 一、生成SSL数字证书 为了生成SSL数字证书,我们...
《HTTPS/SSL证书详解》 在互联网世界中,数据安全是至关重要的,HTTPS(Hyper Text Transfer Protocol Secure)和SSL(Secure Socket Layer)证书是保障网络安全的重要工具。它们为用户提供了一个安全的环境,使得...
C# SSL服务端连接及安装数字证书
使用HttpClient4.5实现https请求忽略SSL证书验证工具类
SSL(Secure Socket Layer)证书是一种数字证书,主要用于加密互联网通信,确保数据在传输过程中的完整性与机密性。它通过创建一个安全的加密连接,防止中间人攻击、数据篡改和身份伪造。当浏览器与服务器之间建立...
1. **证书结构**:一个SSL证书通常包含发行者的身份、拥有者的身份信息(通常是网站域名)、公钥以及证书的有效期等信息。这些信息经过证书颁发机构(CA)的私钥签名,确保其真实性和完整性。 2. **自签名证书**:...
1. SSL证书概述: SSL证书包含一个公钥和一个私钥,其中公钥用于加密数据,私钥用于解密。当用户访问一个网站时,浏览器会验证服务器的SSL证书,确保其来自可信的CA,并且未过期。如果验证成功,浏览器和服务器之间...
这是一款二次元风格向的SSL证书自签工具源码,可随时随地签发SSL证书 运行环境: 你的 PHP 必须 >=5.6,且安装了 OpenSSL 扩展 所有文件都已本地化,大部分PHP默认开启OpenSSL 安装: 下载源码导入网站目录访问...
SSL(Secure Sockets Layer)和数字证书是网络安全领域的重要组成部分,它们主要用于确保网络通信的安全性。SSL最初由Netscape公司在1994年开发,主要用于浏览器与服务器之间的数据加密,提供加密、身份验证和数据...
同时,HTTPS 也存在一些限制,如需要申请数字证书,证书的费用可能很高,影响网站的可扩展性。 三、IE 浏览器如何验证 SSL 证书 当用户访问 HTTPS 网站时,IE 浏览器会自动验证 SSL 证书的合法性。如果证书无效或...
本文将详细介绍如何在Nginx服务器上配置SSL自签名证书。 首先,我们需要生成自签名SSL证书。这通常包括以下步骤: 1. **生成RSA密钥**:使用`openssl genrsa`命令创建一个带有密码保护的RSA私钥。例如,`openssl ...
数字证书简介、SSL协议原理、数据安全传输是互联网安全领域的核心知识点。数字证书为互联网上的通信双方提供了身份验证机制,确保双方身份的真实性,防止数据在传输过程中被窃听、篡改和抵赖。SSL协议是当前广泛使用...
SSL通过使用加密算法、数字证书和握手协议来实现这些功能。 数字证书是SSL协议中的核心组件,它是一种电子凭证,用于证明网络实体(如个人、服务器或组织)的身份。证书包含公钥、身份信息、签发者信息、有效期以及...
1. 获取证书:首先,你需要从受信任的证书颁发机构(如Verisign、GlobalSign、Comodo等)申请SSL证书。 2. 证书签名请求:在Windows Server 2003上,使用IIS管理工具生成证书签名请求(CSR)。这将包含你的组织信息和...
SSL证书生成软件、包括转换证书格式
当客户端(如Android应用)与服务器建立HTTPS连接时,服务器会发送其SSL证书,客户端会验证这个证书的有效性。 在Android中,SSL证书验证主要涉及到以下几个方面: 1. **默认的信任管理器**:Android系统内置了一...
java信任SSL证书的工具类 忽略HTTPS请求的SSL证书,必须在openConnection之前调用
1. **获取SSL证书** 你可以从权威的证书颁发机构(CA,如Let's Encrypt、GlobalSign等)申请免费或付费的SSL证书。或者,为了测试目的,可以自签发一个证书。自签发证书需要生成一对密钥,包括公钥(通常为.crt文件...
远程服务使用SSL证书链,该证书链已使用加密弱哈希算法(例如MD2、MD4、MD5或SHA1)签名。这些签名算法很容易受到碰撞攻击。攻击者可以利用这一点生成另一个具有相同数字签名的证书,从而允许攻击者伪装成受影响的服务...