Linux 中的 Openssl命令及实例代码
openssl命令的格式是"openssl command command-options args",command部分有很多种命令,这些命令需要依赖于openssl命令才能执行,所以称为伪命令(pseudo-command),每个伪命令都有各自的功能,大部分command都可以直接man command查看命令的用法和功能。
openssl是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及ssl协议,并提供丰富的应用程序供测试或其它目的使用。在openssl被曝出现严重安全漏洞后,发现多数通过ssl协议加密的网站使用名为openssl的开源软件包。由于这是互联网应用最广泛的安全传输方法,被网银、在线支付、电商网站、门户网站、电子邮件等重要网站广泛使用,所以该漏洞影响范围广大。
openssl有两种运行模式:交互模式和批处理模式。
直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式。
openssl整个软件包大概可以分成三个主要的功能部分:密码算法库、ssl协议库以及应用程序。openssl的目录结构自然也是围绕这三个功能部分进行规划的。
对称加密算法
openssl一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是rc4。这7种分组加密算法分别是aes、des、blowfish、cast、idea、rc2、rc5,都支持电子密码本模式(ecb)、加密分组链接模式(cbc)、加密反馈模式(cfb)和输出反馈模式(ofb)四种常用的分组密码加密模式。其中,aes使用的加密反馈模式(cfb)和输出反馈模式(ofb)分组长度是128位,其它算法使用的则是64位。事实上,des算法里面不仅仅是常用的des算法,还支持三个密钥和两个密钥3des算法。
非对称加密算法
openssl一共实现了4种非对称加密算法,包括dh算法、rsa算法、dsa算法和椭圆曲线算法(ec)。dh算法一般用户密钥交换。rsa算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。dsa算法则一般只用于数字签名。
信息摘要算法
openssl实现了5种信息摘要算法,分别是md2、md5、mdc2、sha(sha1)和ripemd。sha算法事实上包括了sha和sha1两种信息摘要算法,此外,openssl还实现了dss标准中规定的两种信息摘要算法dss和dss1。
密钥和证书管理
密钥和证书管理是pki的一个重要组成部分,openssl为之提供了丰富的功能,支持多种标准。
首先,openssl实现了asn.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及crl等数据对象的der、pem和base64的编解码功能。openssl提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的der编解码功能。并实现了私钥的pkcs#12和pkcs#8的编解码功能。openssl在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。
在此基础上,openssl实现了对证书的x.509标准编解码、pkcs#12格式的编解码以及pkcs#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。
事实上,openssl提供的ca应用程序就是一个小型的证书管理中心(ca),实现了证书签发的整个流程和证书管理的大部分机制。
实例
1、消息摘要算法应用例子
用sha1算法计算文件.txt的哈西值,输出到stdout:
# openssl dgst -sha1 file.txt
用sha1算法计算文件file.txt的哈西值,输出到文件digest.txt:
# openssl sha1 -out digest.txt file.txt
用dss1(sha1)算法为文件file.txt签名,输出到文件dsasign.bin。签名的private key必须为dsa算法产生的,保存在文件dsakey.pem中。
# openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt
用dss1算法验证file.txt的数字签名dsasign.bin,验证的private key为dsa算法产生的文件dsakey.pem。
# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt
用sha1算法为文件file.txt签名,输出到文件rsasign.bin,签名的private key为rsa算法产生的文件rsaprivate.pem。
#openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt
# 用sha1算法验证file.txt的数字签名rsasign.bin,验证的public key为rsa算法生成的rsapublic.pem。
# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt
2、对称加密应用例子
对称加密应用例子,用des3算法的cbc模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。
# openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin
用des3算法的ofb模式解密文件ciphertext.bin,提供的口令为trousers,输出到文件plaintext.doc。注意:因为模式不同,该命令不能对以上的文件进行解密。
# openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers
用blowfish的cfb模式加密plaintext.doc,口令从环境变量password中取,输出到文件ciphertext.bin。
# openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:password
给文件ciphertext.bin用base64编码,输出到文件base64.txt。
# openssl base64 -in ciphertext.bin -out base64.txt
用rc5算法的cbc模式加密文件plaintext.doc,输出到文件ciphertext.bin,salt、key和初始化向量(iv)在命令行指定。
# openssl rc5 -in plaintext.doc -out ciphertext.bin -s c62cb1d49f158adc -iv e9edaca1bd7090c6 -k 89d4b1678d604faa3dbffd030a314b29
3、diffie-hellman应用例子
使用生成因子2和随机的1024-bit的素数产生d0ffie-hellman参数,输出保存到文件dhparam.pem
# openssl dhparam -out dhparam.pem -2 1024
从dhparam.pem中读取diffie-hell参数,以c代码的形式,输出到stdout。
# openssl dhparam -in dhparam.pem -noout -c
4、dsa应用例子应用例子
生成1024位dsa参数集,并输出到文件dsaparam.pem。
# openssl dsaparam -out dsaparam.pem 1024
使用参数文件dsaparam.pem生成dsa私钥匙,采用3des加密后输出到文件dsaprivatekey.pem
# openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem
使用私钥匙dsaprivatekey.pem生成公钥匙,输出到dsapublickey.pem
# openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem
从dsaprivatekey.pem中读取私钥匙,解密并输入新口令进行加密,然后写回文件dsaprivatekey.pem
# openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin
5、rsa应用例子
产生1024位rsa私匙,用3des加密它,口令为trousers,输出到文件rsaprivatekey.pem
# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024
从文件rsaprivatekey.pem读取私匙,用口令trousers解密,生成的公钥匙输出到文件rsapublickey.pem
# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem
用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt
# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt
使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt
# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt
用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin
# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin
用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt
# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain
从x.509证书文件cert.pem中获取公钥匙,用3des加密.txt,输出到文件mail.enc
# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem
从x.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密s/mime消息mail.enc,结果输出到文件mail.txt
# openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt
cert.pem为x.509证书文件,用私匙key,pem为mail.txt签名,证书被包含在s/mime消息中,输出到文件mail.sgn
# openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn
验证s/mime消息mail.sgn,输出到文件mail.txt,签名者的证书应该作为s/mime消息的一部分包含在mail.sgn中
# openssl smime -verify -in mail.sgn -out mail.txt
总结
以上所述是小编给大家介绍的linux 中的 openssl命令及实例代码,希望对大家有所帮助