OpenSSL

加密和 SSL/TLS 工具包

openssl

名称

openssl - OpenSSL 命令行程序

语法

openssl 命令 [ 选项 ... ] [ 参数 ... ]

openssl no-XXX [ 选项 ]

openssl -help | -version

描述

OpenSSL 是一个加密工具包,实现了安全套接字层 (SSL) 和传输层安全 (TLS) 网络协议以及它们所需的相关加密标准。

openssl 程序是一个命令行程序,用于从 shell 使用 OpenSSL 的 crypto 库的各种加密功能。它可以用于

o  Creation and management of private keys, public keys and parameters
o  Public key cryptographic operations
o  Creation of X.509 certificates, CSRs and CRLs
o  Calculation of Message Digests and Message Authentication Codes
o  Encryption and Decryption with Ciphers
o  SSL/TLS Client and Server Tests
o  Handling of S/MIME signed or encrypted mail
o  Timestamp requests, generation and verification

命令摘要

openssl 程序提供了丰富的命令(上面 "语法" 中的 命令)。每个命令都可以具有许多选项和参数,如上所示为 选项参数

大多数标准子命令的详细文档和用例都可用(例如,openssl-x509(1))。子命令 openssl-list(1) 可用于列出子命令。

命令 no-XXX 测试指定名称的命令是否可用。如果不存在名为 XXX 的命令,则返回 0(成功)并打印 no-XXX;否则返回 1 并打印 XXX。在这两种情况下,输出都发送到 stdout,并且不会打印任何内容到 stderr。始终忽略其他命令行参数。由于每个密码都有一个同名的命令,因此这为 shell 脚本提供了一种简单的方法来测试 openssl 程序中密码的可用性。(no-XXX 无法检测伪命令,例如 quitlistno-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

在线证书状态协议命令。

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)

aes128aes-128-cbcaes-128-cfbaes-128-ctraes-128-ecbaes-128-ofb

AES-128 密码

aes192aes-192-cbcaes-192-cfbaes-192-ctraes-192-ecbaes-192-ofb

AES-192 密码

aes256aes-256-cbcaes-256-cfbaes-256-ctraes-256-ecbaes-256-ofb

AES-256 密码

aria128aria-128-cbcaria-128-cfbaria-128-ctraria-128-ecbaria-128-ofb

Aria-128 密码

aria192aria-192-cbcaria-192-cfbaria-192-ctraria-192-ecbaria-192-ofb

Aria-192 密码

aria256aria-256-cbcaria-256-cfbaria-256-ctraria-256-ecbaria-256-ofb

Aria-256 密码

base64

Base64 编码

bfbf-cbcbf-cfbbf-ecbbf-ofb

Blowfish 密码

camellia128camellia-128-cbccamellia-128-cfbcamellia-128-ctrcamellia-128-ecbcamellia-128-ofb

Camellia-128 密码

camellia192camellia-192-cbccamellia-192-cfbcamellia-192-ctrcamellia-192-ecbcamellia-192-ofb

Camellia-192 密码

camellia256camellia-256-cbccamellia-256-cfbcamellia-256-ctrcamellia-256-ecbcamellia-256-ofb

Camellia-256 密码

castcast-cbc

CAST 密码

cast5-cbccast5-cfbcast5-ecbcast5-ofb

CAST5 密码

chacha20

Chacha20 密码

desdes-cbcdes-cfbdes-ecbdes-ededes-ede-cbcdes-ede-cfbdes-ede-ofbdes-ofb

DES 密码

des3desxdes-ede3des-ede3-cbcdes-ede3-cfbdes-ede3-ofb

Triple-DES 密码

ideaidea-cbcidea-cfbidea-ecbidea-ofb

IDEA 密码

rc2rc2-cbcrc2-cfbrc2-ecbrc2-ofb

RC2 密码

rc4

RC4 密码

rc5rc5-cbcrc5-cfbrc5-ecbrc5-ofb

RC5 密码

seedseed-cbcseed-cfbseed-ecbseed-ofb

SEED 密码

sm4sm4-cbcsm4-cfbsm4-ctrsm4-ecbsm4-ofb

SM4 密码

选项

可用选项的详细信息取决于特定命令。本节描述了一些具有常见行为的常见选项。

程序选项

这些选项可以在没有指定命令的情况下指定,以获取帮助或版本信息。

-help

提供所有选项的简要摘要。有关更详细信息,每个命令都支持 -help 选项。也接受 --help

-version

提供 openssl 程序版本的简要摘要。有关更详细信息,请参阅 openssl-version(1)。也接受 --version

常用选项

-help

如果选项需要参数,则也会给出参数的“类型”。

--

这将终止选项列表。如果任何文件名参数以减号开头,这将非常有用

openssl verify [flags...] -- -cert1.pem...

格式选项

请参阅 openssl-format-options(1) 手册页。

密码短语选项

请参阅 openssl-passphrase-options(1) 手册页。

随机状态选项

在 OpenSSL 1.1.1 之前,应用程序通常会在启动时加载一个文件,并在退出时重写该文件,以存储随机数生成器状态的相关信息。在现代操作系统上,这通常不再需要,因为 OpenSSL 会从操作系统提供的可信熵源中自行播种。这些标志仍然支持某些特殊平台或情况,这些平台或情况可能需要它们。

通常,重复使用同一个种子文件是错误的,并且每次使用-rand都应该与-writerand配对。

-rand files

包含用于播种随机数生成器的随机数据的文件。可以使用操作系统相关的字符分隔多个文件。分隔符在 MS-Windows 上为;,在 OpenVMS 上为,,在其他所有系统上为:。另一种指定多个文件的方法是使用不同的文件名重复此标志。

-writerand file

在退出时将种子数据写入指定的文件file。此文件可以在后续的命令调用中使用。

证书验证选项

请参阅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_timeciphers命令,但适用于s_clients_server命令。

-dtls-dtls1-dtls1_2

这些选项指定使用 DTLS 而不是 TLS。使用-dtls时,客户端将协商任何支持的 DTLS 协议版本。分别使用-dtls1-dtls1_2选项仅支持 DTLS1.0 或 DTLS1.2。

引擎选项

-engine id

加载由id标识的引擎,并使用其实现的所有方法(算法、密钥存储等),除非在命令特定的文档中另有说明或配置为这样做,如config(5) 中的“引擎配置”中所述。

当给出类似-keyform engine的选项时,将对使用-key和类似选项指定的密钥 ID 使用该引擎。

一个特殊情况是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

加载并初始化由name标识的提供程序。name也可以是提供程序模块的路径。在这种情况下,提供程序名称将是指定的路径,而不仅仅是提供程序模块名称。相对路径的解释是特定于平台的。配置的“MODULESDIR”路径、OPENSSL_MODULES环境变量或-provider-path指定的路径将附加到相对路径。有关更详细的描述,请参阅provider(7)

-provider-path path

指定用于查找提供程序的搜索路径。等效地,可以设置OPENSSL_MODULES环境变量。

-propquery propq

指定从加载的提供程序中获取算法时要使用的属性查询子句。有关更详细的描述,请参阅property(7)

环境

OpenSSL 库可以从环境中获取一些配置参数。下面列出了一些这些变量。有关特定命令的信息,请参阅openssl-engine(1)openssl-rehash(1)tsget(1)

有关在配置中使用环境变量的信息,请参阅config(5) 中的“环境”

有关查询或指定 CPU 架构标志的信息,请参阅OPENSSL_ia32cap(3)OPENSSL_s390xcap(3)

有关 OpenSSL 库使用所有环境变量的信息,请参阅openssl-env(7)

OPENSSL_TRACE=name[,...]

通过名称启用 OpenSSL 库的跟踪输出。只有在您非常了解 OpenSSL 内部结构时,此输出才有意义。此外,如果 OpenSSL 在构建时未启用跟踪支持,则它可能根本不会输出任何内容。

该值是一个用逗号分隔的名称列表,其中包含以下可用名称:

TRACE

跟踪 OpenSSL 跟踪 API 本身。

INIT

跟踪 OpenSSL 库的初始化和清理。

TLS

跟踪 TLS/SSL 协议。

TLS_CIPHER

跟踪 TLS/SSL 协议使用的密码。

CONF

显示有关提供程序和引擎配置的详细信息。

ENGINE_TABLE

RSA、DSA(等)代码用于选择已注册的 ENGINE、缓存默认值和功能引用(等)的功能将生成调试摘要。

ENGINE_REF_COUNT

将监控 ENGINE 结构中的引用计数,并为每次更改生成一行。

PKCS5V2

跟踪 PKCS#5 v2 密钥生成。

PKCS12_KEYGEN

跟踪 PKCS#12 密钥生成。

PKCS12_DECRYPT

跟踪 PKCS#12 解密。

X509V3_POLICY

在 X.509 v3 策略评估期间的各个点生成完整的策略树。

BN_CTX

跟踪 BIGNUM 上下文操作。

CMP

跟踪 CMP 客户端和服务器活动。

STORE

跟踪 STORE 操作。

DECODER

跟踪解码器操作。

ENCODER

跟踪编码器操作。

REF_COUNT

跟踪递减某些 ASN.1 结构引用。

HTTP

跟踪 HTTP 客户端和服务器,例如发送和接收的消息。

另请参见

openssl-asn1parse(1)openssl-ca(1)openssl-ciphers(1)openssl-cms(1)openssl-crl(1)openssl-crl2pkcs7(1)openssl-dgst(1)openssl-dhparam(1)openssl-dsa(1)openssl-dsaparam(1)openssl-ec(1)openssl-ecparam(1)openssl-enc(1)openssl-engine(1)openssl-errstr(1)openssl-gendsa(1)openssl-genpkey(1)openssl-genrsa(1)openssl-kdf(1)openssl-list(1)openssl-mac(1)openssl-nseq(1)openssl-ocsp(1)openssl-passwd(1)openssl-pkcs12(1)openssl-pkcs7(1)openssl-pkcs8(1)openssl-pkey(1)openssl-pkeyparam(1)openssl-pkeyutl(1)openssl-prime(1)openssl-rand(1)openssl-rehash(1)openssl-req(1)openssl-rsa(1)openssl-rsautl(1)openssl-s_client(1)openssl-s_server(1)openssl-s_time(1)openssl-sess_id(1)openssl-smime(1)openssl-speed(1)openssl-spkac(1)openssl-srp(1)openssl-storeutl(1)openssl-ts(1)openssl-verify(1)openssl-version(1)openssl-x509(1)config(5)crypto(7)openssl-env(7)ssl(7)x509v3_config(5)

历史

list -XXX-algorithms选项是在 OpenSSL 1.0.0 中添加的;有关其他命令可用性的说明,请参阅其各自的手册页。

-issuer_checks选项已在 OpenSSL 1.1.0 中弃用,并且会被静默忽略。

-xcertform-xkeyform选项自 OpenSSL 3.0 起已过时,并且没有效果。

交互模式(可以通过在不带任何其他参数的情况下运行openssl来调用)已在 OpenSSL 3.0 中删除,并且现在在不带任何参数的情况下运行该程序等效于openssl help

版权所有 2000-2023 OpenSSL 项目作者。保留所有权利。

根据 Apache 许可证 2.0(“许可证”)许可。除非符合许可证的规定,否则您不得使用此文件。您可以在源代码分发包中的 LICENSE 文件或https://www.openssl.org/source/license.html中获取副本。