在CentOS 6.8上编译OpenSSL 1.0.2k

        在 Linux 平台上用 C 、C++ 语言做开发时,有时需要用到 OpenSSL。CentOS(本文使用的版本是 64 位的 CentOS 6.8)在安装时包含 OpenSSL 的基本文件,比如在 /usr/bin 目录下有一个名为 openssl 的可执行文件,这些文件对于程序开发来说并不够用。在 CentOS 中可以使用命令:

    yum install openssl-devel

安装 OpenSSL 开发包。完成之后, OpenSSL 的 .h 头文件被放在 /usr/include 目录下,动态库文件 libssl.so 和 libcrypto.so 文件被在 /usr/lib64 目录下。使用命令

    openssl version

查看当前 OpenSSL 的版本号,看到的结果为:

OpenSSL 1.0.1e-fips 11 Feb 2013

        如果不想通过 yum 命令安装 OpenSSL 开发包,而是想使用 GCC 编译 OpenSSL 源码,可以到 https://www.openssl.org/ 下载。本文使用的 GCC 版本是 4.4.7,使用的 OpenSSL 版本是 1.0.2k,创建一个目录,将下载的压缩包 openssl-1.0.2k.tar.gz 解压缩到新创建的目录下,依次执行以下命令:

./config
make
make install
        就能完成安装。默认将把生成的文件放到 /usr/local/ssl 目录下,目录结构示意图如下:

        /usr/local/ssl/ ---- bin(目录)
                               |-- certs(目录)
                               |-- include(目录)
                               |-- lib(目录)
                               |-- man(目录)
                               |-- misc(目录)
                               |-- private(目录)
                               |-- openssl.cnf(文件)

        使用上面介绍的方法,只能生成静态库文件 libcrypto.a 和 libssl.a (这两个文件位于 /usr/local/ssl/lib 目录下),不能生成以 so 为后缀的动态库文件。如果需要生成动态库文件,假定希望将生成的文件放到 /usr/local/openssl-1.0.2k 目录下,可以采用下面的办法:
1) 在 /usr/local 目录下创建子目录 openssl-1.0.2k
2) 到 OpenSSL 源文件所在的目录下,如果刚才生成过静态库,则需要执行下面的命令进行清理操作:
    make clean
    执行命令:
    ./config -fPIC --prefix=/usr/local/openssl-1.0.2k shared
3) 执行以下命令:
    make
    make install
   这样就可以完成编译了。可以在执行 make install 之前执行 make test 做一下检测,但是检测花费的时间较长。安装完成之后,OpenSSL 的 .h 头文件放在 /usr/local/openssl-1.0.2k/include 目录下,在 /usr/local/openssl-1.0.2k/lib 目录下包含以下库文件:
    libcrypto.a, libcrypto.so, libcrypto.so.1.0.0, libssl.a, libssl.so, libssl.so.1.0.0
   此时新生成文件的目录结构示意图如下:

        /usr/local/openssl-1.0.2k/ ---- bin(目录)
                                                  |-- include(目录)
                                                  |-- lib(目录)
                                                  |-- ssl/ ---- certs(目录)
                                                              |-- man(目录)
                                                              |-- misc(目录)
                                                              |-- private(目录)
                                                              |-- openssl.cnf(文件)

你可能感兴趣的:(OpenSSL,linux,openssl,centos)