Linux 中通过包管理安装 openssl 需要注意的事项

114 阅读1分钟

简介

前面一篇文章介绍了源码编译安装 OpenSSL,但其实编译安装由于其步骤比较麻烦,并不是最常见的安装方式,相反,通过包管理工具 (package manager)安装 OpenSSL 更常见,这篇文章就介绍一下这种安装方式需要注意的事项。

包管理安装

每个 Linux 发行版通常都有自己的包管理工具,比如 Debian 系的系统使用 apt,RedHat 系的使用 yum,Arch 系的使用 pacman 等等。

以 Ubuntu 中的 OpenSSL 安装命令为例:

apt-cache show openssl
apt-get install openssl

OpenSSL 动态库:

系统中的许多软件都依赖 OpenSSL 提供的动态库文件,所以,一旦我们打算升级系统的 OpenSSL 版本,请千万要注意对整个系统的影响。因为这意味着要么我们要维护两个版本的 OpenSSl 动态库,要么,我们需要把依赖 OpenSSL 的软件也一并升级。然后统一使用新的动态库。

包管理模式下,动态库是单独安装的:

apt-get install libssl-dev

动态库(libssl-dev)与二进制的 openssl 命令主要区别就是多了 .h 及 .so 文件。 我们可以通过 apt-file list 命令来查看安装包中所有的文件:

(1) openssl

$ apt-file list openssl
openssl: /etc/ssl/openssl.cnf
openssl: /usr/bin/c_rehash
openssl: /usr/bin/openssl
openssl: /usr/lib/ssl/certs
openssl: /usr/lib/ssl/misc/CA.pl
openssl: /usr/lib/ssl/misc/tsget
openssl: /usr/lib/ssl/misc/tsget.pl
openssl: /usr/lib/ssl/openssl.cnf
openssl: /usr/lib/ssl/private
...

(2) libssl-dev

libssl-dev: /usr/include/openssl/aes.h
libssl-dev: /usr/include/openssl/asn1.h
libssl-dev: /usr/include/openssl/asn1_mac.h
libssl-dev: /usr/include/openssl/asn1err.h
libssl-dev: /usr/include/openssl/asn1t.h
libssl-dev: /usr/include/openssl/async.h
libssl-dev: /usr/include/openssl/asyncerr.h
libssl-dev: /usr/include/openssl/bio.h
...
libssl-dev: /usr/include/openssl/x509.h
libssl-dev: /usr/include/openssl/x509_vfy.h
libssl-dev: /usr/include/openssl/x509err.h
libssl-dev: /usr/include/openssl/x509v3.h
libssl-dev: /usr/include/openssl/x509v3err.h
libssl-dev: /usr/include/x86_64-linux-gnu/openssl/opensslconf.h
libssl-dev: /usr/lib/x86_64-linux-gnu/libcrypto.a
libssl-dev: /usr/lib/x86_64-linux-gnu/libcrypto.so
libssl-dev: /usr/lib/x86_64-linux-gnu/libssl.a
libssl-dev: /usr/lib/x86_64-linux-gnu/libssl.so
libssl-dev: /usr/lib/x86_64-linux-gnu/pkgconfig/libcrypto.pc
libssl-dev: /usr/lib/x86_64-linux-gnu/pkgconfig/libssl.pc
libssl-dev: /usr/lib/x86_64-linux-gnu/pkgconfig/openssl.pc
libssl-dev: /usr/share/doc/libssl-dev/changelog.Debian.gz
...

可以看到 libssl-dev 多了

  • 头文件,在 /usr/include/openssl/usr/include/x86_64-linux-gnu/openssl 目录
  • .a.so 文件,在 /usr/lib/x86_64-linux-gnu/ 目录
  • .pc 文件,在 /usr/lib/x86_64-linux-gnu/pkgconfig/ 目录
提示:

如果是自己编译的 openssl,虽然也有上述头文件和 .a, .so 等文件,但没有 .pc 文件,我们需要手动去拷贝到指定位置。

下面介绍如何自己编写一个 openssl.pc 文件

/usr/lib/x86_64-linux-gnu/pkgconfig/libssl.pc

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib/x86_64-linux-gnu
includedir=${prefix}/include

Name: OpenSSL-libssl
Description: Secure Sockets Layer and cryptography libraries
Version: 1.1.1j
Requires.private: libcrypto
Libs: -L${libdir} -lssl
Cflags: -I${includedir}

pkg-config 默认目录 path

$ pkg-config --variable pc_path pkg-config

-   /usr/local/lib/x86_64-linux-gnu/pkgconfig
-   /usr/local/lib/pkgconfig
-   /usr/local/share/pkgconfig
-   /usr/lib/x86_64-linux-gnu/pkgconfig
-   /usr/lib/pkgconfig
-   /usr/share/pkgconfig

全文完!

如果你喜欢我的文章,欢迎关注我的微信公众号 deliverit。