openssl:openssl 是一个用于管理和操作 SSL/TLS 协议和加密功能的命令行工具。它提供了一组命令用于创建密钥、生成证书、加密/解密数据、测试连接等。
一、语法
openssl [command] [subcommand] [options] [arguments]
- 指定主功能模块,例如 genrsa(生成 RSA 密钥)、req(证书请求)、x509(证书管理)等。
- 指定具体的操作,例如 -new(创建新的请求)、-verify(验证操作)。
- 细化命令功能的选项,例如 -in(指定输入文件)、-out(指定输出文件)、-text(查看内容)。
- 命令的参数,例如文件名、算法名称等。
二、常用选项
- 通用选项
选项 | 描述 |
-help | 显示帮助信息,列出当前命令支持的所有选项。 |
-version | 显示 OpenSSL 的版本信息。 |
-in | 指定输入文件,例如密钥、证书、CSR 等文件。 |
-out | 指定输出文件,用于保存生成的密钥、证书或加密后的数据。 |
-noout | 禁止输出原始文件内容(例如禁用 Base64 编码内容的输出)。 |
-text | 以可读的文本格式显示内容(常用于查看证书或密钥信息)。 |
- 加密/解密相关选项
选项 | 描述 |
-enc | 启用加密功能。 |
-d | 启用解密模式。 |
-e | 启用加密模式(默认模式)。 |
-aes-256-cbc | 指定加密算法为 AES-256-CBC。 |
-salt | 启用盐值以增加加密安全性(推荐使用)。 |
-k | 指定加密或解密密码(用于简单场景)。 |
-K | 以十六进制指定加密密钥。 |
-iv | 指定初始化向量(IV)。 |
- 密钥相关选项
选项 | 描述 |
-genrsa | 生成 RSA 私钥。 |
-des3 | 使用 DES3 加密私钥。 |
-passout | 指定私钥加密密码输出方式(例如 pass:my_password)。 |
-passin | 指定私钥输入密码。 |
-pubout | 提取公钥并输出到文件。 |
-modulus | 显示密钥或证书的 Modulus(可用于检查密钥与证书是否匹配)。 |
-outform | 指定输出格式(PEM 或 DER)。 |
-inform | 指定输入格式(PEM 或 DER)。 |
- 证书相关选项
选项 | 描述 |
-x509 | 创建自签名证书。 |
-req | 用于生成或处理证书签名请求(CSR)。 |
-days | 指定证书有效期天数(常用于自签名证书)。 |
-verify | 验证证书。 |
-signkey | 使用指定的私钥为证书签名。 |
-CA | 指定用于签发证书的 CA 证书。 |
-CAkey | 指定用于签发证书的 CA 私钥。 |
-CAcreateserial | 自动创建 CA 序列号文件(serial)。 |
- 哈希和摘要相关选项
选项 | 描述 |
-md5 | 使用 MD5 哈希算法。 |
-sha1 | 使用 SHA-1 哈希算法。 |
-sha256 | 使用 SHA-256 哈希算法。 |
-sha512 | 使用 SHA-512 哈希算法。 |
-hmac | 使用指定的密钥生成 HMAC 值。 |
- 网络相关选项
选项 | 描述 |
-s_client | 启动 SSL/TLS 客户端进行连接测试。 |
-connect | 指定连接的主机名和端口号。 |
-showcerts | 显示服务器发送的所有证书链。 |
-cert | 指定客户端证书用于验证(双向认证时)。 |
-key | 指定客户端私钥。 |
- 文件格式转换相关选项
选项 | 描述 |
-outform | 指定输出格式为 PEM 或 DER。 |
-inform | 指定输入格式为 PEM 或 DER。 |
-in | 指定输入文件(如 PEM 证书)。 |
-out | 指定输出文件。 |
- 调试和测试选项
选项 | 描述 |
-debug | 显示调试信息,帮助分析问题。 |
-engine | 使用指定的加密引擎(如硬件加速)。 |
三、示例
- 生成 RSA 私钥
openssl genrsa -out private.key -aes256 2048
- 生成自签名证书
openssl req -x509 -new -key private.key -out cert.crt -days 365
- 测试 HTTPS 连接
openssl s_client -connect example.com:443 -showcerts
- 加密文件
openssl enc -aes-256-cbc -salt -in plaintext.txt -out encrypted.bin -k mypassword
- 一条命令完成自签署证书
openssl req -x509 -newkey rsa:2048 -keyout private.key -out www.test.top.crt -days 365 -nodes -subj "/C=CN/ST=Shanxi/L=Taiyuan/O=Tunna Tech/OU=IT Department/CN=www.test.top/emailAddress=admin@test.top"
总结
openssl 的语法遵循统一的模块化设计,不同的命令和选项组合实现不同功能。根据需求组合命令,可以完成证书、密钥、加密等操作。