当前环境

  • 系统:win10
  • 开发工具: vs2019
  • openssl版本:Win64 OpenSSL v1.1.1i

安装OpenSSL有两种方法,第一种为下载OpenSSL源代码并由自己编译后使用;第二种为下载已编译好的安装包,安装后直接可以使用。因第一种方法十分繁琐,需要安装Ruby进行编译,同时编译过程中可能产生各种各种的问题,因此在此采用第二种方法

开始

1、从http://slproweb.com/products/Win32OpenSSL.html下载已经编译好的包含 lib 和 include 文件的安装包

  • 此处有Win32和Win64可选,这里的位数指的是你调用OpenSSL开发出来的软件的位数版本,而不是你计算机的位数。
  • 开发32位软件选择Win32,64位选择Win64,如果同时需要开发32位和64位的则下载两个
  • 注意,不要下载 light 版本,因为 light 版本不带 lib 和 include。如下图:

    2、下载完后打开安装,选择安装位置,64位和32位不要安装在同一个目录下。我这里安装到 C:\Users\oceanstar\source\others\OpenSSL-Win64


    3、选择把dll复制到OpenSSL目录下(主要是为了以后好找,如果选择复制到Windows系统目录下,天知道复制到哪里去了。。。)

openssl是集成在服务器中还是java代码中 openssl iv_#pragma


openssl是集成在服务器中还是java代码中 openssl iv_SSL_02

OpenSSL 就这样安装完毕了,如果你按网上自己编译的方法去自己编译,恐怕要耗上你至少半天的时间。我们来看看他的目录结构。

  • bin:包含了测试程序、存储证书和密钥的文件(*.pem)。
  • include:包含了所有的头文件(例如:aes.h、md5.h)。
  • lib:包含了所有的库文件(例如:libeay32.lib、ssleay32.lib)。

使用

1、控制台应用程序

openssl是集成在服务器中还是java代码中 openssl iv_SSL_03


openssl是集成在服务器中还是java代码中 openssl iv_bc_04


openssl是集成在服务器中还是java代码中 openssl iv_bc_05


2、右击工程,选择“属性”

openssl是集成在服务器中还是java代码中 openssl iv_SSL_06


openssl是集成在服务器中还是java代码中 openssl iv_bc_07


3、选中“Include Directories”,点击右边的下拉按钮,点击“Edit…”

openssl是集成在服务器中还是java代码中 openssl iv_bc_08


openssl是集成在服务器中还是java代码中 openssl iv_bc_09


4、同样的方法,将安装目录下的“lib”文件夹添加到“Library Directories”中

openssl是集成在服务器中还是java代码中 openssl iv_#pragma_10


openssl是集成在服务器中还是java代码中 openssl iv_SSL_11


5、将OpenSSL安装目录下bin文件夹中的“libcrypto-1_1-x64.dll”和“libssl-1_1-x64.dll”(名字后面的版本号可能因更新而不同)复制到工程目录下

openssl是集成在服务器中还是java代码中 openssl iv_SSL_12


openssl是集成在服务器中还是java代码中 openssl iv_#pragma_13


6、将工程平台调整为自己需要的平台,这里演示x64平台

openssl是集成在服务器中还是java代码中 openssl iv_SSL_14


7、添加lib文件

7.1、方法一

在代码中添加

#pragma comment(lib,"libssl.lib")
#pragma comment(lib,"libcrypto.lib")

7.2、方法二

  • 在“Property Pages->Linker->Input->Additional Dependencies”添加libssl.lib和libcrypto.lib

8、测试

#pragma comment(lib, "libssl.lib")
#pragma comment(lib, "libcrypto.lib")
#include <iostream>
#include <stdio.h>

#include "openssl/ssl.h"

int main()
{
    SSL_CTX* ctx = NULL;
    const SSL_METHOD* meth = NULL;

    OpenSSL_add_ssl_algorithms();    // 初始化
    SSL_load_error_strings();        // 为打印调试信息作准备
    meth = TLSv1_client_method();    // 采用什么协议(SSLv2/SSLv3/TLSv1)在此指定
    ctx = SSL_CTX_new(meth);
    printf("%X\n", ctx);

    return 0;
}

openssl是集成在服务器中还是java代码中 openssl iv_SSL_15


openssl是集成在服务器中还是java代码中 openssl iv_SSL_16


openssl是集成在服务器中还是java代码中 openssl iv_bc_17


解决:将OpenSSL安装目录下bin文件夹中的“libcrypto-1_1-x64.dll”和“libssl-1_1-x64.dll”(名字后面的版本号可能因更新而不同)复制到以运行目录下

openssl是集成在服务器中还是java代码中 openssl iv_#pragma_18

最终:执行成功