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(适用于用户密码或密钥)。