一、OpenSSL简介;
SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
二、加密方式及算法;
参考资料:公钥加密:http://baike.baidu.com/link?url=QCguCuAn6Kf6bmx-7YDnDDNtE-flQtQdXun_B0djhpF0ESVcZfSyvIxR4327FT-yJo711xKh9Bzznmo_IbSEeq
对称加密:http://baike.baidu.com/view/119320.htm#2
单向加密:http://book.51cto.com/art/201102/245328.htm
三、SSL握手协议;
更多详细信息请参考;http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
四、OpenSSL 应用
4.1 OpenSSL程序包
libcrypto:公共加密库
libssl:ssl协议的实现
openssl:多用途的命令行工具,各功能分别使用子命令实现生成密钥、创建数字证书、手动加密解密数据;
4.2 OpenSSL加密应用
4.2.1对称加密:
工具:openssl enc, gpg
算法:des, 3des, aes, blowfish, twofhish, rc6, idea, cast5
enc工具:
加密:# openssl enc -e -CIPHERNAME -a -salt -in /path/from/somefile -out /path/to/somecipher.file
解密:# openssl enc -d -CIPHERNAME -a -salt -in /path/from/somecipher.file -out /path/to/someclear.file
解析:-e:加密encrypt
-d:解密decrypt
-ciphername:加密算法
-a/-base64:基于base64编码
-salt:在密文中加入salt
-in /path/from/somefile:要加密/解密的输入文件,缺省为标准输入
-out /path/to/somecipher.file:要加密/解密的输出文件,缺省为标准输出
4.2.2单向加密:
特性:One-Way, Collision-free
算法:md5, sha1, sha256, sha384, sha512
工具:md5sum, sha1sum, sha256sum, sha512sum, openssl dgst, chsum
用法:# openssl dgst [-md5|-sha1] [-out /path/to/somedgst.file] /path/from/someclear.file
解析:[-md5|-sha1]:加密算法
[-out /path/to/somedgst.file]:加密后的输出文件保存路径
/path/from/someclear.file:指名对哪个文件做加密计算
MAC:消息认证码,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性;
机制:
CBC-MAC
HMAC: 使用md5或sha1算法
生成用户密码:
openssl passwd -1 -salt SALT(加入数字或者其他salt,一般为八位,也可以跟上‘openssl rand -base64|-hex NUM ’,则每次salt不会固定)
生成随机数:
openssl rand -base64|-hex NUM (对输出结果编码,-hex为16进制编码)
NUM: 表字节;-hex时,每个字符为4位,因此,两个字符为一个字节;生成八位随机数,NUM为4即可
4.2.3公钥加密:
(1)加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl
(2)数字签名:
算法:RSA, DSA, ELGamal
DSA:Digital Signature Algorithm
DSS: Digital Signature Standard
(3)密钥交换:
算法:公钥加密、DH:Diffie-Hellman
(4)生成密钥对儿:
# (umask 077; openssl genrsa -out /path/to/PRIVATEKEY.FILENUM_BITS)
从私钥中提取公钥:
# openssl rsa -in /patn/from/PRIVATEKEY.FILE -pubout
五、常见缩略语
SSL技术白皮书链接:http://www.h3c.com.cn/Products___Technology/Technology/Security_Encrypt/Other_technology/Technology_book/200812/622834_30003_0.htm