标签: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审核通过则颁发证书。所以你申请证书需要做的是:
自行生成一对私钥和公钥
把公钥和域名等其他必要信息按照固定格式填写并提交给CA
在以后的通讯中客户端访问网站的时候会获取该网站的证书,然后去验证合法性、之后还会查看有效期、最后还会去找CA查看该证书是否被吊销了,都检查过了以后才能安全的访问。
我们知道openssl可以生成公钥和私钥也可以建立CA,我们就从这两个方面来进行演示。两台机器
Linux01为服务器端--CA服务器
Linux02为客户端--申请证书
演示:建立CA
如果你是在企业内部小范围应用,可以使用这个工具来建立自己的CA然后给自己的服务器发放证书并管理吊销列表等操作。
构建私有CA的配置文件在/etc/pki/tls/openssl.cnf,一般无需修改,但里面的一些配置要了解。
参数 | 说明 |
dir | 如果想把openssl做成CA,那么这个CA的工作目录是哪里 |
certs | CA签发的证书放在这里,默认是相对于CA的工作目录下面的 |
crl_dir | CA吊销的证书列表放在那里 |
database | 索引文件数据库,自动生成这个文件,你通过这个文件可以快速查看有哪些证书 |
new_certs_dir | 刚刚签署的证书放在哪里 |
certificate | CA自己的证书在哪里,这里是公钥 |
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
原文地址:http://littledevil.blog.51cto.com/9445436/1925273