1. 安装
1.1 windows下安装openssl
恭喜,OpenSSL安装完成。
1.2 Linux下安装OpenSSL
-
下载安装包, 下载地址: https://github.com/openssl/openssl
-
源码安装包解压缩
-
.zip格式:
1
unzip openssl.zip
-
.tar.gz格式:
1
tar zxvf openssl.tar.gz
-
.tar.bz格式:
1
tar jxvf openssl.tar.gz
-
-
进入解压目录, 安装(可参考安装文件INSTALL):
1
2
3
4
5./config
make
make test (可选)
make install (使用管理员权限执行该命令)
sudo ldconfig 更新动态库配置文件 -
验证是否安装成功
1
openssl version -a
输出结果
1
2
3
4
5
6
7
8OpenSSL 1.1.1-pre6-dev xx XXX xxxx
built on: Mon Apr 23 10:53:02 2018 UTC
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/lib64/engines-1.1"
Seeding source: os-specific
2 VS中使用openssl
打开VS, 创建一个空的控制台应用程序
设置项目属性, 打开项目的属性面板
添加openssl头文件目录
添加openssl的库目录
配置完毕
3. 测试
###3.1 VS中的相关设置
打开项目属性窗口, 添加openssl相关的库到项目中
项目属性 -> 链接器 -> 输入 -> 附件依赖项
- libssl.lib
- libcrypto.lib
将openssl安装目录/bin目录下(C:\OpenSSL-Win32\bin)的两个动态库拷贝到工作目录下:
- libcrypto-1_1.dll
- libssl-1_1.dll
C:\OpenSSL-Win32 是我的openssl安装目录
如图所示:
![]()
测试代码如下:
1 |
|
1 | 输出结果: |
3.2 Linux下的使用和测试
-
编程应用程序, 测试代码如上, 文件名为
md5_test.c -
通过gcc编译源文件
1
2
3
4gcc md5_test.c -o md5 -lssl -lcrypto
执行该命令, 需要加载openssl的两个动态库
- libssl.so
- libcrypto.so -
查看生成的可执行程序 md5 运行时需要加载的动态库
1
ldd md5
输出结果:
1
2
3
4
5linux-vdso.so.1 => (0x00007ffdac781000)
libssl.so.1.1 => not found
libcrypto.so.1.1 => not found
libc.so.6 => /lib64/libc.so.6 (0x00007f365c3aa000)
/lib64/ld-linux-x86-64.so.2 (0x00007f365c782000)提示动态库 libssl.so.1.1 和 libcrypto.so.1.1 链接不到
-
通过find查找两个动态库的位置
1
2
3
4
5
6
7
8
9find / -name "libssl.so.1.1"
输出结果:
/root/openssl-master/libssl.so.1.1
/usr/local/lib64/libssl.so.1.1
find / -name "libcrypto.so.1.1"
输出结果:
/root/openssl-master/libcrypto.so.1.1
/usr/local/lib64/libcrypto.so.1.1通过对输出结果的分析, 得出结论动态库所在的目录为: /usr/local/lib64
-
解决问题, 将找到的动态库绝对路径添加到 /etc/ld.so.conf 文件中, 并使用管理员权限执行命令ldconfig
1
2
3
4sudo vim /etc/ld.so.conf
将/usr/local/lib64 添加到文件末尾, 保存退出配置文件
更新配置:
sudo ldconfig -
验证
1
2
3
4
5
6
7
8ldd md5
linux-vdso.so.1 => (0x00007ffcd8fe0000)
libssl.so.1.1 => /usr/local/lib64/libssl.so.1.1 (0x00007fb7aae7d000)
libcrypto.so.1.1 => /usr/local/lib64/libcrypto.so.1.1 (0x00007fb7aa9a2000)
libc.so.6 => /lib64/libc.so.6 (0x00007fb7aa5e1000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fb7aa3dd000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb7aa1c0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb7ab123000)