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