OpenSSL 加密库

更新时间:
2024-05-13
下载文档

OpenSSL 加密库

OpenSSL 简介

OpenSSL 是使用非常广泛的 SSL 的开源实现,并且因为其实现了 SSL 所用的各种加密算法,因此,OpenSSL 也是一个被广泛使用的加密函数库。

SSL(Secure Socket Layer)安全协议是 Netscape 公司首先提出,最初用在保护 Navigator 浏览器和 web 服务器之间的 HTTP 通信上。后来 SSL 协议成为传输层安全通信事实上的标准,并被 IETF 吸收改进为 TLS(Transport layer security)协议。

SSL/TLS 协议位于 TCP 协议和应用层协议之间,为传输双方提供认证、加密、完整性保护等安全服务。SSL 作为一个协议框架,通信双方可以选用合适的对称算法、公钥算法、MAC 算法等密码算法实现安全服务。

OpenSSL 包含了三部分:SSL 协议、密码算法库、应用程序库。SSL 协议部分完全实现和封装了 SSL 协议的三个版本和 TLS 协议,SSL 协议库的实现是在密码算法库的基础上实现的,使用该库可以建立一个 SSL 服务器和客户端。密码算法库是一个强大的密码算法库,它是 OpenSSL 的基础部分,实现了目前大部分主流的密码算法和标准。主要包含公开密钥算法、对称加密算法、散列函数算法、X509 数字证书标准、PKCS12、PKCS7 等标准。也可以将外部加密算法集成到 OpenSSL 里面,比如使用加密卡等。

应用程序部分是 OpenSSL 最生动的部分,也是 OpenSSL 使用入门部分。基于上述密码算法库和 SSL 协议库实现了很多实用和范例性的应用程序,涵盖了众多的密码学应用。主要包含了各种密码算法的加密程序、各种密钥的产生程序、SSL 连接测试程序及其他标准的应用程序。

OpenSSL 应用方式包含以下两种:

  • 基于 OpenSSL 指令的应用,比如创建 CA 证书。
  • 基于 OpenSSL 加密库和协议库的应用。

基于 OpenSSL 库的应用相比基于 OpenSSL 指令的应用工作量会大很多,但 OpenSSL 的应用绝大多数是基于 OpenSSL 库的方式,基于 OpenSSL 库的应用可以根据需求进行灵活选择,而不必受到 OpenSSL 指令限制。

OpenSSL 库移植

OpenSSL 的移植需要在 Linux 下完成。在进行本节工作前需要先建立 SylixOS 在 Linux 下的编译环境,参考 SylixOS 百科“Linux 环境开发指南”完成。

从 OpenSSL 的官方网站 http://www.openssl.org/ 下载 OpenSSL 源文件,将文件中的内容拷贝到 SylixOS 的工作空间目录下。

<linux>$ cd /home/user/sylixos_workspace       /* 进入 sylixos 工作空间            */
<linux>$ tar zxvf openssl-1.0.2a.tar.gz        /* 解压 OpenSSL                        */
<linux>$ mv openssl-1.0.2a openssl           /* 修改 OpenSSL 目录名             */
<linux>$ cd openssl                                /* 进入 OpenSSL 目录                */

配置 OpenSSL 开源版 ARM 工具链:

<linux>$ ./configure linux-armv4 -D__ARM_MAX_ARCH__=8 -cross-compile-prefix=arm-none-eabi- no-asm shared --prefix=/opt/arm-sylixos-openssl

Makefile 加入如下内容,SYLIXOS_BASE_PATH 工程路径根据实际情况修改:

SYLIXOS_BASE_PATH=/home/user/sylixos_workspace/sylixos-base
INCDIR     = $(SYLIXOS_BASE_PATH)/libsylixos/SylixOS
INCDIR    += $(SYLIXOS_BASE_PATH)/libsylixos/SylixOS/include
INCDIR    += $(SYLIXOS_BASE_PATH)/libsylixos/SylixOS/include/inet
SHLDIR     = $(SYLIXOS_BASE_PATH)/libsylixos/Debug
SHLDIR    += $(SYLIXOS_BASE_PATH)/libcextern/Debug
SYLIXOS_CFLAGS=-DSYLIXOS -DSYLIXOS_LIB $(addprefix -I,$(INCDIR)) -mcpu=arm920t -fmessage-length=0 -fno-short-enums
SYLIXOS_EXLIBS=-nostdlib $(addprefix -L,$(SHLDIR)) -lcextern -lvpmpdm -lm -lgcc

修改 CFLAG:

CFLAG = $(SYLIXOS_CFLAGS) ...

修改 PEX_LIBS 和 EX_LIBS:

PEX_LIBS    = -shared
EX_LIBS        = $(SYLIXOS_EXLIBS)

编译 OpenSSL:

<linux>$ make

安装 OpenSSL 需要具有超级用户权限,输入 su 切换到 root 用户:

<linux># su

修改环境变量 PATH:

<linux># export PATH=/usr/lib/gcc-arm-none-eabi/bin:$PATH

输入命令安装 OpenSSL 到指定目录/opt/arm-sylixos-openssl:

<linux># make install

部署 OpenSSL 到 SylixOS 目标板的/lib 目录下的 openssl 目录中,然后将 make install 的结果(位于/opt/arm-sylixos-openssl 目录)上传到 SylixOS 目标板的/lib/openssl 目录。

执行以下命令,完成 OpenSSL 的相关配置:

# cd /lib/openssl/lib                                  /* 创建符号链接                      */
# ln -s libssl.so.1.0.0 libssl.so
# ln -s libcrypto.so.1.0.0 libcrypto.so
# PATH=$PATH:/lib/openssl/bin                     /* 修改环境变量                   */
# LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib/openssl/lib
# varsave

OpenSSL 库验证

在 SylixOS 设备的控制台上输入 openssl x(x 是任意字符),控制台会输出当前 OpenSSL 支持的指令。

# openssl x
openssl:Error: 'x' is an invalid command.
Standard commands
asn1parse         ca                  ciphers           cms
crl                 crl2pkcs7          dgst                dh
dhparam            dsa                 dsaparam          ec
ecparam            enc                 engine              errstr
gendh              gendsa              genpkey            genrsa
nseq                ocsp                passwd             pkcs12
pkcs7              pkcs8               pkey                pkeyparam
pkeyutl             prime               rand                req
rsa                 rsautl              s_client           s_server
s_time              sess_id             smime               speed
spkac              srp                 ts                  verify
version            x509
Message Digest commands (see the `dgst' command for more details)
md4                       md5                       mdc2                  rmd160
sha                       sha1
Cipher commands (see the `enc' command for more details)
aes-128-cbc            aes-128-ecb             aes-192-cbc            aes-192-ecb
aes-256-cbc            aes-256-ecb           base64                 bf
bf-cbc                  bf-cfb                bf-ecb                 bf-ofb
camellia-128-cbc    camellia-128-ecb      camellia-192-cbc      camellia-192-ecb
camellia-256-cbc      camellia-256-ecb      cast                   cast-cbc
cast5-cbc            cast5-cfb            cast5-ecb             cast5-ofb
des                   des-cbc                des-cfb               des-ecb
des-ede               des-ede-cbc           des-ede-cfb           des-ede-ofb
des-ede3              des-ede3-cbc          des-ede3-cfb          des-ede3-ofb
des-ofb                des3                   desx                  idea
idea-cbc               idea-cfb               idea-ecb                idea-ofb
rc2                    rc2-40-cbc             rc2-64-cbc             rc2-cbc
rc2-cfb                rc2-ecb                rc2-ofb                 rc4
rc4-40                 seed                    seed-cbc                seed-cfb
seed-ecb               seed-ofb

输入 openssl version 输出当前 OpenSSL 的版本号:

# openssl version
OpenSSL 1.0.2a 19 Mar 2015
文档内容是否对您有所帮助?
有帮助
没帮助