OpenSSL原理及基本使用

OpenSSL原理算法

  SSL:SSL是Secure Sockets Layer(安全套接层协议)的缩写,能够在Internet上提供秘密性传输。Netscape(网景)公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通讯的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通信的工业标准。shell

SSL能使用户/服务器应用之间的通讯不被***者窃听,而且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求创建在可靠的传输层协议(TCP)之上。SSL协议的优点在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地创建于SSL协议之上。SSL协议在应用层协议通讯以前就已经完成加密算法、通讯密钥的协商及服务器认证工做。在此以后应用层协议所传送的数据都会被加密,从而保证通讯的私密性。centos

OpenSSL开放式安全套接层协议:是一个强大的安全套接字层密码库,囊括主要的密码算法、经常使用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。浏览器

OpenSSL整个软件包大概能够分红三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构天然也是围绕这三个功能部分进行规划的。安全

基本功能有:主要的密码算法(MD五、SHA、DH、BASE64等等)、经常使用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。服务器

辅助功能:如从口令生成密钥的API,证书签发和管理中的配置文件机制等ide

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

wKiom1SO4unTyWJRAAEA7fbmrqk055.jpg

能够看出当前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

wKioL1SO5F6gROxYAAF_zmcLt2E831.jpg

        加密完后继续编辑文件会发现是一堆密码

wKiom1SO4-3C7SXsAAXkXLQWgC4248.jpg

        解密文件

        openssl enc -d -des -a -salt -in passwd.crypt -out passwd

wKiom1SO5Jajr9xrAAFV6WjOTvo195.jpg

        再次打开此文件会发文件正常使用

wKiom1SO5Maj3G8MAAO0cjjFcOY862.jpg

OpenSSL 实现非对称加密,也就是所说的公钥和私钥,使用genrsa子命令,非对称加密是经过生成私钥来提取公钥所以私钥不可让除当前用户之外的任何用户能够查看到。

加密方法:

        (umask 077;openssl genrsa -out 私钥保存位置  加密长度)

这里的括号表明在子进程中运行由于要修改umask值而且这行命令运行完成后子shell就会退出并不会影响到当前系统中的umask值,使用分号表明在同一行执行命令

        提取公钥

        openssl rsa -in 私钥 -pubout

        实例2:生成私钥文件而且提取出公钥

(umask 077; openssl genrsa -out crypt.key 2048)

wKiom1SO5TWhNMrtAAGwRLVZuZk408.jpg

提取公钥:

openssl rsa -in crypt.key -pubout > pub.key

wKioL1SO5frwKIq8AAFEye08wz0562.jpg

        OpenSSL实现单向加密通常用于校验文件完整性操做,经常使用有md5和sha1等。(文件被修改后md5值和sha值都会改变)

        加密方法:

        openssl dgst -加密算法 文件路径

        

        示例3:获取文件md5值

        openssl dgst -md5 passwd

wKiom1SO5c3CTVQVAAEUum4IwX4258.jpg

        以上加密方法均可以使用--help来获取帮助信息也能够使用man手册页查看帮助信息

        openssl enc | genrsa | dgst --help或者man enc | genrsa | dgst