OpenSSL简介

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

内部包含什么:它是一个健全的、商业级的、全开放的和开放源代码的工具包,实现安全套接层协议(SSL v2/v3)和传输层安全协议(TLS v1)以及形成一个功效完整的通用目的的加密技术库。openssl sslv2、sslv3、tlsv1的一份完整实现,内部包含了大量加密算法程序.其应用程序提供了丰富的加密、验证、证书生成等功能,甚至可以用它建立一个完整的CA。同时,它也提供了一套完整的库函数,可用开发用SSL/TLS的通信程序。Apache的https两种版本 mod_ssl和apachessl均基于它实现的。

缺点:openssl 的缺点是文档太少,连一份完整的函数说明都没有,man page也至今没做完整,如果想用它编程序,除了熟悉已有的文档(包括 ssleay,mod_ssl,apachessl的文档)外,可以到它的maillist上找相关的帖子,许多问题可以在以前的文章中找到答案。

优点:OpenSSL 采用 C 语言作为开发语言,这使得 OpenSSL 具有优秀的跨平台性能。OpenSSL 支持 Linux、Windows、BSD、Mac、VMS 等平台,这使得 OpenSSL 具有广泛的适用性。Openssl是开源的,对于程序员来说,openssl所有的技术实现细节都是可见的。 Openssl的核心加密库ssleay涉及范围广,功能齐全,逻辑合理。打破了美国不允许强加密产品出口的限制 。

OpenSSL目录

整个软件包可大概分为三个主要功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL 的目录结构是围绕这三个功能部分进行规划的。

OpenSSL 的根目录下的文件包含OpenSSL各个平台下编译安装的说明文档、编译安装的配置文件以及OpenSSL本身版本变化的一些说明文档。诸如INSTALL.*这样名称的文件,都是安装编译说明文件,后缀名是平台的名称。比如INSTALL.w32,就是Windows平台的OpenSSL安装编译说明文件。只有Linux的安装编译说明文件是不带后缀的,就是INSTALL。

目录名

功能描述

Crypto

存放OpenSSL 所有加密算法源码文件和相关标注如X.509 源码文件,是OpenSSL 中最重要的目录,包含了OpenSSL 密码算法库的所有内容。

SSL

存放OpenSSL 中SSL 协议各个版本和TLS 1.0 协议源码文件,包含了OpenSSL 协议库的所有内容。

Apps

存放OpenSSL 中所有应用程序源码文件,如CA、X509 等应用程序的源文件就存放在这里。

Doc

存放了OpenSSL 中所有的使用说明文档,包含三个部分:应用程序说明文档、加密算法库API说明文档以及SSL 协议API 说明文档。

Demos

存放了一些基于OpenSSL 的应用程序例子,这些例子一般都很简单,演示怎么使用OpenSSL其中的一个功能。

Include

存放了使用OpenSSL 的库时需要的头文件。

Test

存放了OpenSSL 自身功能测试程序的源码文件

对称加密算法

OpenSSL 一 共提供了8 种对称加密算法,其中7 种是分组加密算法,仅有的一种流加密算法是RC4。这7 种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式 (CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES 使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128 位,其它算法使用的则是64 位。事实上,DES 算法里面不仅仅是常用的DES 算法,还支持三个密钥和两个密钥3DES 算法。

虽然每种加密算法都定义了自己的接口函数,但是OpenSSL 还使用EVP 封装了所有的对称加密算法,使得各种对成加密算法能够使用统一的API 接口EVP_Encrypt 和EVP_Decrypt 进行数据的加密和解密,大大提供了代码的可重用性能。

非对称加密算法

OpenSSL 一 共实现了4 种非对称加密算法,包括DH 算法、RSA 算法、DSA 算法和椭圆曲线算法(EC)。DH 算法一般用户密钥交换。RSA 算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA 算法则一般只用于数字签名。

跟 对称加密算法相似,OpenSSL 也使用EVP 技术对不同功能的非对称加密算法进行封装,提供了统一的API 接口。如果使用非对称加密算法进行密钥交换或者密钥加密,则使用EVP_Seal 和EVP_Open 进行加密和解密;如果使用非对称加密算法进行数字签名,则使用EVP_Sign 和EVP_Verify 进行签名和验证。

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

信息摘要算法

OpenSSL 实现了5 种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA 算法事实上包括了SHA 和SHA1 两种信息摘要算法,此外,OpenSSL 还实现了DSS 标准中规定的两种信息摘要算法DSS 和DSS1。

OpenSSL 采用EVP_Digest 接口作为信息摘要算法统一的EVP 接口,对所有信息摘要算法进行了封装,提供了代码的重用性。

密钥和证书管理

密钥和证书管理是PKI 的一个重要组成部分,OpenSSL 为之提供了丰富的功能,支持多种标准。

首先,OpenSSL 实现了ASN.1 的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL 等数据对象的DER、PEM 和BASE64 的编解码功能。OpenSSL 提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12 和PKCS#8 的编解码功能。OpenSSL 在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。

在此基础上,OpenSSL 实现了对证书的X.509 标准编解码、PKCS#12 格式的编解码以及PKCS#7 的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。

事实上,OpenSSL 提供的CA 应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。

Engine 机制

Engine 机制的出现是在OpenSSL 的0.9.6 版的事情,开始的时候是将普通版本跟支持Engine 的版本分开的,到了OpenSSL 的0.9.7 版,Engine 机制集成到了OpenSSL 的内核中,成为了OpenSSL 不可缺少的一部分。

Engine 机 制目的是为了使OpenSSL 能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。OpenSSL 的Engine 机制成功地达到了这个目的,这使得OpenSSL 已经不仅仅使一个加密库,而是提供了一个通用地加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备更OpenSSL 协调工作,需要写少量的接口代码,但是这样的工作量并不大,虽然还是需要一点密码学的知识。Engine 机制的功能跟Windows 提供的CSP 功能目标是基本相同的。

BIO 机制

BIO 机制是OpenSSL 提供的一种高层。

IO 接口,该接口封装了几乎所有类型的IO 接口,如内存访问、文件访问以及Socket 等。这使得代码的重用性大幅度提高,OpenSSL 提供API 的复杂性也降低了很多。

OpenSSL编译安装

1.下载/安装perl,和下载/解压openssl-1.0.1e.tar.gz编译openssl必须要安装perl,这个是在openssl的readme文件中强调的,当然,实际编译过程中也却是需要。(Perl是一种高级、通用、直译式、动态的程序语言。Perl教程)

2.按照openssl-1.0.1e文件夹下的INSTALL.w32文件描述来编译。首先,进入到openssl-1.0.1e文件夹目录下

  • > perl Configure VC-WIN32 --prefix=c:\some\openssl\dir  --prefix是你在最后一步进行openssl的安装的时候openssl的安装目录
  • > ms\do_nasm    -----执行ms目录下的do_ms文件

进入到VC++开发环境目录下,如:D:\devInstallPath\Microsoft Visual Studio 10.0\VC\bin

  • > nmake -f ms\ntdll.mak
  • > nmake -f ms\ntdll.mak test
  • > nmake -f ms\ntdll.mak install
生成lib文件夹和out32dll文件夹。(nmake用于执行扩展名为mak的命令)
3.开发时,头文件目录和库文件目录的添加
项目属性-VC++目录--包含目录:如:E:\ReferData\OpenSSL\openssl-1.0.1e\include;
                     库目录:如:E:\ReferData\OpenSSL\openssl-1.0.1e\lib;
参考博文:

[网络编程]VS2010+OpenSSL安装与初步了解的更多相关文章

  1. linux下Python网络编程框架-Twisted安装

    Twisted是python下的用来进行网络服务和应用程序编程的框架,安装Twisted前需要系统预先安装有python. 一.安装Twisted http://twistedmatrix.com/R ...

  2. iOS网络编程--ASIHTTPRequest框架安装和配置-图文解说

    ASIHTTPRequest框架是优秀的第三方Objective-C的HTTP框架,支持Mac OS X和iOS下的HTTP开发.技术支持网站是http://allseeing-i.com/ASIHT ...

  3. Java网络编程:QQ邮件发送客户端程序设计

    目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...

  4. python下的复杂网络编程包networkx的安装及使用

    由于py3.x与工具包的兼容问题,这里采用py2.7 1.python下的复杂网络编程包networkx的使用: http://blog.sina.com.cn/s/blog_720448d30101 ...

  5. linux学习笔记4:linux的任务调度,进程管理,mysql的安装和使用,ssh工具的使用,linux网络编程

    1.设置任务调度命令crontab 任务调度是指系统在某个时间执行的特定的命令或程序.任务调度分为:1)系统工作:有些重要的工作必须周而复始的执行,如病毒扫描.2)个别用户工作:个别用户可能希望执行某 ...

  6. 初步接触 Java Net 网络编程

    本文目的是大概了解 Java 网络编程体系,需要一点点 Java IO 基础,推荐教程 系统学习 Java IO.主要参考 JavaDoc 和 Jakob Jenkov 的英文教程<Java N ...

  7. 20145208 实验五 Java网络编程

    20145208 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  8. 20145220 实验五 Java网络编程

    20145220 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  9. Java 网络编程---分布式文件协同编辑器设计与实现

    目录: 第一部分:Java网络编程知识 (一)简单的Http请求 一般浏览网页时,使用的时Ip地址,而IP(Internet Protocol,互联网协议)目前主要是IPv4和IPv6. IP地址是一 ...

随机推荐

  1. Android MediaPlayer 和 NativePlayer 播放格式控制

    对于本机MediaPlayer 支持格型式试验: 对于原生 NativeMedia 的支持格式測试: 这个支持就比較失望了,眼下測试的手机仅仅支持 H.264视频及AAC音频,其他的格式都不支持. 使 ...

  2. 高效率的Shell

    1. 批量将Excel转为CSV文件 XLSX2CSV: https://github.com/dilshod/xlsx2csv sudo easy_install xlsx2csv #安装Xlsx2 ...

  3. CentOS采用grub进 single状态

    当系统文件错误,有可能无法进入系统.或者您忘记了原来的系统password. 用这种方法可以,进single状态,编辑系统启动文件或更改的错误password. 1.重新启动系统. 2.按" ...

  4. 疯狂html5演讲(两):HTML5简经常使用的元素和属性(一个):html5保留经常使用的元素

    html5取出一小部分的元素和属性:主要删除的各种元素和属性与文档相关的风格.例<font>.width等待,html5建议规范css样式表来控制html文档样式. 1.基本元素 < ...

  5. 大约php,mysql,html数字寻呼和文本分页2分页样式供大家参考

    做盗版.转载请添加源http://blog.csdn.net/yanlintao1 请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 首先进行样式展示希望对大家有 ...

  6. 有return如果是try catch finally运行命令

    背景: 昨天一个朋友出去采访,遇到这样的问题:"C#  catch那里return.finally也弄它运行?" 个人总结实践: 1.无论有木有出现异常.finally块中代码都会 ...

  7. Asp.Net MVC页面静态化功能实现二:用递归算法来实现

    上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net ...

  8. CQRS架构

    CQRS架构 命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)模式是一种架构体系模式,能够使改变模型的状态的命令和模型状态的查询实现 ...

  9. 将Model实体类对象作为WebService接口参数(转)

    转自:http://www.cnblogs.com/fengyishou/archive/2009/02/27/1399281.html 关于web服务的有关基础知识,看了基本书,但是不敢在这里乱说, ...

  10. hibernate在持久对象的生命周期(三州:自由状态,持久状态,自由状态 之间的转换)

    三种状态的基本概念: 1.  临时身份(Transient):也被称为自由状态,它只存在于内存中,并且在数据库中没有相应的数据. 使用new创建的对象,久化,没有处于Session中,处于此状态的对象 ...