码迷,mamicode.com
首页 > 其他好文 > 详细

Openssl及加密解密(二)openssl

时间:2017-05-13 22:04:57      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:openssl

openssl是一个条件实现了上百种算法、实现了单向加密工具等一组套件,代码量很小但是功能强大。它有三部分组成:

  • libcrypto:通用功能的加密库,软件开发时可以直接调用

  • libssl:实现TLS/SSL的功能

  • openssl:多功能命令行工具,加密、解密、创建CA、证书、一对秘钥等


openssl enc加密解密命令:

技术分享


技术分享

参数说明
-des3是指定加密算法
-a是输出文件按base64内容输出,否则就是二进制的
-in
要加密的文件
-out
加密后的文件
-salt
加盐
-d表示解密

我们建立一个文件进行加密,源文件为

技术分享

openssl enc -des3 -a -salt -in /work/aaa.txt -out /work/aaa.enc

输入两次密码

技术分享

解密刚才的文件

openssl enc -d -des3 -a -salt -in /work/aaa.enc -out /work/aaa.out

技术分享


openssl单向加密:

常见的有md5、sha1、sha256等,系统本身有这些工具如下图:

技术分享

我们现在用openssl dest命令来实现

openssl dgst -md5 FILE

技术分享


openssl非对称加密:

一般私钥用来加密公钥用来解密,但是如果要做电子签名那么就需要用私钥进行加密,公钥进行解密。最常用的是RSA。再次说明公钥不会用来进行数据加密因为速度太慢,通常用来秘钥交换和身份验证。

技术分享


数字签名:

公钥加密私钥解密,我们知道数字签名不会用公钥加密数据本身,而是加密数据的特征码。常用算法RSA、DSA(只能用来做签名无法做加密)。签名本身还是加密,所以这就是说明DSA只能用公钥加密私钥解密,不能反过来。而RSA则可以。


数字证书:

为了保证公钥来源的可靠性。A有CA的公钥,B向CA申请证书且证书(里面包括B的公钥和B的信息)中包含CA的电子签名(CA私钥加密的),B把证书发给A,A用CA的公钥可以解密电子签名来验证有效性。证书格式包括:x509等。该证书里的内容包含申请者的公钥、证书过期时间、申请者的合法身份信息(地址、国家、机构名称等)、证书使用方式、CA的信息、CA的数字签名(CA私钥加密的证书前4项信息的摘要信息)


我们知道在访问电子商务网站或者银行网站的时候都是输入一个域名,你如何知道你访问的这个网站就是那个真正的网站而不是别人伪造的呢?这就是用到了ssl,这个网站都是绑定了证书,你输入的域名则包含在证书中的申请者合法身份信息中。由于客户端信任国际主要CA机构,所以为了让客户端也信任他要访问的网站,那么网站所属公司都要去CA申请证书,那私钥和公钥是谁生成的?显然这一对而私钥和公钥是申请者自己生成的(你不可能让CA给你生成,因为CA如果生成的话那就意味着CA拥有了你私钥),然后把公钥和其他必要信息发给CA,CA审核通过则颁发证书。所以你申请证书需要做的是:

  1. 自行生成一对私钥和公钥

  2. 把公钥和域名等其他必要信息按照固定格式填写并提交给CA

在以后的通讯中客户端访问网站的时候会获取该网站的证书,然后去验证合法性、之后还会查看有效期、最后还会去找CA查看该证书是否被吊销了,都检查过了以后才能安全的访问。


我们知道openssl可以生成公钥和私钥也可以建立CA,我们就从这两个方面来进行演示。两台机器

Linux01为服务器端--CA服务器

Linux02为客户端--申请证书

演示:建立CA

如果你是在企业内部小范围应用,可以使用这个工具来建立自己的CA然后给自己的服务器发放证书并管理吊销列表等操作。

构建私有CA的配置文件在/etc/pki/tls/openssl.cnf,一般无需修改,但里面的一些配置要了解。

技术分享

参数说明
dir如果想把openssl做成CA,那么这个CA的工作目录是哪里
certsCA签发的证书放在这里,默认是相对于CA的工作目录下面的
crl_dirCA吊销的证书列表放在那里
database索引文件数据库,自动生成这个文件,你通过这个文件可以快速查看有哪些证书
new_certs_dir
刚刚签署的证书放在哪里
certificateCA自己的证书在哪里,这里是公钥
serial
当前序列号,CA签发证书的编号
crlnumber
吊销证书的序列号
crl
当前正在使用的CRL,证书吊销列表文件
private_key
CA自己的私钥
RANDFILE
随机数据文件

进入工作目录/etc/pki/CA,生成私钥对

技术分享

通过这个命令生成私钥,公钥是通过从私钥中提取而来的。私钥的名字要和配置文件中的一样

openssl genrsa -out ./private/cakey.pem 2048
#修改权限,不是必须的,只是为了安全。
chmod 600 ./private/cakey.pem

技术分享

技术分享

生成证书,openssl req是一个证书申请工具,同时也可以自签名自己的证书

技术分享

参数说明

-in FILENAME

输入文件,但是通常我们用-key
-key FILENAME指定私钥文件,它会自己从私钥文件中抽取出公钥
-days N有效期限
-x509自签名时使用的证书格式,只有自签名证书时采用
-out FILENAMEA
证书放哪里,只有自签名证书时采用
-new
用于一个新申请
openssl req -new -x509 -key ./private/cakey.pem -out cacert.pem -days 3655

cacert.pem这个也是上面那个配置文件中定义的。执行命令会开始一个向导,输入必要信息。这个信息也可以在上面那个文件中后半部分进行定义,这样就不用每次都输入了。

技术分享

生成缺少的3个基本文件serial、index.txt、crlnumber,创建三个文件

touche ./index.txt serial crlnumber
#有可能需要的是index.txt.attr这个文件,曾经遇到过,所以你也建立一个。

技术分享

初始化serial文件,你写00也行,因为颁发证书总要有一个序号标记。

echo 01 > serial

技术分享

到此CA构建完毕


演示:生成公钥和私钥对儿

我们这里演示给Nginx上的站点申请证书为例,这个证书要放在Nginx的目录中,我这里就建立一个certs的目录,然后申请证书。这个名字我叫做nginx.pri,其实名称无所谓,长度我使用1024.

openssl genrsa -out ./nginx.pri 1024

技术分享

生成证书请求

openssl req -new -key ./nginx.pri -out new_cacert.req

技术分享

我们把生成的请求文件拷贝到CA服务器上,我这里放/tmp下了,其实放哪里都一样,最后你也要使用命令签署这个请求。

scp new_cacert.req 172.16.100.29:/tmp/

技术分享

签发证书(在CA服务器上执行),然后就可以把证书拷贝会客户端服务器上

openssl ca -in /tmp/new_cacert.req -out /tmp/nginx.crt -days 3655

技术分享


编译安装openssl以后系统提示找不到共享库文件

技术分享

本文出自 “小恶魔的家” 博客,请务必保留此出处http://littledevil.blog.51cto.com/9445436/1925273

Openssl及加密解密(二)openssl

标签:openssl

原文地址:http://littledevil.blog.51cto.com/9445436/1925273

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!