OpenSSL 入门教程

FreeGuideOnline 最新 2026-07-15

bash sudo apt update sudo apt install openssl


### 1.3 macOS

macOS 通常自带了 LibreSSL(OpenSSL 的一个分支),但功能较旧。推荐通过 Homebrew 安装最新版:

```bash
brew install openssl

安装后可能需要将 /usr/local/opt/openssl/bin 加入 PATH,或使用完整路径调用。

验证安装:

openssl version

2. 基础概念速览

在动手之前,先快速了解几个核心概念:

  • 对称加密:使用同一个密钥进行加密和解密,速度很快,适合大量数据。代表算法:AES。
  • 非对称加密:拥有一对密钥(公钥和私钥)。公钥加密,私钥解密;私钥签名,公钥验签。代表算法:RSA、EC。
  • 哈希(Hash):将任意长度数据映射为固定长度的摘要,不可逆。常用于校验完整性和存储密码。代表算法:SHA-256。
  • 数字证书:将公钥与身份信息绑定,并由权威机构签名,用于 HTTPS 等场景。

3. 对称加密:快速保护文件

使用 openssl enc 命令可以进行对称加密与解密。下面以 AES-256-CBC 为例。

加密文件

openssl enc -aes-256-cbc -salt -in 原始文件.txt -out 加密文件.enc

执行后会提示输入密码(并确认),这个密码就是对称密钥。-salt 增加随机性,防止相同密码产生相同密文。

解密文件

openssl enc -d -aes-256-cbc -in 加密文件.enc -out 恢复文件.txt

输入加密时使用的密码即可还原。

对文本进行 Base64 编码加密(方便传输)

echo "Hello OpenSSL" | openssl enc -aes-256-cbc -a -salt

-a 选项会输出 Base64 格式,便于粘贴或邮件传输。


4. 非对称加密:生成 RSA 密钥对

生成私钥

openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

或使用传统写法:

openssl genrsa -out private_key.pem 2048

私钥非常重要,务必妥善保管,设置严格的文件权限(如 chmod 600)。

从私钥提取公钥

openssl rsa -in private_key.pem -pubout -out public_key.pem

公钥加密、私钥解密

假设我们有一个文件 secret.txt

# 公钥加密
openssl pkeyutl -encrypt -inkey public_key.pem -pubin -in secret.txt -out secret.enc

# 私钥解密
openssl pkeyutl -decrypt -inkey private_key.pem -in secret.enc -out secret_decrypted.txt

注意:非对称加密适合加密少量数据(如对称密钥),大文件应使用对称加密。


5. 数字签名与验证

私钥持有者可以对数据进行签名,其他人用公钥验证签名是否来自该私钥,且数据未被篡改。

签名

openssl dgst -sha256 -sign private_key.pem -out signature.bin 原始文件.txt

验证签名

openssl dgst -sha256 -verify public_key.pem -signature signature.bin 原始文件.txt

验证成功会输出 Verified OK,失败则输出 Verification Failure


6. 计算哈希值

使用 openssl dgst 计算文件的哈希摘要,常用于校验下载文件。

计算 SHA-256

openssl dgst -sha256 文件名

或简洁方式:

openssl sha256 文件名

支持的其他算法:-md5, -sha1, -sha512 等。

对字符串生成哈希(Unix 管道方式)

echo -n "Hello" | openssl dgst -sha256

7. 生成自签名证书

在开发测试环境,我们经常需要快速生成 HTTPS 证书。使用 openssl req 命令可以完成。

一步生成私钥和自签名证书

openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes

参数解释:

  • -x509:生成自签名证书。
  • -newkey rsa:2048:同时生成新的 RSA 2048 位私钥。
  • -keyout server.key:私钥输出文件。
  • -out server.crt:证书输出文件。
  • -days 365:证书有效期(天)。
  • -nodes:不加密私钥(即不设密码),开发环境方便;生产环境建议加密或另行处理。

执行后按提示填写国家、组织、通用名称(CN,一般填域名或 IP)等信息。

查看证书内容

openssl x509 -in server.crt -text -noout

8. 补充常用技巧

  • 检查私钥是否匹配证书

    openssl x509 -noout -modulus -in server.crt | openssl md5
    openssl rsa -noout -modulus -in server.key | openssl md5
    

    两个输出一致则匹配。

  • 转换证书格式(PEM 转 DER)

    openssl x509 -in cert.pem -outform der -out cert.der
    
  • 生成安全的随机密码

    openssl rand -base64 12