OpenSSL原理
SSL:SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape(网景)公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
OpenSSL开放式安全套接层协议:是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
基本功能有:主要的密码算法(MD5、SHA、DH、BASE64等等)、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
辅助功能:如从口令生成密钥的API,证书签发和管理中的配置文件机制等
OpenSSL支持多种不同的算法
对称加密:
AES, Blowfish, Camellia, SEED, CAST-128, DES, IDEA, RC2, RC4, RC5, Triple DES, GOST 28147-89[3]
单向加密:
MD5, MD2, SHA-1, SHA-2, RIPEMD-160, MDC-2, GOST R 34.11-94[3]
非对称加密:
RSA, DSA, Diffie–Hellman key exchange, Elliptic curve, GOST R 34.10-2001[3]
这些都为官方解释,简单的理解为openssl就是一个集合,这个集合里面集成了许多的加密算法,而这些加密算法的使用方式都不同,所以openssl就用自己的功能来调用它们从而达到数据加密的效果。
OpenSSL基本使用
OpenSSL程序包由:openssl、libcrypto、libssl三个软件包组成
openssl:多用途的命令行工具,各功能分别使用子命令实现
libcrypto:公共加密库(存放了各种加密算法)
libssl:ssl协议的实现
OpenSSL命令行使用方法:
openssl command [command_options] [args]
查看openssl版本:openssl version
可以看出当前centos系统内置版本为1.0.1e(未升级前的版本,此版本带有漏洞,如需生产环境使用请自行下载1.0.1g版本以后的版本)
OpenSSL实现对称加密,使用enc这个子命令,使用方法 :
加密方法:
openssl enc -e -算法 -a -salt -in 原文件 -out 加密后保存的文件
解密方法:
openssl enc -d -算法 -a -salt -in 加密文件 -out 解密后保存的文件
-e:encrypt加密
-d:decrypt解密
-a:基于base64
-salt:加“盐”,可以理解为添加了一个随即数,每次生成的随机数都是不同的就算使用相同 密码结果也是不同的。
注:加密和解密算法必须使用相同的算法,不然会导致解密出来的内容为乱码
示例1:加密etc目录下的passwd文件并保存到当前目录下
openssl enc -e -des -a -salt -in /etc/passwd -out ./passwd.crypt
加密完后继续编辑文件会发现是一堆密码
解密文件
openssl enc -d -des -a -salt -in passwd.crypt -out passwd
再次打开此文件会发文件正常使用
OpenSSL 实现非对称加密,也就是所说的公钥和私钥,使用genrsa子命令,非对称加密是通过生成私钥来提取公钥因此私钥不可以让除当前用户以外的任何用户可以查看到。
加密方法:
(umask 077;openssl genrsa -out 私钥保存位置 加密长度)
这里的括号代表在子进程中运行因为要修改umask值并且这行命令运行完成后子shell就会退出并不会影响到当前系统中的umask值,使用分号代表在同一行执行命令
提取公钥
openssl rsa -in 私钥 -pubout
实例2:生成私钥文件并且提取出公钥
(umask 077; openssl genrsa -out crypt.key 2048)
提取公钥:
openssl rsa -in crypt.key -pubout > pub.key
OpenSSL实现单向加密一般用于校验文件完整性操作,常用有md5和sha1等。(文件被修改后md5值和sha值都会改变)
加密方法:
openssl dgst -加密算法 文件路径
示例3:获取文件md5值
openssl dgst -md5 passwd
以上加密方法都可以使用–help来获取帮助信息也可以使用man手册页查看帮助信息
openssl enc | genrsa | dgst –help或者man enc | genrsa | dgst