[网络编程]VS2010+OpenSSL安装与初步了解
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 密码算法库的所有内容。 |
存放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
[网络编程]VS2010+OpenSSL安装与初步了解的更多相关文章
- linux下Python网络编程框架-Twisted安装
Twisted是python下的用来进行网络服务和应用程序编程的框架,安装Twisted前需要系统预先安装有python. 一.安装Twisted http://twistedmatrix.com/R ...
- iOS网络编程--ASIHTTPRequest框架安装和配置-图文解说
ASIHTTPRequest框架是优秀的第三方Objective-C的HTTP框架,支持Mac OS X和iOS下的HTTP开发.技术支持网站是http://allseeing-i.com/ASIHT ...
- Java网络编程:QQ邮件发送客户端程序设计
目录 一.目标介绍 1.认识SMTP(邮件传输协议) 2.POP3(邮件接收协议) 二.基于Base64编码邮箱及授权码 1.开通QQ邮箱SMTP/POP3服务 2.Java编写BASE64编码程序 ...
- python下的复杂网络编程包networkx的安装及使用
由于py3.x与工具包的兼容问题,这里采用py2.7 1.python下的复杂网络编程包networkx的使用: http://blog.sina.com.cn/s/blog_720448d30101 ...
- linux学习笔记4:linux的任务调度,进程管理,mysql的安装和使用,ssh工具的使用,linux网络编程
1.设置任务调度命令crontab 任务调度是指系统在某个时间执行的特定的命令或程序.任务调度分为:1)系统工作:有些重要的工作必须周而复始的执行,如病毒扫描.2)个别用户工作:个别用户可能希望执行某 ...
- 初步接触 Java Net 网络编程
本文目的是大概了解 Java 网络编程体系,需要一点点 Java IO 基础,推荐教程 系统学习 Java IO.主要参考 JavaDoc 和 Jakob Jenkov 的英文教程<Java N ...
- 20145208 实验五 Java网络编程
20145208 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...
- 20145220 实验五 Java网络编程
20145220 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...
- Java 网络编程---分布式文件协同编辑器设计与实现
目录: 第一部分:Java网络编程知识 (一)简单的Http请求 一般浏览网页时,使用的时Ip地址,而IP(Internet Protocol,互联网协议)目前主要是IPv4和IPv6. IP地址是一 ...
随机推荐
- Tomcat剖析(四):Tomcat默认连接器(1)
Tomcat剖析(四):Tomcat默认连接器(1) 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三): ...
- iOS开发之protocol和delegate
protocol--协议 协议是用来定义对象的属性,行为和用于回调的. 协议中有两个keyword@private和@optional,@private表示使用这个协议必需要写的方法,@op ...
- C#中ISpostback
响应客户端控件时ispostback为true 代码: using System; using System.Collections.Generic; using System.Linq; using ...
- git合并远端分支到本地分支的两种方式
作者:zhanhailiang 日期:2014-11-21 在使用版本号工具提交改动之前,都须要通过update先将本地代码更新到最新版本号.SVN通过svn update就能够实现,那么git怎样实 ...
- MVC创建XML,并实现增删改
原文:MVC创建XML,并实现增删改 如果创建如下的XML: <?xml version="1.0" encoding="utf-8" standalon ...
- Ionic项目中使用极光推送-android
对于Ionic项目中使用消息推送服务,Ionic官方提供了ngCordova项目,这个里面的提供了用angularjs封装好的消息推送服务(官方文档),使用的是GitHub上的 PushPlugin ...
- Responsive Design in 3 Steps
Responsive web design is no doubt a big thing now. If you still not familiar with responsive design, ...
- POJ 3255 Roadblocks (次级短路问题)
解决方案有许多美丽的地方.让我们跳回到到达终点跳回(例如有两点)....无论如何,这不是最短路,但它并不重要.算法能给出正确的结果 思考:而最短的路到同一点例程.spfa先正达恳求一次,求的最短路径的 ...
- IT见解
IT见解 北京海淀区 2014-10-18 张俊浩 *域名的市值在走低,因其功能被新浪.腾讯微博.微信大V这种账号所代替 *小米将自己定位为互联网公司,而不是手机公司 *手机不远的未来会成为公共 ...
- 大约Android 3.0后AsyncTask默认的单线程分析
在Android下了很大的后台操作在需要的情况下.通常用于AsyncTask这个类.比方说,网络负载形象.访问server接口.一般的情况是使用一个的一例AsyncTask对象mTask,复制Asyn ...