`
javathinker
  • 浏览: 235078 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

OpenSSL 中文手册 之三 OpenSSL 简介-协议

阅读更多

SSL(SecureSocketLayer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(TransportLayerSecurity)是IETF的TLS工作组在SSL3.0基础之上提出的安全通信标准,目前版本是1.0,即RFC2246.SSL/TLS提供的安全机制可以保证应用层数据在互联网络传输不被监听,伪造和窜改.

一般情况下的网络协议应用中,数据在机器中经过简单的由上到下的几次包装,就进入网络,如果这些包被截获的话,那么可以很容易的根据网络协议得到里面的数据.由网络监听工具可以很容易的做到这一点。

SSL就是为了加密这些数据而产生的协议,可以这么理解,它是位与应用层和TCP/IP之间的一层,数据经过它流出的时候被加密,再往TCP/IP送,而数据从TCP/IP流入之后先进入它这一层被解密,同时它也能够验证网络连接俩端的身份。


它的主要功能就是俩个:
一:加密解密在网络中传输的数据包,同时保护这些数据不被修改,和伪造。
二:验证网络对话中双方的身份

SSL协议包含俩个子协议,一个是包协议,一个是握手协议。包协议是说明SSL的数据包应该如何封装的。握手协议则是说明通信双方如何协商共同决定使用什么算法以及算法使用的key。很明显包协议位于握手协议更下一层。我们暂时对包协议的内容没有兴趣。

SSL握手过程说简单点就是:通信双方通过不对称加密算法来协商好一个对称加密算法以及使用的key,然后用这个算法加密以后所有的数据完成应用层协议的数据交换。


握手一般都是由client发起的,SSL也不例外。

1client送给server它自己本身使用的ssl的version(ssl一共有三个version),加密算法的一些配置,和一些随机产生的数据,以及其他在SSL协议中需要用到的信息。

2server送给client它自己的SSL的version,加密算法的配置,随机产生的数据,还会用自己的私有密钥加密SERVER-HELLO信息。Server还同时把自己的证书文件给送过去。同时有个可选的项目,就是server可以要求需要客户的certificate。

3client就用server送过来的certificate来验证server的身份。如果server身份验证没通过,本次通信结束。通过证书验证之后,得到server的公共密钥,解开server送来的被其用私有密钥加密过的SERVER-HELLO信息,看看对头与否。如果不对,说明对方只有该server的公共密钥而没有私有密钥,必是假的。通信告吹。

4client使用到目前为止所有产生了的随机数据(sharedsecret),client产生本次握手中的premastersecret(这个步骤是有可能有server的参与的,由他们使用的加密算法决定),并且把这个用server的公共密钥加密,送回给server.如果server要求需要验证client,那么client也需要自己把自己的证书送过去,同时送一些自己签过名的数据过去。

SSL协议有俩种技术来产生sharedsecret(真不好意思,又是一个很难意译的词组),
一种是RSA,一种是EDH.

RSA就是我们上一章说过的一种不对称加密算法。首先server把自己的RSA公共密钥送给client,client于是用这个key加密一个随机产生的值(这个随机产生的值就是sharedsecret),再把结果送给server.

EDH也是一种不对称加密算法,但它与RSA不同的是,它好象没有自己固定的公共密钥和私有密钥,都是在程序跑起来的时候产生的,用完就K掉。其他的步骤俩者就差不多了。

RSA,DSA,DH三种不对称加密算法的区别也就在这里。RSA的密钥固定,后俩个需要一个参数来临时生成key.DH甚至要求双方使用同样的参数,这个参数要事先指定。如果SSL库没有load进这个参数,DH算法就没办法用。DSA没研究过。

5Server验证完client的身份之后,然后用自己的私有密钥解密得到premastersecret然后双方利用这个premastersecret来共同协商,得到mastersecret.

6双方用master一起产生真正的sessionkey,着就是他们在剩下的过程中的对称加密的key了。这个key还可以用来验证数据完整性。双方再交换结束信息。握手结束。

接下来双方就可以用协商好的算法和key来用对称加密算法继续下面的过程了。

很简单吧?其实要复杂一些的,我简化了很多来说。

不过还是有个问题,喜欢捣蛋的人虽然看不懂他们在交流些什么,但篡改总可以吧?
记得我们在加密算法里面介绍过的哈希算法吗?就是为了对付这种捣蛋者的。在每次送信息的时候,附带把整条信息的哈希值也送过去,接收方收到信息的时候,也把收到的内容哈希一把,然后和对方送来的哈希值对比一下,看看是否正确。捣蛋者如果乱改通信内容,哈希出来的值是不同的,那么就很容易被发现了。


但这样子,捣蛋者至少可以学舌。他可以把之前监听到的内容重复发给某一方,而这些内容肯定是正确的,无法验证出有问题的。哎,SSL是怎么对付这种人的我还没看出来。有篇文章说:多放点随机数在信息里可以对付,我也没去研究这句话是什么意思。

分享到:
评论

相关推荐

    openssl-1.0.2u + openssl-1.0.2k

    4. **openssl-doc-1.0.2u-1.x86_64.rpm** 和 **openssl-doc-1.0.2k-1.x86_64.rpm**:包含OpenSSL的文档和手册页,供用户和开发者参考。 在实际应用中,`openssl-devel`包对于开发者来说至关重要,因为它包含了...

    openssl API 函数库

    #### 二、OpenSSL简介 **2.1 OpenSSL简介** OpenSSL是一个开源的安全套件库,提供了强大的加密功能,包括SSL/TLS协议的实现以及各种加密算法。它广泛应用于Web服务器、邮件服务器以及其他需要网络通信安全的应用...

    OpenSSL开发手册

    在OpenSSL中,核心组件主要包括三个部分:libssl、libcrypto和openssl命令行工具。libssl处理SSL/TLS协议,用于实现安全的网络通信;libcrypto提供了加密、哈希、随机数生成等基础密码学功能;openssl命令行工具则是...

    OpenSSL-1-1-1-stable静态库,OpenSSL-1-1-1-stable

    它包含了各种加密算法、常用的密钥和证书操作,以及安全协议的支持。OpenSSL-1-1-1-stable 版本是 OpenSSL 的一个稳定版本,提供了一个可靠的环境,适用于开发和部署需要加密功能的应用程序。 在描述中提到的 ...

    openssL开发手册详解.rar

    《openssl开发手册详解》是针对OpenSSL库进行深入解析的重要参考资料,对于从事加密技术、网络安全以及软件开发的人员来说,是一份极其宝贵的工具书。OpenSSL是一个强大的安全套接层(SSL)和传输层安全(TLS)协议...

    OpenSSL编程手册

    《OpenSSL编程手册》是一本深入探讨OpenSSL库使用的专业指南,主要针对那些希望在自己的应用程序中集成加密、安全通信等功能的开发者。OpenSSL是一个强大的安全套接字层(SSL)和传输层安全(TLS)协议实现库,同时...

    openssl简明使用手册

    ### OpenSSL简明使用手册知识点详解 #### 一、概述 OpenSSL是一款强大的工具包,用于实现安全套接层(Secure Sockets Layer, SSL)及传输层安全(Transport Layer Security, TLS)协议,同时提供了大量的密码算法、...

    openssl中文简介.doc

    这个文档是广州全通数码科技有限公司软件技术部内部资料,旨在为读者提供一个中文版的 OpenSSL 知识概述。 1. **前言** 前言部分通常会介绍 OpenSSL 的重要性,它在网络安全中的角色,以及为何需要理解和使用 ...

    openssl-0.9.8h-1-bin

    OpenSSL是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现库,同时也包含了众多的加密算法、证书操作和其他相关功能。在本文中,我们将深入探讨其在RSA密钥生成方面的应用。 RSA是一种非对称加密算法,由...

    openssl开发手册.7z

    openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编...

    openssl开发手册.tar.gz_openssl 开发 编程手册

    《openssl开发手册》是针对OpenSSL库的一份详尽指南,旨在帮助开发者深入理解和高效使用这个强大的加密工具。OpenSSL是一个开源项目,包含了用于安全通信的SSL和TLS协议的实现,以及一系列强大的加密算法和证书管理...

    openssl下载:openssl-0.9.8b.tar.gz

    OpenSSL 是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现库,同时也包含了一系列加密算法、证书工具和其他相关功能。在本文中,我们将深入探讨OpenSSL库,特别是针对`openssl-0.9.8b.tar.gz`这个版本的...

    OpenSSL学习资料(比较齐全的OpenssL相关资料汇总)

    这可能涵盖OpenSSL的高级特性,如SSL/TLS协议的细节、安全性最佳实践、OpenSSL库的扩展和自定义、性能优化等方面。这部分内容可能适合已经有一定基础的读者深入学习。 文档"openssl编程入门(含完整示例).doc"很...

    openssl编程、开发手册、基础、结构和指令

    **openssl编程、开发手册、基础、结构和指令** 在网络安全领域,OpenSSL是一个至关重要的工具,它是一个开源的库,提供了各种加密算法、安全协议以及用于实现网络通信安全的工具。OpenSSL支持SSL(Secure Sockets ...

    openssl学习资料大全

    例如,可能有“openssl_manual”(中文手册)、"openssl_examples"(编程实例)、"openssl_tips"(学习心得)等,但具体的内容无法从这个单一的文件名中获取。 **综合知识点概览:** 1. **OpenSSL基础**:介绍...

    Openssl编程指导手册

    《OpenSSL编程指导手册》是一本专为C/C++开发者设计的深度学习资源,它深入浅出地探讨了OpenSSL库的使用,涵盖了从基本概念到高级应用的广泛主题。OpenSSL是一个强大的安全套接层(SSL)和传输层安全(TLS)实现,...

    openssl-OpenSSL_1_0_2l.zip

    3. 文档:包括 README 文件、API 参考手册等,提供关于如何使用 OpenSSL 的信息。 4. 测试用例:用于验证库的功能和性能。 5. 示例代码:展示如何在应用中使用 OpenSSL。 **详细知识点:** 1. **OpenSSL 库:** ...

    openssl最全资料

    了解和掌握OpenSSL不仅对于开发安全的网络服务至关重要,也是许多网络安全岗位的基本技能之一。通过深入学习这个“openssl最全资料”,你可以获得全面的OpenSSL知识,提升你在网络安全领域的专业素养。记得定期更新...

Global site tag (gtag.js) - Google Analytics