OpenSSL非常强大,从加密/解密到证书的创建与管理,几乎无所不能,这篇文章简单介绍一下openssl的概要信息以及openssl命令的使用示例。
OpenSSL的概要信息如下表所示:
项目 说明 官网 https://www.openssl.org/ 开源/闭源 开源 源码管理地址 https://github.com/openssl/openssl License类别 Apache License 2.0 开发语言 C、Perl 当前稳定版本 1.1.1d (2019/9/10) 架构设计当前版本的OpenSSL整体主要由四个部分组成:
- Application Component:应用组件
- TLS Component:TLS组件
- Crypto Component:加密算法组件
-
Engines Component:引擎组件
详细如下图所示,可以看到应用组件依赖于TLS组件与加密算法组件,而TLS组件也依赖于加密算法组件,而加密算法组件依赖于引擎组件。
根据OpenSSL官方对于架构的蓝图规划,在当前的1.1.1之后将会进行大的变动,预计在3.0.0版中完成主要功能的演进,一部分功能延续到4.0.0,目前设计和公示的整体架构如下所示:
其中最大的影响之一在于Engine组件完成其历史使命,将会由Provide来代替,但是对于上层的既存的应用比如openssl命令来说,影响并没有这么大,OpenSSL官方规划目标是在3.0.0的版本中对于大量的既存应用组件尽可能的少影响,对于大部分应用做到只需要重新编译即可。
openssl是OpenSSL架构中应用层的具体体现,本位开始的示例,使用的openssl版本为1.1.1d的LTS版本,此版本维护周期大概至2023年。
[root@liumiaocn ~]# openssl version OpenSSL 1.1.1d 10 Sep 2019 [root@liumiaocn ~]#概要使用方法
使用openssl help可以列出命令的常用子命令
[root@liumiaocn ~]# openssl help Standard commands asn1parse ca ciphers cms crl crl2pkcs7 dgst dhparam dsa dsaparam ec ecparam enc engine errstr gendsa genpkey genrsa help list nseq ocsp passwd pkcs12 pkcs7 pkcs8 pkey pkeyparam pkeyutl prime rand rehash req rsa rsautl s_client s_server s_time sess_id smime speed spkac srp storeutl ts verify version x509 Message Digest commands (see the `dgst' command for more details) blake2b512 blake2s256 gost md4 md5 mdc2 rmd160 sha1 sha224 sha256 sha3-224 sha3-256 sha3-384 sha3-512 sha384 sha512 sha512-224 sha512-256 shake128 shake256 sm3 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 aria-128-cbc aria-128-cfb aria-128-cfb1 aria-128-cfb8 aria-128-ctr aria-128-ecb aria-128-ofb aria-192-cbc aria-192-cfb aria-192-cfb1 aria-192-cfb8 aria-192-ctr aria-192-ecb aria-192-ofb aria-256-cbc aria-256-cfb aria-256-cfb1 aria-256-cfb8 aria-256-ctr aria-256-ecb aria-256-ofb 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 sm4-cbc sm4-cfb sm4-ctr sm4-ecb sm4-ofb [root@liumiaocn ~]#使用示例
这里举几个最为简单的使用,比如对于liumiaocn这个字符串使用不同算法进行加密:
[root@liumiaocn ~]# echo -n "liumiaocn" |openssl md5 (stdin)= 51179b257c8c176c3f7141ae7dceab98 [root@liumiaocn ~]# [root@liumiaocn ~]# echo -n "liumiaocn" |openssl sha256 (stdin)= 801762886944d06c7c9cde7aa66b766ae30f31dce69d00ac0d59c67d62a3a36e [root@liumiaocn ~]# [root@liumiaocn ~]# echo -n "liumiaocn" |openssl base64 bGl1bWlhb2Nu [root@liumiaocn ~]#
base64不是是加密算法,只是编码方式,但是架不住结果长得像加密后的内容。我们使用base64或者sha256sum也可以验证一下openssl命令是否正确
[root@liumiaocn ~]# echo -n "liumiaocn" |base64 bGl1bWlhb2Nu [root@liumiaocn ~]# echo -n "liumiaocn" |sha256sum 801762886944d06c7c9cde7aa66b766ae30f31dce69d00ac0d59c67d62a3a36e - [root@liumiaocn ~]#
可以看到,结果是一致的。当然openssl当然完全不止于这点功能,我们将在后续的内容中进一步介绍其常用的使用方法。