1.openssl简介
在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。
SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
2.开发环境
Ubuntu20.04
openssl源码,下载地址:
3.编译
使用
接下来就是配置
X86平台
通过
通过如下命令生成Makefile文件:
1 | ./config --prefix=$(pwd)/build |
运行完之后会提示成功字样,这时文件夹多出了一个Makefile文件。
然后编译,这里的
1 | make -j4 |
编译完之后,执行如下命令将编译好的文件安装到上面指定的文件夹。
1 | make install |
这时去build文件中就能看到生成好的库文件和头文件,在不指定的情况下,会同时生成静态库和动态库。
ARM平台
通过
通过如下命令生成Makefile文件:
1 | ./Configure linux-generic32 no-asm no-async --prefix=$(pwd)/build-arm CROSS_COMPILE=arm-linux- |
运行完之后会提示成功字样,这时文件夹多出了一个Makefile文件。
然后编译,这里的
1 | make -j4 |
如果之前编译过,再编译会报错,只需要执行
编译完之后,执行如下命令将编译好的文件安装到上面指定的文件夹。
1 | make install |
这时去build-arm文件中就能看到生成好的库文件和头文件,在不指定的情况下,会同时生成静态库和动态库。
4.验证
我这里选择在X86平台验证一下SHA1算法,不同平台在使用openssl上几乎无差异。
直接上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> #include <string.h> #include <openssl/sha.h> int main () {<!-- --> int i; char c[] = "hello world"; unsigned char hash[20]; SHA1(c, strlen(c), hash); for (i = 0; i < 20; i++) printf ("%.2x", hash[i]); printf ("\n"); return 0; } |
使用动态库时,只要调用
在使用静态库时,还需要调用
运行结果: