ZeroTermux 内置 OpenSSL 命令手册详解:密码算法、证书管理与实战命令全解析

原创2026-10-13 13:19:261,325 阅读
文章标签:移动开发开发工具

ZeroTermux 内置 OpenSSL 命令手册详解:密码算法、证书管理与实战命令全解析

OpenSSL 是互联网上最广泛使用的安全传输加密库,被网银、在线支付、电商网站、门户网站、电子邮件等重要网站普遍采用,也是 Linux 终端中处理哈希、对称/非对称加密、数字签名与 X.509 证书管理的事实标准工具。本文以 ZeroTermux 内置的 openssl.md 命令手册为主体,结合仓库源码深入讲解 OpenSSL 的算法体系、运行模式、密钥证书管理机制与十余条可复制的实战命令,帮助读者在 Termux 类终端环境中快速掌握 OpenSSL 的核心用法。

OpenSSL 是什么

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。它本质上由三大部分构成:

  • 密码算法库:实现对称加密、非对称加密、信息摘要等底层密码原语;
  • SSL 协议库:实现 SSL/TLS 安全传输协议,为网络通信提供加密与身份认证;
  • 应用程序(命令行工具):即 openssl 命令本身,将上述能力封装成可交互、可批处理的操作入口。

OpenSSL 整个软件包的目录结构也是围绕这三个功能部分规划的。在 ZeroTermux 的 cmd 文档目录 中,openssl.md 与 ssh.md、ssh-keygen.md、rsync.md、curl.md 等命令手册并列存放,构成一套完整的 Linux 命令检索与学习体系。

两种运行模式

OpenSSL 提供两种运行模式:

  • 交互模式:直接输入 openssl 回车即可进入,适合逐条测试命令、查看算法支持列表或进行交互式密钥操作;
  • 批处理模式:输入带命令选项的 openssl <子命令> [选项...],一次性完成指定任务,适合写入脚本自动化执行。

ZeroTermux 终端中推荐优先使用批处理模式,例如计算文件哈希、生成密钥对、加解密文件等操作均可单行完成;需要探索可用子命令时,可在交互模式下输入 help 或使用 openssl list 查看。

算法体系全景

对称加密算法

OpenSSL 一共提供 8 种对称加密算法,其中 7 种是分组加密算法,仅有的一种流加密算法是 RC4。这 7 种分组加密算法分别是 AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持四种常用的分组密码加密模式:

加密模式 全称 特点
ECB 电子密码本模式 每块独立加密,简单但相同明文产生相同密文
CBC 加密分组链接模式 密文块之间链式关联,是文件加密最常用的模式
CFB 加密反馈模式 将密文反馈进加密流,可对数据流逐段加密
OFB 输出反馈模式 将加密输出反馈进加密流,适合流式数据

其中 AES 使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是 128 位,其它算法使用的则是 64 位。事实上,DES 算法里面不仅仅是常用的 DES 算法,还支持三个密钥和两个密钥的 3DES 算法(即 des-ede3、des-ede 系列)。

非对称加密算法

OpenSSL 一共实现了 4 种非对称加密算法,包括 DH、RSA、DSA 和椭圆曲线算法(EC):

  • DH 算法:一般用于密钥交换,双方基于公开参数协商出共享密钥;
  • RSA 算法:既可以用于密钥交换,也可以用于数字签名,如果你能够忍受其缓慢的速度,也可以用于数据加密;
  • DSA 算法:一般只用于数字签名;
  • EC(椭圆曲线)算法:以更短的密钥长度提供相当的安全强度。

信息摘要算法

OpenSSL 实现了 5 种信息摘要算法,分别是 MD2、MD5、MDC2、SHA(SHA1)和 RIPEMD。SHA 算法事实上包括了 SHA 和 SHA1 两种信息摘要算法;此外,OpenSSL 还实现了 DSS 标准中规定的两种信息摘要算法 DSS 和 DSS1(DSS1 即以 SHA1 为哈希基础的 DSA 签名摘要)。现代应用中 SHA-1 已逐渐被 SHA-256 等更安全的摘要取代,但在验证旧签名格式时仍可能遇到。

密钥和证书管理(PKI)

密钥和证书管理是 PKI(公钥基础设施)的一个重要组成部分,OpenSSL 为此提供了丰富的功能,支持多种标准:

  1. ASN.1 编解码:实现了 ASN.1 的证书和密钥相关标准,提供对证书、公钥、私钥、证书请求以及 CRL 等数据对象的 DER、PEM 和 BASE64 编解码功能;
  2. 密钥对生成:提供产生各种公开密钥对和对称密钥的方法、函数和应用程序,并提供对公钥和私钥的 DER 编解码功能;
  3. 私钥封装:实现私钥的 PKCS#12 和 PKCS#8 编解码功能,并在标准中提供对私钥的加密保护功能,使密钥可以安全地进行存储和分发;
  4. 证书标准:实现证书的 X.509 标准编解码、PKCS#12 格式编解码以及 PKCS#7 编解码功能;
  5. 证书管理:提供一种文本数据库,支持证书管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。

事实上,OpenSSL 提供的 CA 应用程序 就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。这意味着在零终端环境中,你可以独立搭建自己的私有 CA 并为本地服务签发证书,而不必依赖外部证书机构。

实战命令详解

以下命令均可在 ZeroTermux 的 Termux 终端(pkg install openssl 安装后)中直接运行,# 为提示符。

1、消息摘要算法应用例子

用 SHA1 算法计算文件 file.txt 的哈希值,输出到 stdout:

# openssl dgst -sha1 file.txt

用 SHA1 算法计算文件 file.txt 的哈希值,输出到文件 digest.txt:

# openssl sha1 -out digest.txt file.txt

用 DSS1(SHA1)算法为文件 file.txt 签名,输出到文件 dsasign.bin。签名的 private key 必须为 DSA 算法产生,保存在文件 dsakey.pem 中:

# openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt

用 DSS1 算法验证 file.txt 的数字签名 dsasign.bin,验证的 private key 为 DSA 算法产生的文件 dsakey.pem:

# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt

用 SHA1 算法为文件 file.txt 签名,输出到文件 rsasign.bin,签名的 private key 为 RSA 算法产生的文件 rsaprivate.pem:

# openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt

用 SHA1 算法验证 file.txt 的数字签名 rsasign.bin,验证的 public key 为 RSA 算法生成的 rsapublic.pem:

# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt

要点提示:dgst 是统一的摘要/签名子命令,-sign 用私钥签名、-prverify 用私钥文件验证签名(DSA 场景),-verify 用公钥文件验证签名(RSA 场景);-signature 指定签名文件,-out 指定输出文件。若未指定 -out,结果默认输出到 stdout。

2、对称加密应用例子

用 DES3 算法的 CBC 模式加密文件 plaintext.doc,加密结果输出到文件 ciphertext.bin:

# openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin

用 DES3 算法的 OFB 模式解密文件 ciphertext.bin,提供的口令为 trousers,输出到文件 plaintext.doc。注意:因为模式不同,该命令不能对以上的文件进行解密:

# openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers

用 Blowfish 的 CFB 模式加密 plaintext.doc,口令从环境变量 PASSWORD 中取,输出到文件 ciphertext.bin:

# openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD

给文件 ciphertext.bin 用 base64 编码,输出到文件 base64.txt:

# openssl base64 -in ciphertext.bin -out base64.txt

用 RC5 算法的 CBC 模式加密文件 plaintext.doc,输出到文件 ciphertext.bin,salt、key 和初始化向量(iv)在命令行指定:

# openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29

参数说明:

参数 含义
enc 通用对称加密子命令,后跟具体算法名(-des3、-des-ede3-ofb、bf-cfb、rc5 等)
-salt 加入随机盐值,防止相同口令产生相同密文,显著提升安全性
-d 解密模式;不指定则默认加密
-in / -out 输入文件 / 输出文件
-pass pass:xxx 从命令行直接指定口令;-pass env:VAR 从环境变量读取,避免口令出现在进程列表
-S 指定十六进制 salt 值
-K 指定十六进制密钥
-iv 指定十六进制初始化向量

注意加解密必须使用相同的算法、模式和口令才能成功;文档中的示例特意展示了“模式不同导致无法解密”这一易错点。

3、Diffie-Hellman 应用例子

使用生成因子 2 和随机的 1024-bit 素数产生 Diffie-Hellman 参数,输出保存到文件 dhparam.pem:

# openssl dhparam -out dhparam.pem -2 1024

从 dhparam.pem 中读取 Diffie-Hellman 参数,以 C 代码的形式输出到 stdout:

# openssl dhparam -in dhparam.pem -noout -C

说明:dhparam 用于生成和操作 DH 密钥交换参数;-2 指定生成因子(generator)为 2,1024 为素数位数,-noout 表示不输出参数本身的 PEM 文本,-C 表示以 C 语言结构体形式输出,便于直接嵌入到 C 程序中。

4、DSA 应用例子

生成 1024 位 DSA 参数集,并输出到文件 dsaparam.pem:

# openssl dsaparam -out dsaparam.pem 1024

使用参数文件 dsaparam.pem 生成 DSA 私钥,采用 3DES 加密后输出到文件 dsaprivatekey.pem:

# openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem

使用私钥 dsaprivatekey.pem 生成公钥,输出到 dsapublickey.pem:

# openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem

从 dsaprivatekey.pem 中读取私钥,解密并输入新口令进行加密,然后写回文件 dsaprivatekey.pem:

# openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin

参数说明:gendsa 基于参数文件生成 DSA 私钥并可用 -des3 加密保护;dsa 子命令负责 DSA 密钥的读取、格式转换与口令更新,-pubout 输出公钥,-passin 提示输入旧口令以便解密重加密。

5、RSA 应用例子

产生 1024 位 RSA 私钥,用 3DES 加密它,口令为 trousers,输出到文件 rsaprivatekey.pem:

# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024

从文件 rsaprivatekey.pem 读取私钥,用口令 trousers 解密,生成的公钥输出到文件 rsapublickey.pem:

# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem

用公钥 rsapublickey.pem 加密文件 plain.txt,输出到文件 cipher.txt:

# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt

使用私钥 rsaprivatekey.pem 解密密文 cipher.txt,输出到文件 plain.txt:

# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt

用私钥 rsaprivatekey.pem 给文件 plain.txt 签名,输出到文件 signature.bin:

# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin

用公钥 rsapublickey.pem 验证签名 signature.bin,输出到文件 plain.txt:

# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain

参数说明:genrsa 生成 RSA 私钥,-des3 用 3DES 加密私钥文件,-passout 指定写入时口令;rsa 负责密钥读取与公钥导出,-passin 指定读取私钥时的口令;rsautl 直接对数据进行加解密与签名操作,-pubin 表示使用公钥文件(默认使用私钥),-inkey 指定密钥文件。

6、S/MIME 加密邮件应用例子

从 X.509 证书文件 cert.pem 中获取公钥,用 3DES 加密 mail.txt,输出到文件 mail.enc:

# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem

从 X.509 证书文件 cert.pem 中获取接收人的公钥,用私钥 key.pem 解密 S/MIME 消息 mail.enc,结果输出到文件 mail.txt:

# openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt

cert.pem 为 X.509 证书文件,用私钥 key.pem 为 mail.txt 签名,证书被包含在 S/MIME 消息中,输出到文件 mail.sgn:

# openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn

验证 S/MIME 消息 mail.sgn,输出到文件 mail.txt,签名者的证书应该作为 S/MIME 消息的一部分包含在 mail.sgn 中:

# openssl smime -verify -in mail.sgn -out mail.txt

参数说明:smime 子命令实现 S/MIME 加密邮件的加密、解密、签名与验证,-recip 指定接收人证书、-signer 指定签名证书、-inkey 指定私钥;这组命令正是 OpenSSL 中 X.509 证书管理与 PKCS#7 编解码能力的直接体现。

在 ZeroTermux 中查看 OpenSSL 手册

openssl.md 并不是孤立存在的静态文件,它在 ZeroTermux 中被一套完整的内置命令文档系统所承载与渲染:

  • 文档存放:所有命令手册统一存放于 app/src/main/assets/cmd/ 目录,每个命令对应一个 .md 文件,openssl.md 即其中之一;
  • 入口与加载:在终端侧边栏点击“命令”入口会弹出 CommandDialog,其源码 CommandDialog.java 通过 AssetManager.list("cmd")(第 107 行)读取全部命令列表,输入关键词时按名称过滤并排序(第 146-160 行),点击命令条目后调用 showCmdDetail()(第 249-262 行)读取 cmd/%s 对应文件;
  • 渲染机制:文档采用 commonmark 解析器将 Markdown 转为 HTML,再通过 WebView 加载渲染(第 253-257 行),因此手册中的标题、表格、代码块都能以排版良好的形式呈现,并支持 WebView 的缩放查看;
  • 界面布局:对应的 dialog_command.xml 定义了搜索输入框 text_input(第 28 行)、命令列表 recyclerView(第 39 行)与文档展示区 web_view(第 61 行),用户可先搜索后阅读,形成“检索—阅读”闭环;
  • 功能入口:终端弹出窗中“命令”按钮在 BoomWindow.java 中实例化并弹出 CommandDialog;此外 CommandDefinitionCLickConfig.java 中的“命令定义”菜单会打开 BoomCommandDialog(见 BoomCommandDialog.kt),用于管理用户自定义命令列表。

换言之,在 ZeroTermux 中打开 openssl 手册,本质上是读取仓库内 openssl.md 这一 Markdown 文档并在 WebView 中渲染展示——你可以在任意编辑器中打开该文件,获得与 App 内一致的完整内容。

使用注意事项

  • OpenSSL 曾曝出严重安全漏洞(如心脏滴血等),影响大量通过 SSL 协议加密的网站。由于它是互联网应用最广泛的安全传输方法,被网银、在线支付、电商网站、门户网站、电子邮件等重要网站广泛使用,因此保持 OpenSSL 版本更新、及时修复安全漏洞至关重要。在 Termux 中可通过 pkg upgrade openssl 保持最新;
  • 示例中的密钥长度(1024 位 RSA/DSA/DH)与 MD5、SHA-1 等摘要算法属于教学演示场景,生产环境建议使用更长的密钥(如 RSA 2048/4096 位、EC 256 位)与更安全的哈希算法;
  • 所有示例命令以仓库内置文档为准,实际可用子命令与参数以你所安装的 OpenSSL 版本 openssl help 输出为准。

总结

从消息摘要、对称加密、非对称加密到 DH 密钥交换、DSA/RSA 签名与 S/MIME 邮件加密,openssl.md 覆盖了 OpenSSL 最核心、最常用的操作场景;结合 ZeroTermux 的 CommandDialog 源码可以看到,这份手册已深度集成到 App 的命令检索与阅读体系中。无论你是需要在终端中快速计算文件哈希、为本地服务签发证书,还是搭建私有 CA,这套内置手册都是一份开箱即用的权威参考。

登录后查看全文
ZeroTermux