Open SSL 开发环境配置

最后更新日期:2014-05-13

阅读前提:VisualStudio的基本使用、Cent OS的基本使用

环境: Windows 8.1 64bit英文版,Visual Studio 2013 Professional Update1英文版,ActivePerl 5.16.3,openssl-1.0.1g,Cent OS 6.5 (32位),openssl-1.0.1e

在Windows下配置Open SSL开发环境

编译32位Open SSL 依赖库

[1]从Active Perl官网中下载ActivePerl 5.16.3 for Windows(64-bit,x64)并安装

[2]从Open SSL官网中下载openssl-1.0.1g.tar.gz解压缩到d:\sdk

当然你也可以解压缩到其它路径

[3]启动[Visual StudioTools] -> [VS2013 x86 Native Tools Command Prompt]程序,进入d:\sdk\openssl_1.0.1g目录下运行命令

perlConfigure VC-WIN32 no-asm

在ms子目录下会生成do_nasm.bat等文件

[4]在当前目录(D:\sdK\sopenssl-1.0.1g)调用下面的命令

ms\do_nasm.bat
在当前目录的ms子目录下生成nt.make和ntdll.make文件

 

[5]运行下面的命令,在out32目录下生成静态库

nmake-f ms\nt.mak

也可以使用下面的命令在out32dll目录下生成动态库

nmake-f ms\ntdll.mak

[6]在Visual Studio 2013下新建Win32控制台工程,不要自动生成代码,添加Source.cpp文件,用下面的代码测试Open SSL开发环境是否正常

  1. #include <string>
  2. #include <iomanip>
  3. #include <iostream>
  4. #include <openssl/md5.h>
  5. using namespace std;
  6. #ifdef WIN32
  7. #pragma comment(lib, "libeay32.lib")
  8. #pragma comment(lib, "ssleay32.lib")
  9. #endif
  10. int main(int argc, char* argv[])
  11. {
  12. std::string str = "1234";
  13. unsigned char md[MD5_DIGEST_LENGTH];
  14. char tmp[3] = { 0 };
  15. MD5((const unsigned char*)str.c_str(), str.size(), md);
  16. for (int i = 0; i < MD5_DIGEST_LENGTH; i++)
  17. {
  18. cout<<setw(2)<<setfill('0')<<hex<<(int)(md[i]);
  19. }
  20. cout << endl;
  21. return 0;
  22. }

测试没问题后,就可以用类似的方式编译出Open SSL 64位动态库和静态库文件

编译64位Open SSL依赖库

启动[Visual Studio Tools] -> [VS2013 x64 Native Tools Command Prompt]程序,进入d:\sdk\openssl_1.0.1g目录下运行下面六个命令

perlConfigure VC-WIN64A no-asm

ms\do_win64a.bat

nmake-f ms\nt.mak  clean

nmake-f ms\ntdll.mak clean

nmake- f ms\nt.mak

nmake-f ms\ntdll.mak

由于产生的OpenSSL64位依赖库同32位依赖库同名而且同位置,所以我们只要把刚才新建的Win32项目,在项目属性页的[Configulation Manager]中把平台属性改成x64就可以正常调用OpenSSL 64位依赖库了。上面命令中的“clean”参数是为了清除原来32位的文件否则nmake会失败,同理从64位依赖库改回32位也要用到“clean”参数。

你还可以用下面的两条命令分别测试生成的Open SSL静态库和动态库是否正常

nmake- f ms\nt.mak test

nmake-f ms\ntdll.mak test

如何想要把Open SSL生成的Win32依赖库放到指定地方参考可以用下面的命令

perl Configure VC-WIN32 --prefix=F:/openssl

Cent OS下安装Open SSL开发环境

使用下面的两条命令安装Open SSL

yum install openssl

yum install openssl-devel

使用下面的命令查看Open SSL安装位置

whereis openssl

Windows下的libeay32.lib、ssleay32.lib分别对应linux下的libcrypto.so、libssl.so文件,它们缺省在/usr/lib路径下,头文件在/usr/incude目录下。

把上面的源代码复制到Cent OS后, 借助CMake工具编译、运行成功。

下面是CMakeLists.txt文件清单

  1. #设置项目名称
  2. PROJECT(OpenSSLTutorial1)
  3. #要求CMake的最低版本为2.8
  4. CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
  5. #添加头文件搜索路径
  6. INCLUDE_DIRECTORIES(/usr/local/include)
  7. #添加库文件搜索路径
  8. LINK_DIRECTORIES(/usr/local/lib)
  9. #用于将当前目录下的所有源文件的名字保存在变量 DIR_SRCS 中
  10. AUX_SOURCE_DIRECTORY(. DIR_SRCS)
  11. #用于指定从一组源文件 source1 source2 … sourceN(在变量DIR_SRCS中定义)
  12. #编译出一个可执行文件且命名为OpenSSLTutorial1
  13. ADD_EXECUTABLE(OpenSSLTutorial1 ${DIR_SRCS})
  14. #添加编译可执行程序所需要的链接库、如果有多个中间用空格隔开
  15. #第一个参数是可执行程序名称,第二个开始是依赖库
  16. TARGET_LINK_LIBRARIES(OpenSSLTutorial1 ssl crypto)

libcrypto.so文件实现了各种加密算法,被OpenSSL用于实现SSL, TLSand S/MIME协议,也被用于SSH, OpenPGP等加密标准。

libssl.so库文件实现SSL(theSecure Sockets Layer) v2/v3,和TLS(Transport Layer Security)协议。TLS与SSL在传输层对网络连接进行加密。

补充阅读资料

《调用OpenSSL实现数字签名功能例程(一)》

http://blog.csdn.net/lee353086/article/details/7489863

《调用OpenSSL实现数字签名功能例程(二)》

http://blog.csdn.net/lee353086/article/details/7489870

《VC2008下编译OpenSSL》

http://blog.csdn.net/lee353086/article/details/7378835

《64位Win7下用VS2010编译OpenSSL》

http://blog.csdn.net/henter/article/details/8364532

《wchar_t的问题》

http://bbs.chinaunix.net/archiver/?tid-1350913.html

《CentOS的软件安装方法rpm和yum》

http://www.discuz.net/thread-3513163-1-1.html

http://blog.csdn.net/lee353086/article/details/39433411

Open SSL 开发环境配置的更多相关文章

  1. PHP开发环境配置系列(四)-XAMPP常用信息

    PHP开发环境配置系列(四)-XAMPP常用信息 博客分类: PHP开发环境配置系列 xamppphp 完成了前面三篇后(<PHP开发环境配置系列(一)-Apache无法启动(SSL冲突)> ...

  2. Python开发环境配置

    好久没有写博客了,自从6月份毕业后,进入一家做书法.字画文化宣传的互联网公司(www.manyiaby.com),这段时间一直在进行前端开发,对于后端的使用很少了,整天都是什么html.css.jav ...

  3. Visual studio 通用开发环境配置:SDL,FFMPEG为例

    引言 每一个C++库的使用都是从开发环境的配置开始的,其实每个库的配置过程都是大同小异,总结下来有下面几个步骤: 下载库文件,这里假定是已经预先编译完成的. 配置库文件的包含目录(include)和库 ...

  4. AndroidStudio开发环境配置-Windows

    Android Studio开发环境配置-Windows 最近突发奇想,开始研究Android开发.开始时使用Eclipse作为开发IDE,结果各种不好使,首先下载和安装SDK,以及不同版本的Imag ...

  5. WIN10下java8的开发环境配置与第一个java程序

    一.开发环境配置 1.在官网上下载jdk-8u111-windows-x64.exe 2.运行安装包,可以自定义安装路径 3.进入环境变量设置: 计算机右键-->属性-->高级系统设置-- ...

  6. Mac下golang开发环境配置

    go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发 ...

  7. win7 x64 vs2010 directShow开发环境配置

    近来工作需要,要用dirrectShow写一个视频播放的demo验证自己的想法.开发环境配置了好久都没有成功,最后终于弄完,现在记录下来,以后有同学遇到同样问题,可以以此法解决. windows SD ...

  8. 基于Eclipse的Hadoop应用开发环境配置

    基于Eclipse的Hadoop应用开发环境配置 我的开发环境: 操作系统ubuntu11.10 单机模式 Hadoop版本:hadoop-0.20.1 Eclipse版本:eclipse-java- ...

  9. XMPP开发环境配置

    首先配置XMPP开发环境配置需要的软件 先安装xampp-osx-1.8.3-5-installer.dmg 安装成功后launchpad里会多出一个XAMPP(其他),点开里面的manager-os ...

随机推荐

  1. 8、hzk16的介绍以及简单的使用方法

    HZK16 字库是符合GB2312标准的16×16点阵字库,HZK16的GB2312-80支持的汉字有6763个,符号682个.其中一级汉字有3755个,按 声序排列,二级汉字有3008个,按偏旁部首 ...

  2. 魔兽争霸war3心得体会(一):UD的冰甲蜘蛛流

    玩war3好几年了,之前都是打打电脑,随便玩玩的.刚刚在浩方等平台上和人玩的时候,各种被虐,很难赢一局.从去年开始,才认真玩.思考下各种战术. 最初,使用的是兽族orc,后来觉得兽族不够厉害,玩到对战 ...

  3. 【t043】成绩查询

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 说起测试计算机的软件,排在第一位的就应当是SuperPi 了.它不但能良好的体现机器的整体水平,而且还 ...

  4. javascrit开发的基本代码结构的

    今天看到群里一个demo,简单看了一下. 然后自己就写了一个通用的javascrit开发的基本代码结构的js文件. 代码例如以下: (function($,win){ //定义全局变量对象 var o ...

  5. cmder显示UTF-8字体

    https://blog.csdn.net/x_iya/article/details/50627829 WIN+ALT+P打开配置 搜索chcp chcp 65001

  6. Java设计模式之从[暗黑破坏神存档点]分析备忘录(Memento)模式

    在大部分游戏中,都有一个"存档点"的概念.比如,在挑战boss前,游戏会在某个地方存档,假设玩家挑战boss失败,则会从这个存档点開始又一次游戏.因此,我们能够将这个"存 ...

  7. Android Gradle Plugin指南(三)——依赖关系、android库和多项目配置

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Librari ...

  8. ios app初始化和数据迁移的设计思路

    整体思路 一般app启动之后,都有一个初始化的过程. 此外兴许app升级,还须要考虑数据迁移.所以初始化和数据迁移的框架.在初期的版本号就要考虑好 总结一下我们的app採取的方案: 1.在持久化的文件 ...

  9. Ajax基础与Json应用(一)

    一.Ajax概念 Ajax是异步的javacript和xml 发音: Ajax [ˈeɪˌdʒæks] 二.同步与异步 传统方式(同步):一个请求对应一个回应,他们是同步的,回应不完成,没办法对这个页 ...

  10. 【codeforces 754A】Lesha and array splitting

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...