openssl - OpenSSL 命令行程序
概要
openssl 命令 [ 选项 ... ] [ 参数 ... ]
openssl no-XXX [ 选项 ]
openssl -help | -version
描述
OpenSSL 是一种密码学工具包,它实现了安全套接字层 (SSL) 和传输层安全 (TLS) 网络协议,以及它们所需的各种相关密码学标准。
openssl 程序是一个命令行程序,用于从 shell 中使用 OpenSSL 的 crypto 库中的各种密码学函数。它可以用于:
o 创建和管理私钥、公钥和参数
o 公钥密码操作
o 创建 X.509 证书、CSR 和 CRL
o 计算消息摘要和消息认证码
o 使用密码进行加密和解密
o SSL/TLS 客户端和服务器测试
o 处理 S/MIME 签名或加密的邮件
o 时间戳请求、生成和验证
命令摘要
openssl 程序提供各种命令(上述“概要”中的命令)。每个命令可以有许多选项和参数,如上所示。
大多数标准子命令的详细文档和用例可用(例如,openssl-x509(1))。可以使用 openssl-list(1) 命令来列出子命令。
命令 no-XXX 用于测试是否可用具有指定名称的命令。如果不存在名为 XXX 的命令,则返回 0(成功)并打印 no-XXX;否则,返回 1 并打印 XXX。在两种情况下,输出都发送到 stdout,并且没有任何内容打印到 stderr。始终忽略任何额外的命令行参数。由于对于每个密码,都存在一个同名的命令,因此这提供了一种简单的方法,使 shell 脚本可以测试 openssl 程序中密码的可用性。(no-XXX 无法检测伪命令,例如 quit、list 或 no-XXX 本身。)
配置选项
许多命令使用外部配置文件来设置其某些或所有参数,并具有 -config 选项以指定该文件。默认文件名为 openssl.cnf,位于默认证书存储区域中,可以使用 openssl-version(1) 命令(使用 -d 或 -a 选项)来确定该区域。可以使用环境变量 OPENSSL_CONF 来指定不同的文件位置,或禁用加载配置(使用空字符串)。
除其他内容外,配置文件可用于加载模块并指定用于生成证书和随机数的参数。有关详细信息,请参阅 config(5)。
标准命令
asn1parse
解析 ASN.1 序列。
ca 证书颁发机构 (CA) 管理。
ciphers
密码套件描述确定。
cms CMS(密码消息语法)命令。
crl 证书吊销列表 (CRL) 管理。
crl2pkcs7
CRL 到 PKCS#7 转换。
dgst
消息摘要计算。MAC 计算已被 openssl-mac(1) 取代。
dhparam
Diffie-Hellman 参数的生成和管理。已被 openssl-genpkey(1) 和 openssl-pkeyparam(1) 取代。
dsa DSA 数据管理。
dsaparam
DSA 参数生成和管理。已被 openssl-genpkey(1) 和 openssl-pkeyparam(1) 取代。
ec EC(椭圆曲线)密钥处理。
ecparam
EC 参数操作和生成。
enc 加密、解密和编码。
engine
引擎(可加载模块)信息和操作。
errstr
错误编号到错误字符串转换。
fipsinstall
FIPS 配置安装。
gendsa
从参数生成 DSA 私钥。已被 openssl-genpkey(1) 和 openssl-pkey(1) 取代。
genpkey
生成私钥或参数。
genrsa
生成 RSA 私钥。已被 openssl-genpkey(1) 取代。
help
显示命令选项信息。
info
显示内置到 OpenSSL 库中的各种信息。
kdf 密钥派生函数。
list
列出算法和功能。
mac 消息身份验证码计算。
nseq
创建或检查 Netscape 证书序列。
ocsp
在线证书状态协议 (OCSP) 命令。
passwd
生成哈希密码。
pkcs12
PKCS#12 数据管理。
pkcs7
PKCS#7 数据管理。
pkcs8
PKCS#8 格式私钥转换命令。
pkey
公钥和私钥管理。
pkeyparam
公钥算法参数管理。
pkeyutl
公钥算法密码操作命令。
prime
计算质数。
rand
生成伪随机字节。
rehash
创建指向通过哈希值命名的证书和 CRL 文件的符号链接。
req PKCS#10 X.509 证书签名请求 (CSR) 管理。
rsa RSA 密钥管理。
rsautl
RSA 命令,用于签名、验证、加密和解密。已被 openssl-pkeyutl(1) 取代。
s_client
这实现了通用的 SSL/TLS 客户端,可以建立到远程服务器的透明连接,该服务器使用 SSL/TLS。它仅用于测试目的,并仅提供基本的界面功能,但在内部使用 OpenSSL ssl 库的大部分功能。
s_server
这实现了通用的 SSL/TLS 服务器,它接受来自远程客户端的连接,这些客户端使用 SSL/TLS。它仅用于测试目的,并仅提供基本的界面功能,但在内部使用 OpenSSL ssl 库的大部分功能。它提供了一种用于测试 SSL 自身的命令行协议,并提供了一种简单的 HTTP 响应机制,以模拟一个支持 SSL/TLS 的 Web 服务器。
s_time
SSL 连接计时器。
sess_id
SSL 会话数据管理。
smime
S/MIME 邮件处理。
speed
算法速度测量。
spkac
SPKAC 打印和生成命令。
srp
维护 SRP 密码文件。此命令已弃用。
storeutl
用于列出和显示证书、密钥、CRL 等的命令。
ts
时间戳颁发机构命令。
verify
X.509 证书验证。请参阅 openssl-verification-options(1) 手册页。
version
OpenSSL 版本信息。
x509
X.509 证书数据管理。
消息摘要命令
blake2b512
BLAKE2b-512 摘要
blake2s256
BLAKE2s-256 摘要
md2
MD2 摘要
md4
MD4 摘要
md5
MD5 摘要
mdc2
MDC2 摘要
rmd160
RMD-160 摘要
sha1
SHA-1 摘要
sha224
SHA-2 224 摘要
sha256
SHA-2 256 摘要
sha384
SHA-2 384 摘要
sha512
SHA-2 512 摘要
sha3-224
SHA-3 224 摘要
sha3-256
SHA-3 256 摘要
sha3-384
SHA-3 384 摘要
sha3-512
SHA-3 512 摘要
keccak-224
KECCAK 224 摘要
keccak-256
KECCAK 256 摘要
keccak-384
KECCAK 384 摘要
keccak-512
KECCAK 512 摘要
shake128
SHA-3 SHAKE128 摘要
shake256
SHA-3 SHAKE256 摘要
sm3
SM3 摘要
加密、解密和编码命令
以下别名提供对最常用编码和密码的便捷访问。
根据 OpenSSL 的配置和构建方式,此处列出的并非所有密码都可能存在。 有关更多信息,请参阅 openssl-enc(1)。
aes128, aes-128-cbc, aes-128-cfb, aes-128-ctr, aes-128-ecb, aes-128-ofb
AES-128 密码
aes192, aes-192-cbc, aes-192-cfb, aes-192-ctr, aes-192-ecb, aes-192-ofb
AES-192 密码
aes256, aes-256-cbc, aes-256-cfb, aes-256-ctr, aes-256-ecb, aes-256-ofb
AES-256 密码
aria128, aria-128-cbc, aria-128-cfb, aria-128-ctr, aria-128-ecb, aria-128-ofb
Aria-128 密码
aria192, aria-192-cbc, aria-192-cfb, aria-192-ctr, aria-192-ecb, aria-192-ofb
Aria-192 密码
aria256, aria-256-cbc, aria-256-cfb, aria-256-ctr, aria-256-ecb, aria-256-ofb
Aria-256 密码
base64
Base64 编码
bf, bf-cbc, bf-cfb, bf-ecb, bf-ofb
Blowfish 密码
camellia128, camellia-128-cbc, camellia-128-cfb, camellia-128-ctr, camellia-128-ecb,
camellia-128-ofb
Camellia-128 密码
camellia192, camellia-192-cbc, camellia-192-cfb, camellia-192-ctr, camellia-192-ecb,
camellia-192-ofb
Camellia-192 密码
camellia256, camellia-256-cbc, camellia-256-cfb, camellia-256-ctr, camellia-256-ecb,
camellia-256-ofb
Camellia-256 密码
cast, cast-cbc
CAST 密码
cast5-cbc, cast5-cfb, cast5-ecb, cast5-ofb
CAST5 密码
chacha20
Chacha20 密码
des, des-cbc, des-cfb, des-ecb, des-ede, des-ede-cbc, des-ede-cfb, des-ede-ofb, des-ofb
DES 密码
des3, desx, des-ede3, des-ede3-cbc, des-ede3-cfb, des-ede3-ofb
Triple-DES 密码
idea, idea-cbc, idea-cfb, idea-ecb, idea-ofb
IDEA 密码
rc2, rc2-cbc, rc2-cfb, rc2-ecb, rc2-ofb
RC2 密码
rc4
RC4 密码
rc5, rc5-cbc, rc5-cfb, rc5-ecb, rc5-ofb
RC5 密码
seed, seed-cbc, seed-cfb, seed-ecb, seed-ofb
SEED Cipher
sm4, sm4-cbc, sm4-cfb, sm4-ctr, sm4-ecb, sm4-ofb
SM4 Cipher
选项
具体有哪些选项可用取决于特定的命令。本节描述了一些具有通用行为的常用选项。
程序选项
可以在未指定命令的情况下,通过指定这些选项来获取帮助或版本信息。
-help
提供所有选项的简要摘要。如需更详细的信息,每个命令都支持 -help 选项。同样接受 --help。
-version
提供 OpenSSL 程序版本的简要摘要。如需更详细的信息,请参阅 openssl-version(1)。同样接受 --version。
通用选项
-help
如果某个选项需要参数,则还会给出参数的“类型”。
-- 这会终止选项列表。如果任何文件名参数都以减号开头,则它非常有用:
openssl verify [标志...] -- -cert1.pem...
格式选项
请参阅 openssl-format-options(1) 手册页。
密码短语选项
请参阅 openssl-passphrase-options(1) 手册页。
随机状态选项
在 OpenSSL 1.1.1 之前,应用程序通常会将有关随机数生成器状态的信息存储在文件中,并在启动时加载并在退出时重写。在现代操作系统上,这通常不再是必需的,因为 OpenSSL 将从操作系统提供的可信熵源进行自我初始化。这些标志仍然受支持,用于可能需要它们的特殊平台或环境。
通常,在多次使用同一个种子文件会出错,并且每次使用 -rand 都应与 -writerand 配对。
-rand 文件
一个或多个包含用于初始化随机数生成器的随机数据的文件。可以指定多个文件,并用操作系统相关字符分隔。分隔符对于 MSWindows 为“;”,对于 OpenVMS 为“,”,对于所有其他操作系统为“:”。指定多个文件的另一种方法是使用不同的文件名重复此标志。
-writerand 文件
在退出时,将种子数据写入指定的 文件。此文件可以在后续的命令调用中使用。
证书验证选项
请参阅 openssl-verification-options(1) 手册页。
名称格式选项
请参阅 openssl-namedisplay-options(1) 手册页。
TLS 版本选项
多个命令使用 SSL、TLS 或 DTLS。默认情况下,这些命令使用 TLS,客户端将提供最低和最高的协议版本,服务器将选择客户端提供且服务器也支持的最高版本。
以下选项可用于限制使用哪些协议版本,以及是否使用 TCP(SSL 和 TLS)或 UDP(DTLS)。请注意,并非所有协议和标志都可用,具体取决于 OpenSSL 的构建方式。
-ssl3, -tls1, -tls1_1, -tls1_2, -tls1_3, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3
这些选项要求或禁用使用指定的 SSL 或 TLS 协议。当需要特定的 TLS 版本时,将仅提供或接受该版本。只能提供一个特定的协议,并且它不能与任何 no_ 选项结合使用。no_* 选项不适用于 s_time 和 ciphers 命令,但适用于 s_client 和 s_server 命令。
-dtls, -dtls1, -dtls1_2
这些选项指定使用 DTLS 代替 TLS。使用 -dtls 时,客户端将协商任何受支持的 DTLS 协议版本。使用 -dtls1 或 -dtls1_2 选项以仅支持 DTLS1.0 或 DTLS1.2。
引擎选项
-engine id
加载由 id 标识的引擎,并使用它实现的所有方法(算法、密钥存储等),除非在命令的特定文档中另有说明,或者它配置为这样做,如“引擎配置”中所述 config(5)。
当使用带有 -key 和类似选项的密钥 ID 时,将使用引擎,并且当给出了一个选项(如 -keyform engine)时,将使用引擎。
一个特殊的情况是“loader_attic”引擎,它仅用于 OpenSSL 内部测试,并支持从文件中加载密钥、参数、证书和 CRL。当使用此引擎时,通过此引擎读取包含这些凭据的文件。使用“file:”模式是可选的;一个简单的文件名(路径)就可以。
指定密钥的选项,如 -key 和类似选项,可以使用通用的 OpenSSL 引擎密钥加载 URI 模式“org.openssl.engine:”来检索私钥和公钥。URI 语法的简化形式如下:
org.openssl.engine:{engineid}:{keyid}
其中“{engineid}”是引擎的标识/名称,而“{keyid}”是可以被该引擎接受的密钥标识符。例如,当使用与 PKCS#11 实现接口的引擎时,通用的密钥 URI 将如下所示(这是一个 OpenSC 中 PKCS#11 引擎的示例):
-key org.openssl.engine:pkcs11:label_some-private-key
作为第三种可能性,对于已经实现了自己的 OSSL_STORE_LOADER(3) 的引擎和提供程序,“org.openssl.engine:”是不必要的。对于已经实现此类加载器的 PKCS#11 实现,可以直接使用 RFC 7512 中定义的 PKCS#11 URI:
-key pkcs11:object=some-private-key;pin-value=1234
提供程序选项
-provider name
加载并初始化由名称标识的提供程序。该名称也可以是提供程序模块的路径。在这种情况下,提供程序名称将是指定的路径,而不仅仅是提供程序模块名称。相对路径的解释是特定于平台的。配置的“MODULESDIR”路径、OPENSSL_MODULES 环境变量或通过 -provider-path 指定的路径将添加到相对路径的前面。有关更详细的描述,请参阅 provider(7)。
-provider-path path
指定用于查找提供程序的搜索路径。 同样,也可以设置 OPENSSL_MODULES 环境变量。
-provparam [name:]key=value
为提供程序名称(可选)设置配置参数 key 的值为 value。 如果未指定名称,则设置将应用于所有已加载的提供程序。 应该在加载提供程序之前指定指定非默认提供程序加载的选项,如果希望设置应用于要加载的提供程序。 仅在需要时查询的参数,当前只能在配置文件中设置,通过此接口设置时才会有影响。 仅支持具有 UTF8 字符串值的参数。 请参阅特定提供程序及其相关算法的文档,以了解支持的任何参数。
-propquery propq
指定用于从已加载的提供程序中获取算法时要使用的属性查询子句。 请参阅 property(7),以获取更详细的说明。
环境变量
OpenSSL 库可以从环境变量中获取一些配置参数。
有关 OpenSSL 库使用的所有环境变量的信息,例如 OPENSSL_CONF、OPENSSL_MODULES 和 OPENSSL_TRACE,请参阅 openssl-env(7)。
有关在配置中使用环境变量的信息,请参阅 config(5) 中的“ENVIRONMENT”。
有关特定命令的信息,请参阅 openssl-engine(1)、openssl-rehash(1) 和 tsget(1)。
有关查询或指定 CPU 架构标志的信息,请参阅 OPENSSL_ia32cap(3)、OPENSSL_s390xcap(3) 和 OPENSSL_riscvcap(3)。
参见
^ penssl-asn1parse(1)、openssl-ca(1)、openssl-ciphers(1)、openssl-cms(1)、openssl-crl(1)、
^ penssl-crl2pkcs7(1)、openssl-dgst(1)、openssl-dhparam(1)、openssl-dsa(1)、openssl-dsaparam(1)、
^ penssl-ec(1)、openssl-ecparam(1)、openssl-enc(1)、openssl-engine(1)、openssl-errstr(1)、
^ penssl-gendsa(1)、openssl-genpkey(1)、openssl-genrsa(1)、openssl-kdf(1)、openssl-list(1)、
^ penssl-mac(1)、openssl-nseq(1)、openssl-ocsp(1)、openssl-passwd(1)、openssl-pkcs12(1)、
^ penssl-pkcs7(1)、openssl-pkcs8(1)、openssl-pkey(1)、openssl-pkeyparam(1)、openssl-pkeyutl(1)、
^ penssl-prime(1)、openssl-rand(1)、openssl-rehash(1)、openssl-req(1)、openssl-rsa(1)、
^ penssl-rsautl(1)、openssl-s_client(1)、openssl-s_server(1)、openssl-s_time(1)、
^ penssl-sess_id(1)、openssl-smime(1)、openssl-speed(1)、openssl-spkac(1)、openssl-srp(1)、
^ penssl-storeutl(1)、openssl-ts(1)、openssl-verify(1)、openssl-version(1)、openssl-x509(1)、
^ onfig(5)、crypto(7)、openssl-env(7)、ssl(7)、x509v3_config(5)。
历史
^ XXX-algorithms 选项是在 OpenSSL 1.0.0 中添加的;有关其他命令的可用性说明,请参阅其各自的手册页。
^ issuer_checks 选项已在 OpenSSL 1.1.0 中弃用,并且会被静默忽略。
^ xcertform 和 -xkeyform 选项自 OpenSSL 3.0 起已过时,并且没有任何作用。
交互模式,可以通过运行不带任何其他参数的 "openssl" 命令来调用,已在 OpenSSL 3.0 中删除,并且现在以不带任何参数运行该程序等同于运行 "openssl help"。
版权
版权所有,2000-2025,OpenSSL 项目作者。保留所有权利。
根据 Apache 2.0 许可协议(“许可”)进行许可。您不得在使用本文件时违反许可协议。您可以在源代码发行包中的 LICENSE 文件或 [https://www.openssl.org/source/license.html] 获取许可协议的副本。