openssl加密原理

SSL概述
SSL是SecureSocketLayer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。目前,利用公开密钥技术的SSL协议,已成为Internet上保密通讯的工业标准。安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
通过以上叙述,SSL协议提供的安全信道有以下三个特性:
1、数据的保密性信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。
2、数据的完整性加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。
3、安全验证加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。
OpenSSL概述
目前比较流行的认证服务器之一是OpenSSL认证服务器,是SSL的开源实现,是基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库。它还可以帮我们实现私有证书颁发等功能。OpenSSL项目在EricYoung开发的SSLeay包的基础上,开发一个健壮的、商业等级的、开放源码的工具包用强大的加密算法来实现安全的socket层和传输层安全性,这个项目由全世界的志源者管理和开发OpenSSL工具包和相关的文档。它提供了众多而且复杂的API函数,可惜的是,目前它的文档不全,只能够程序员自已多做工作。它的网址是:http://www.openssl.org  

对称加密算法:
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和查找整理,主要作为参考定义展现给大家。。。绝无侵权之意如有雷同纯属巧合。。。

下面主要介绍ssl原理,openssl加密使用,颁发证书的实验实现过程。

SSL协议的工作流程(ssl原理):
服务器认证阶段:1)客户端向服务器发送一个开始信息(例如“你好,在吗?”)以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的(“你好,在吗?”)信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
SSL会话的建立是基于IP地址实现的。

本次试验实验采用的是依然是redhat5.8
首先安装openssl,( yum install openssl)本人采用的版本是openssl-0.9.8e-22.e15.i386.rpm (可以通过rpm -q openssl查看本机安装版本) 目前官方已更新到OpenSSL 1.0.1c ,请各位学者参考学习编译安装使用。。。

可以使用rpm -ql openssl查看openssl生成的各种文件
其中首先说明一下redhat上的openssl的配置文件放在/etc/pki/tls/openssl.cnf

openssl 对文件的加密及解密:

首先查看一下enc的帮助信息:(首先whatis enc,然后man enc)结果如图所示:
openssl加密和ssl原理
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e][-d] [-a] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-p]

[-P] [-bufsize number] [-nopad] [-debug]

-chipername选项:加密算法,Openssl支持的算法在上面已经列出了,你只需选择其中一种算法即可实现文件加密功能。

-in选项:输入文件,对于加密来说,输入的应该是明文文件;对于解密来说,输入的应该是加密的文件。该选项后面直接跟文件名。

-out选项:输出文件,对于加密来说,输出的应该是加密后的文件名;对于解密来说,输出的应该是明文文件名。

-pass选项:选择输入口令的方式,输入源可以是标准输入设备,命令行输入,文件、变量等。

-e选项:实现加密功能(不使用-d选项的话默认是加密选项)。

-d选项:实现解密功能。

-a和-A选项:对文件进行BASE64编解码操作。

-K选项:手动输入加密密钥(不使用该选项,Openssl会使用口令自动提取加密密钥)。

-IV选项:输入初始变量(不使用该选项,Openssl会使用口令自动提取初始变量)。

-salt选项:是否使用盐值,默认是使用的。

-p选项:打印出加密算法使用的加密密钥。

实例解析:
对称加密:单向加密算法

对initta文件进行加密
首先把inittab复制到根目录下
openssl enc -des3 -salt -a -in inittab -out inittab.des3
输入密码,输入确认密码
如图所示
openssl加密和ssl原理
查看加密结果:
openssl加密和ssl原理
对initta文件进行解密
openssl enc -des3 -d -salt -a -in inittab.des3 -out inittab
输入加密是的密码
查看结果:cat inittab

使用openssl提取特征码:
openssl dgst -sha1 inittab
openssl加密和ssl原理
如果更新inittab的内容则也会更新特征码
openssl加密和ssl原理
使用openssl进行生成密码串
openssl passwd -1
openssl加密和ssl原理
其中如果-salt一致密码串结果会一致
openssl加密和ssl原理

openssl实现私有CA:

1、生成一对密钥
生成RSA,CA私钥,CA私钥用于提供签发CA根证书,CA根证书需要提供给他人下载,使其可以使用此证书对其它证书
openssl genrsa 1024 > server.key
chmod 600 server.key 改权限
2、生成自签署证书
openssl req -new -x509 -key server1024.key -out server.crt -days 365
下面是输入拥有者的信息
1:国家的名称
2:省份名称
3:城市名称
4:公司名称
5:组织名称
6:主机名称
7:管理员邮件地址
openssl加密和ssl原理
这样自签署证书就完成了

查看证书内容:openssl x509 -text -in server.crt
openssl加密和ssl原理
CA服务器:
在发放证书之前首先设置openssl的配置文件
vim /etc/pki/tls/openssl.cnf
把dir=../../CA改为/etc/pki/CA
openssl加密和ssl原理
openssl加密和ssl原理
上面是设置默认。
然后进入/pki/CA文件中进行操作
首先生成一对密钥
生成密钥的方式也可以用(ukask 077; openssl genrsa -out private/cakey.pem 2048 )
然后生成自签署证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem

然后再此目录下必须创建几个目录都是openssl配置文件中所要求的目录和两个文件
mkdir certs newcerts crl
touch index.txt
touch serial 给这个文件一个起始号 echo 01 > serial
这是CA服务器就算建立完成了

下面我们使用web进行测试(此操作只限于本机执行)
假设我们的web配置文件都在httpd文件下所以mkdir /etc/httpd/
在这个目录下首先创建一个ssl放置证书密钥
然后创建一个私钥来提取公钥(任何一个用到证书都要有私钥和公钥)
(ukask 077; openssl genrsa -out httpd.key 1024 )
然后去CA服务器处申请证书
首先填写申请书:
openssl req -new -key httpd.key -out httpd.csr
然后让CA签发证书
openssl加密和ssl原理
openssl ca -in httpd.csr -out httpd.cet -days 365
openssl加密和ssl原理
到此CA签发证书已完成。
可能过程不太详细如有疑问请留言。。。谢谢支持。。。

编译:openssl加密和ssl原理

地址:http://www.07net01.com/linux/openssljiamihesslyuanli_22243_1351442057.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值