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、摄像头驱动_Linux的V4L2架构分析

    V4L2架构可以参考  linux-3.4.2\Documentation\video4linux\v4l2-framework.txt V4L2全名为Video For Linux 2,它是针对Li ...

  2. WPF遍历当前容器中某种控件的方法

    原文:WPF遍历当前容器中某种控件的方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/79 ...

  3. [Preact] Use State and Props in the Component Render Function

    Preact offers, in addition to the regular component API from React, the ability to access both props ...

  4. 使用RxPermissions(基于RxJava2)

    使用RxPermissions(基于RxJava2) 0. 背景 Android 6.0 (API level 23)中.将权限分成了两类.一类是Install权限(称之为安装时权限).还有一类是Ru ...

  5. fastjson排序 Map多层嵌套转换自动排序问题终极解决方案

    阅读更多 最近项目中用到了fastjson(1.2.15)需要将前端多层嵌套json转换为map,由于map的无序性,想了很多办法,最终找到使用 Map m= JSONArray.parseObjec ...

  6. php javascript的ajax

    先说基础一点的get类型的ajax function loadXMLDoc() { var xmlhttp;//首先判断浏览器是否支持xmlhttprequest,因为ie56不是这个对象,是acti ...

  7. ArcGIS Engine 编辑介绍

    转自原文 ArcGIS Engine 编辑介绍 IWorkspaceEdit接口是ArcGIS Engine 实现空间数据编辑的重要接口,它让程序启动或者停止一个编辑流程,在这个编辑流程内,可以对数据 ...

  8. Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...

  9. php课程 4-17 数组键值操作函数有哪些

    php课程 4-17  数组键值操作函数有哪些 一.总结 一句话总结:多看学习视频 1.php中数组的键值操作函数有哪6个? • array_values();获取数组中的值• array_keys( ...

  10. 深度学习代码注解(一)—— mnistdeepauto

    clear all close all %% 1:参数设置 maxepoch=10; %In the Science paper we use maxepoch=50, but it works ju ...