OpenSSL在Linux上的常见应用场景
对称加密(如AES)和非对称加密(如RSA、ECC)是数据安全的基础,OpenSSL提供便捷命令生成所需密钥。
openssl rand
生成随机字节作为密钥(如AES-256密钥),或通过openssl enc
命令隐式生成(如openssl enc -aes-256-cbc -salt -in plaintext.txt -out encrypted.bin
会自动提示输入密钥)。openssl genpkey
生成RSA/ECC私钥,再用openssl rsa -pubout
或openssl ec -pubout
提取公钥(例如RSA密钥对:openssl genpkey -algorithm RSA -out rsa_private_key.pem -pkeyopt rsa_keygen_bits:2048
;提取公钥:openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
)。OpenSSL支持对称和非对称两种加密方式,覆盖不同场景需求:
openssl enc -aes-256-cbc -salt -in plaintext.txt -out encrypted.bin -pass pass:yourpassword
(加密),openssl enc -d -aes-256-cbc -in encrypted.bin -out decrypted.txt -pass pass:yourpassword
(解密)。-salt
选项添加随机盐值,防止彩虹表攻击。openssl rsautl -encrypt -pubin -inkey rsa_public_key.pem -in plaintext.txt -out encrypted.bin
;私钥解密命令如openssl rsautl -decrypt -inkey rsa_private_key.pem -in encrypted.bin -out decrypted.txt
。适用于敏感数据(如密码、私钥)的传输。数字签名用于保证数据完整性(未被篡改)和来源真实性(由指定私钥持有者生成),OpenSSL通过以下命令实现:
openssl dgst -sha256 -sign rsa_private_key.pem -out signature.bin plaintext.txt
。openssl dgst -sha256 -verify rsa_public_key.pem -signature signature.bin plaintext.txt
(验证通过会输出“Verified OK”)。适用于软件包、文档、代码的签名场景。OpenSSL是Linux下管理X.509证书和配置SSL/TLS的核心工具,覆盖从测试到生产的完整流程:
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes
(一步生成私钥server.key
和自签名证书server.crt
,有效期365天)。openssl req -new -key server.key -out server.csr
(生成包含公钥、域名等信息的CSR文件,需提交给Let’s Encrypt等CA)。openssl x509 -in server.crt -text -noout
)、转换证书格式(如PEM转DER:openssl x509 -in server.crt -outform DER -out server.der
)、验证证书链(openssl verify -CAfile ca.crt server.crt
)。ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key;
,重启后即可通过HTTPS访问。OpenSSL提供s_client
和s_server
命令,用于测试SSL/TLS连接的正确性和安全性:
openssl s_client -connect example.com:443
(连接目标服务器的443端口,查看证书信息、协议版本、加密套件等)。openssl s_server -cert server.crt -key server.key -port 4433
(启动一个简单的SSL/TLS服务器,监听4433端口,用于调试客户端连接)。适用于排查SSL/TLS配置错误(如证书过期、协议不兼容)。OpenSSL的rand
命令生成加密安全的随机数,用于密钥生成、初始化向量(IV)、盐值等场景:
openssl rand -base64 16
(适用于AES的IV)。openssl rand -base64 32
(适用于用户密码或密钥)。