Openssl及加密解密(二)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的工作目录是哪里
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以后系统提示找不到共享库文件

时间: 2024-10-06 09:55:27

Openssl及加密解密(二)openssl的相关文章

linux下加密解密之OpenSSL

一.为什么要加密 在网络这个大森林里面,所有的数据传输都是不安全的,在数据传输中必须要给数据加密,以防止被别人劫持盗取 二.数据在网络中怎么传输 数据从发送出去到目的地都经过了哪些步骤? 1.ISO国际标准组织定义了数据在网络传输中的七层模型:数据从 应用层--会话层--表达层--传输层--网络层--数据链路层--物理层 逐层封装传输,数据到达最底层后传送出去,到达目标主机后在从底层往上层传输并逐层解压封装. 2.在TCP/IP定义的四层模型里,数据传输也是一样的道理,应用层--传输层--网络层

加密/解密&利用OpenSSL构建私有CA

在互联网安全及个人隐私状况日益严峻的今天,加密技术变得尤为重要并且不可或缺.在密码雪中,加密是指将明文信息隐匿起来,使之在缺少特殊信息时不可读.本文所讲的主要是在互联网传输数据时所用的加密方式.我们都知道OSI&TCP/IP网络参考模型,通常我们会把这两个模型分为通信子网和资源子网两部分,但是在构建网络的初期,信息从发送端送达到接受端都非常困难所以在设计模型之初并没有考虑过多的安全因素,以至于通信子网和资源子网都没有涉及到数据加密的内容.为了解决这个问题,网景公司在资源子网和通信子网之间添加了半

加密解密与OpenSSL建立私有CA

安全规范: 1)NIST规定的数据安全性标准: ①保密性:数据保密性:隐私性: ②完整性:数据完整性:系统完整性 ③可用性:数据与服务随时可用 2)OSI,X.800:定义了安全攻击,安全机制,安全服务 ①安全攻击 被动攻击:监听 主动攻击:报文伪装.重放.消息篡改.拒绝服务(将有限资源耗尽,使得正常资源无法访问DDOS) ②安全机制 加密/解密,数字签名,访问控制,数据完整性保证,认证交换,数据填充,路由控制,人为公证 ③安全服务 认证 访问控制 数据保密性: 连接保密性 无连接保密性 选择域

网络通信中的加密解密及openssl和创建私有CA详解

1.为什么网络通信要进行数据加密? 我们在网络进行通信时候,如果数据以明文的方式传输,在传输过程中,数据可以被篡改.窃听.伪装等,如图: 当A向B通信时,C可以在数据传输的过程,将数据进行抓包,例如应用wireshark抓包软件,就可以抓取通信的数据包,进行对抓到的内容进行分析,得出传输数据的内容. 2.数据加密方式有哪些? 从分类上划分,加密技术有四种: 1)对称加密 ◆ 对称加密:加密和解密使用同一个密钥 ·DES:Data Encryption Standard,56bits ·3DES:

加密解密、openssl、私有CA创建过程

一.加密解密 加密技术是对信息进行编码和解码的技术,编码是将原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密),加密技术的要点是加密算法. 明文:发送人.接受人和任何访问消息的人都能理解的消息 密文:明文消息经过某种编码,得到的密文消息 加密:将明文消息变成密文消息 解密:将密文消息变成明文消息 算法:取一个输入文本,产生一个输出文本 加密算法:发送方进行加密的算法 解密算法:接收方进行解密的算法 单向加密算法:只能加密,不能解密,其作用是提取数据的特征码,来验证数据的完

php7实现基于openssl的加密解密方法

还需要注意的是加密字符串长度问题,如果加密字符串长度太长需要进行分段加解密,如下代码: 加密:(公匙加密,私密一般用来解密) function encrypt($originalData){ $publicKeyFilePath = '/www/ceshi/rsa_public_key.pem'; extension_loaded('openssl') or die('php需要openssl扩展支持'); file_exists($publicKeyFilePath) or die('公钥的文

PHP 使用openssl 进行加密 解密

linux下命令直接使用openssl命令生成公钥和私钥,参考openssl 命令如下 # 产生1024位RSA私匙,用3DES加密它,口令为123, # 输出到文件rsa_private_key.pem # openssl genrsa -out rsa_private_key.pem # 从文件rsa_private_key.pem读取私匙 # 生成的公钥匙输出到文件rsa_public_key.pem # openssl rsa -in rsa_private_key.pem -out r

加密解密以及OpenSSL建立私有CA

一次加密通信过程的建立: 发送方: 使用单向加密算法提取数据的 特征码:[单向加密算法] 单向加密>特征码+特征码 使用自己的 私钥 加密 特征码,附加在数据的后面:[公钥加密(非堆成加密)] 公钥加密>[特征码密文+数据] 生成用于 对称加密 的 临时密钥,并用此临时密钥 加密数据和加密的数据特征码.[对称加密] 对称加密>[密文[特征码密文+数据]] 使用接受方的公钥加密 临时密钥,附加在对称加密后的数据后方. 公钥加密(对方)>[临时密钥][密文[特征码密文+数据]] 接受方

Openssl及加密解密(一)数据加密解密及CA原理

明文:plaintxt或者cleartext,也就是没有加密的,直接可以看懂的内容.密文就是通过特殊方式处理过的内容,无法直接看懂. 常见的加密方式: 对称加密 公钥加密 单向加密 对称加密: 加密算法+口令,把要转换的数据也就是明文数据,通过加密算法内部转换明文变成密文.这个算法可能是公开的,但口令只有你自己知道.为了更加安全,那么加密本身不能过于依赖算法,因为算法固定而且一旦算法遭到破解,那么基于这个算法的所有密文都可以破解,所以算法固然重要,但是最重要的是口令,口令可以变,就算算法破解了,