OpenSSL 使用方法汇总:从证书管理到加密解密全解析

下面给出一些常用的 OpenSSL 命令与使用场景汇总,便于在日常开发和运维中快速查阅。示例中用到的文件名、参数可根据实际情况调整。


一、证书与密钥管理

1. 生成 RSA 私钥

bash 复制代码
# 生成 2048 位 RSA 私钥
openssl genrsa -out private.key 2048
  • private.key:生成的私钥文件。
  • 常见位数:1024、2048、4096 等,位数越大安全性越高,但性能会稍有影响。

2. 生成 CSR(证书签名请求)

bash 复制代码
openssl req -new -key private.key -out server.csr
  • 会交互式询问信息(国家、组织、域名等)。
  • 生成的 server.csr 文件可提交给 CA(证书颁发机构)进行签名。

3. 自签名证书(测试用)

bash 复制代码
openssl req -new -x509 -days 365 -key private.key -out selfsigned.crt
  • -days 365:证书有效期 365 天。
  • 生成的 selfsigned.crt 为自签名证书,一般仅在测试环境使用。

4. 将私钥与证书打包为 PKCS#12(.p12)

bash 复制代码
openssl pkcs12 -export -inkey private.key -in server.crt -out server.p12
  • 适合在 Java 等需要 .p12 或 .pfx 文件的场景中使用。
  • 会提示输入导出密码。

5. 从 PKCS#12 文件中提取私钥和证书

bash 复制代码
# 提取私钥
openssl pkcs12 -in server.p12 -nocerts -out private.key -nodes
# 提取证书
openssl pkcs12 -in server.p12 -clcerts -nokeys -out server.crt

二、证书查看与转换

1. 查看证书信息

bash 复制代码
openssl x509 -in server.crt -noout -text
  • 查看证书详细信息(颁发者、到期时间、签名算法等)。

2. 查看私钥信息

bash 复制代码
openssl rsa -in private.key -text -noout
  • 显示私钥的模数、指数等信息。

3. 转换证书格式

bash 复制代码
# PEM -> DER
openssl x509 -in server.crt -out server.der -outform DER

# DER -> PEM
openssl x509 -in server.der -inform DER -out server.crt -outform PEM

三、对称加密/解密

1. 使用 AES 进行加密

bash 复制代码
# -aes-256-cbc:指定加密算法
# -salt:使用随机盐
# -pbkdf2:推荐开启 PBKDF2 加强密码强度
# -in:输入文件
# -out:输出文件
openssl enc -aes-256-cbc -salt -pbkdf2 -in plaintext.txt -out ciphertext.bin -pass pass:MyPassword123
  • plaintext.txt:原文文件。
  • ciphertext.bin:加密后输出的二进制文件。
  • -pass pass: 后跟明文密码,也可用 -pass file:-pass env: 等方式。

2. 使用 AES 进行解密

bash 复制代码
openssl enc -aes-256-cbc -d -salt -pbkdf2 -in ciphertext.bin -out decrypted.txt -pass pass:MyPassword123
  • -d:表示解密。
  • decrypted.txt:解密输出文件。

3. 使用 Base64 编码/解码

bash 复制代码
# 编码
openssl base64 -in plaintext.txt -out encoded.txt
# 解码
openssl base64 -d -in encoded.txt -out decoded.txt
  • 常与加密命令结合使用,便于在文本环境中传输二进制数据。

四、消息摘要/校验

1. 计算文件的 MD5/SHA 校验值

bash 复制代码
openssl dgst -md5 file.txt
openssl dgst -sha256 file.txt
  • 输出对应的哈希值,用于完整性校验。

2. 生成 HMAC

bash 复制代码
openssl dgst -sha256 -hmac "secretkey" file.txt
  • 使用 secretkey 对文件做 HMAC-SHA256。

五、SSL/TLS 测试

1. 测试与服务器的 SSL/TLS 连接

bash 复制代码
openssl s_client -connect www.example.com:443
  • 显示握手过程、服务器证书等信息。
  • 用于排查 HTTPS 连接问题。

2. 指定协议版本

bash 复制代码
openssl s_client -connect www.example.com:443 -tls1_2
  • 强制使用 TLS 1.2 协议。

六、常见注意事项

  1. 安全性

    • 生成私钥后注意保护,不要在公共场合上传。
    • 使用较长位数的密钥(如 2048 或 4096)以及强密码。
    • 生产环境中,尽量使用由权威 CA 签发的证书。
  2. PBKDF2

    • 在对称加密时,推荐加上 -pbkdf2 选项,增加密码派生的安全强度。
    • 不加 -pbkdf2 时,OpenSSL 兼容旧版行为,安全性较弱。
  3. 命令兼容性

    • 不同版本的 OpenSSL 在某些命令或参数上略有差异,出现问题时可通过 openssl version 查看版本,或参考相应版本文档。
  4. 自动化脚本

    • 若在脚本中执行加密解密,最好使用 -pass file:...-pass env:... 等方式,避免明文密码出现在命令行历史中。

参考文档


以上是对常见 OpenSSL 用法的简要汇总,包括证书与密钥管理、加密解密、摘要校验和测试 SSL/TLS 连接等方面。根据实际需求,可以灵活组合、扩展这些命令来完成安全相关的工作。

相关推荐
LaoZhangGong1232 分钟前
W5500使用ioLibrary库创建TCP客户端
网络·经验分享·stm32·网络协议·tcp/ip
天天爱吃肉82182 小时前
车载以太网驱动智能化:域控架构设计与开发实践
java·运维·网络协议·微服务
IP管家3 小时前
企业级IP代理解决方案:负载均衡与API接口集成实践
服务器·网络·数据库·网络协议·tcp/ip·容器·负载均衡
{⌐■_■}3 小时前
【gRPC】HTTP/2协议,HTTP/1.x中线头阻塞问题由来,及HTTP/2中的解决方案,RPC、Protobuf、HTTP/2 的关系及核心知识点汇总
网络·网络协议·计算机网络·http·rpc·golang
Clownseven4 小时前
[IP地址科普] 服务器公网IP、私网IP、弹性IP是什么?区别与应用场景详解
服务器·网络协议·tcp/ip
兴达易控4 小时前
ProfibusDP主站转modbusTCP网关与ABB电机保护器数据交互
网络协议
开***能6 小时前
降本增效双突破:Profinet转Modbus TCP助力包布机产能与稳定性双提升
数据库·网络协议·tcp/ip
网络空间小黑11 小时前
TCP/IP 知识体系
网络·网络协议·tcp/ip·计算机网络·5g·wireshark·信息与通信
救救孩子把14 小时前
MCP本地高效与云端实时:stdio 与 HTTP+SSE 传输机制深度对比
网络·网络协议·http·sse·mcp·stdio
2501_9159090615 小时前
我用 Appuploader绕过 Mac,成功把 iOS 应用上线了 App Store
websocket·网络协议·tcp/ip·http·网络安全·https·udp