OpenSSL 命令行基础
掌握用于生成密钥、加密、哈希和检查证书的 OpenSSL 基本命令。
OpenSSL 命令行基础 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
OpenSSL 版本与构建信息
命令 "openssl version -a" 会显示 OpenSSL 版本、构建日期、编译器和已配置的选项。验证版本非常重要,因为 OpenSSL 1.0.x、1.1.x 和 3.x 之间的加密功能与默认设置存在显著差异。出于安全考虑,许多较旧的算法在较新版本中默认处于禁用状态。
生成 RSA 密钥
命令 "openssl genrsa -out private.pem 4096" 会生成一个 PEM 格式的 4096 位 RSA 私钥。在生产环境中,2048 位是最低要求,3072 位可提供约 128 位安全性,4096 位则提供更大的安全余量。通过在命令中添加 "-aes256",可以对静态存储的密钥进行 AES 加密,届时系统会提示您输入密码短语。
生成 EC 密钥
椭圆曲线密钥分两步生成。第一步:"openssl ecparam -name prime256v1 -genkey -noout -out ec_private.pem" 使用 P-256 曲线生成 EC 私钥。另一种方式是使用较新的 genpkey 接口:"openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-384 -out ec_private.pem",新代码更推荐采用这种方式。
查看密钥详细信息
对于 RSA 密钥,可以使用 "openssl rsa -text -noout -in private.pem" 检查密钥内容,该命令会显示模数、公 exponent 和素因子。对于 EC 密钥,"openssl ec -text -noout -in ec_private.pem" 会显示曲线名称和密钥值。"-noout" 标志会禁止输出 PEM 编码内容。
生成随机数据
OpenSSL 可以生成密码学安全的随机字节:"openssl rand -hex 32" 会以十六进制输出 32 个随机字节(64 个十六进制字符),适合生成对称密钥或随机数。"openssl rand -base64 32" 会输出经过 base64 编码的随机字节。此命令使用 OS 熵源(Unix 系统中的 /dev/urandom)。
计算哈希值
“openssl dgst”命令用于计算消息摘要:“openssl dgst -sha256 file.txt”用于计算文件的 SHA-256 哈希值。“openssl dgst -sha256 -hmac key file.txt”用于计算 HMAC-SHA256。“openssl dgst -sha256 -sign private.pem -out sig.bin file.txt”会为文件创建数字签名。
加密文件
对称文件加密使用“openssl enc -aes-256-cbc -pbkdf2 -in plaintext.txt -out encrypted.bin”。“-pbkdf2”标志使用 PBKDF2 从口令派生密钥,取代已弃用的 EVP_BytesToKey。解密命令为:“openssl enc -d -aes-256-cbc -pbkdf2 -in encrypted.bin -out decrypted.txt”。对于新代码,优先使用 AES-256-GCM 等 AEAD 模式。
PEM 与 DER 格式转换
证书和密钥有两种编码格式。PEM 使用带有头部和尾部行的 Base64 编码(-----BEGIN CERTIFICATE-----),大多数 Unix 工具都使用这种格式。DER 是二进制编码,Java 和 Windows 使用这种格式。将 PEM 转换为 DER:“openssl x509 -inform PEM -outform DER -in cert.pem -out cert.der”。将 DER 转换为 PEM:反转 -inform/-outform 标志。
验证签名
数字签名验证命令为:“openssl dgst -sha256 -verify public.pem -signature sig.bin file.txt”。必须先提取公钥:“openssl rsa -pubout -in private.pem -out public.pem”。对于基于证书的验证:“openssl verify -CAfile ca.pem cert.pem”会根据指定的 CA 链检查证书。
检查证书详情
证书检查是最常见的 OpenSSL 任务之一:“openssl x509 -text -noout -in cert.pem”会显示所有证书字段,包括主题、颁发者、有效期日期、SAN 和扩展。“openssl x509 -enddate -noout -in cert.pem”只显示到期日期,这在监控脚本中很有用。
连接到 TLS 服务器
“openssl s_client -connect example.com:443 -servername example.com”会建立 TLS 连接,并显示服务器的证书链、协商出的 TLS 版本和密码套件。添加“-showcerts”会显示链中的所有证书。这对于排查证书链问题、TLS 版本问题和 OCSP 装订问题极其有用。
OpenSSL genrsa 检查
命令“openssl genrsa -aes256 -out private.pem 2048”的作用是什么?
课程回顾:OpenSSL CLI 基础
OpenSSL 提供用于密钥生成(genrsa、genpkey)、格式转换(PEM/DER)、随机数据生成(rand)、哈希和签名(dgst)、文件加密(enc)、证书检查(x509 -text)、链验证(verify)以及 TLS 调试(s_client)的命令。这些命令涵盖了日常证书和密码学任务中的绝大多数。
常见问题解答
「OpenSSL 命令行基础」课时是免费的吗?
是的 — 「OpenSSL 命令行基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「OpenSSL 命令行基础」这节课中我会学到什么?
掌握用于生成密钥、加密、哈希和检查证书的 OpenSSL 基本命令。 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「OpenSSL 命令行基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- OpenSSL 命令行基础
- 创建和管理证书链
- OCSP 装订与证书透明度
- Let's Encrypt 与 ACME 协议自动化