openssl加解密原理及私有CA的建立

一、openssl加解密原理

数据加密解密过程
数据加密需要实现的功能:数据私密性,数据完整性,身份认证和秘钥交换。

美国NIST,为了计算机的安全,提出了几个要求:
 1、数据保密性
   数据保密性
   隐私性
 2、完整性
   数据完整性
   系统完整性

3、可用性

4、真实性 && 可追溯性

OSI:x.800
  安全攻击:
   被动攻击:窃听
   主动攻击:伪装、重播、消息修改、拒绝服务
  安全机制:
   加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证
  安全服务:
   认证
   访问控制
   数据保密性
    连接保密性
    无连接保密性
    选择域保密性
    流量保密性
   数据完整性
   不可否认性

1.1、密码算法和协议

1.1.2、对称加密
       采用单密码系统的加密算法,同一个密钥可以同时用作信息的加密和解密,也称做单密钥加密。
     常用的对称加密算法:
  DES (56)
  3DES
  AES (128,192,256,384,512)
  Blowfish
  Twofish
  IDEA
  RC6
  CAST5

明文:clear text, plain text
 密钥:
 密文:
 加密、解密算法

特性:
   1、加密、解密使用同一口令;
   2、将明文分隔成固定大小的块,逐个进行加密

优点:算法公开、计算量小、加密速度快、加密效率高。

缺陷:
   1、密钥过多; 2、密钥传输;
   密钥交换、身份验正、数据完整性

1.1.2、公钥加密
非对称加密
  密钥:public key, secret key
   p/s

公钥:其密钥长度非常长

身份认证:
   密钥交换
  常用的公钥加密加密算法:
   RSA, DSA, EIGamal
   RSA

1.1.3、单向加密
提取数据的惟一的特征码,用来校验数据在传输过程中是否被修改。
     1、定长输出;
     2、不可逆;
     3、雪崩效应

常用的单向加密加密算法:
     md5: 128bits
     sha1: 160bits
             SHA256、SHA384、SHA512
             HMAC         
eg:         md5sum /tmp/fstab
             sha512sum  /tmp/fstab
     Bob --> data, fingerprint --> data,

数据指纹
Bob使用自己的私钥加密生成特征码,别人再拿Bob的公钥进行解密
能用公钥解开特征码,保证了数据来源,解开后再加密和原有特征码一致,保证了数据的完整性。

1.1.4、认证协议
 密钥交换:IKE(Internet Key Exchange)
         DH算法

1.2、加解密过程描述

1、 Bob生成数据
2、 用单向加密算法计算这段数据的特征码
3、 用自己的私钥加密这段特征码并附加在数据的后面——用自己的私钥进行签名
4、 再生成一个一次性对称密钥将这个数据整个加密
5、 加密完后再用Alice的公钥去加密这个一次性密码
6、 放在这个数据的后面一并发给Alice。
7、 Alice得到后先用自己的私钥解密这段密码
8、 拿到密码后解密加密的数据,再用同样的单向加密算法计算这个特征码
9、 并用Bob的公钥去解密单向加密算法生成的特征码,验证对方身份
10、 看计算和解密的特征码是否一致。
11、 Alice接收数据

Bob把证书给Alice。Alice得到证书后先用CA的公钥解密特征码,能解密才行,再用同样的单向加密算法解密这段特征码,两个特征码一致才行。

密钥交换:IKE(Internet Key Exchange)
  DH算法

Bob把信息发给CA,CA用单向加密算法计算整个证书的特征码,并用私钥加密这段特征码并附加在证书的后面,Bob把证书给Alice。Alice得到证书后先用CA的公钥解密特征码,能解密才行,再用同样的单向加密算法解密这段特征码,两个特征码一致才行。

1.3、公钥基础设施PKI
 PKI:Public Key Infrastructure
   公钥基础设施
  签证机构:CA
  注册机构:RA
  证书吊销列表:CRL
  证书存取库:

用户 ->证书存取库-> RA -> CA
                 ->证书吊销列表

x.509: 定义了证书结构和认证协议标准;
  IP安全、TLS/SSL和S/MIME

证书结构
    证书版本号
  证书序列号
    算法参数
    发行者名称
    有效期限
    证书拥有者名称(主题名称)
    公钥信息
  发行者的ID
    证书拥有者信息(主题ID)
    CA的签名

SSL: Secure Socket Layer
  sslv1, sslv2, sslv3

TLS: Transport Layer Security
  tlsv1

http(80/tcp) --> ssl --> https(443/tcp)

Linux:gpg, (pgp); openssl

1.4、openssl的运用
      全名:开放式安全套接层协议
   OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并通过丰富的应用程序供测试或其他目的使用。
     SSL协议标准目标是保证两个应用间通信的保密性和可靠性,可在服务器段和用户端同时实现支持。
    SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认知,还可选择对用户进行认知。SSL协议要求建立在可靠的传输层协议(TCP)上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成了加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

openssl: 多用途命令行工具,各功能分别使用子命令实现
  libcrypto: 公共加密库
  libssl: ssl协议的实现
 
 openssl命令工具:
 # openssl version

1.4.1、openssl基本用法
查看是否安装:rpm -ql openssl
Standar commands: 命令功能
Message Digest command: 信息摘要支持的算法
Cipher: 加密支持的算法
查看openssl的安装文件,配置之前可以先去读/etc/pki/tls/openssl.cnf配置文件,了解openssl工具家目录下各个文件夹的作用。这里看到CA的家目录是在/etc/pki/CA/,现在看下里面的目录结构
certs: 签发证书存放的地方
private:存放CA的私钥
crl:吊销的证书存放的地方
newcerts:签发新证书存放的地方
serial:签发证书的序列号(需创建),serial起始序列号需要制定
index.txt:数据库的索引文件(需创建)
crlnumber:吊销的证书序列号(需创建)

openssl命令选项:
-e 进行加密操作,可以不写默认为加密
-d 进行解密操作
   -a 当进行加解密时,它只对数据进行运算,有时需要进行base64转换。设置此选项后,加密结果进行base64编码;解密前先进行base64解码。
-salt 加密过后放在密码最前面的一段字符串
-in 读取那个文件进行加密
-out 输出到哪里
-des3 指定算法

1.4.2、对称加密中的openssl
  工具:gpg, openssl enc
  算法:DES, 3DES, AES, Blowfish, Twofish, RC6, idea, CAST5

# openssl enc -des3 -a -salt -in /path/from/somefile -out /path/to/somecipherfile
  #openssl enc -d -des3 -a -salt -in /path/from/somecipherfile  -out /path/to/somefile

注意:enc  -ciphername 表示对称算法名字
      -d 进行解密操作
      -a 当进行加解密时,它只对数据进行运算,有时需要进行base64转换。设置此选项后,加密结果进行base64编码;解密前先进行base64解码。
      -salt 加密过后放在密码最前面的一段字符串

1.4.3、单向加密中的openssl
  验证数据特征码的机制
  特性:
   One-Way
   Collison-free
  算法:
   md5: 128bits
   sha1: 160bits
   sha256
   sha384
   sha512

# openssl dgst [-md5|-sha1] [-out /path/to/filename] /path/from/somefile

openssl dgst主要用于数据摘要,它也可以用于数据签名以及验证签名,默认md5.

MAC: 消息摘要码,单向加密的一种延伸类的应用
 应用:用于实现在网络通信中保证所传输的数据的完整性

机制:
    CBC-MAC
    HMAC:使用md5或sha1算法

用户密码:passwd命令计算一个密钥的哈希值或者计算列表中的每个密钥的hash值
  # openssl passwd -1 -salt SALT
注意:-1 用MD5基于BSD的密钥算法

生成随机数:
  # openssl rand -base64|-hex  num

eg:openssl passwd -1 -salt `openssl rand -hex 4`

1.4.4、公钥加密的openssl
  算法:RSA, EIGamal
  工具:gpg, openssl rsautl

数字签名:
  算法:RSA, EIGamal, DSA

DSA: Digital Signature Algorithm
  DSS: Digital Signature Standard

密钥交换:IKE
  算法:公钥加密、DH
   Diffie-Hellman

生成密钥:
  # (umask 077; openssl genrsa -out /path/to/keyfile NUMBEROFBITS )
     -out指定生成文件的,需要注意的是这个文件里包含了公钥和私钥两部分,也就是说这个文件即可以用来加密也可以用来解密。
     eg:opessl genrsa -out rsa_pri.pem 1024

提出公钥:
  # openssl rsa -in /path/from/private_key_file -pubout

二、openssl建立私有CA

2.1、建立私有CA总体流程
  1、生成密钥
  2、自签署证书

节点:
   1、生成密钥对儿
   2、生成证书签署请求
   3、把请求发送给CA

CA:
   1、验正请求者信息;
   2、签署证书;
   3、把签好的证书发送给请求者;
 Openca

2.2、建立私有CA具体流程

2.2.1、建立CA服务器

2.2.1.1、生成密钥
 公钥加密的算法
#(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

命令详解:
umask 077:保证秘钥文件其他人无读写权限,在()内执行,只对当前子shell有效
-out /path/to/somefile:指定生成秘钥位置  
2048:秘钥长度,可自定义

#openssl rsa -in private /etc/pki/CA/private/cakey.pem -pubout -text     //可提取公钥

2.2.1.2、自签证书
#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

req: 生成证书签署请求
     -news: 新请求
     -key /path/to/keyfile: 指定私钥文件
     -out /path/to/somefile:
     -x509: 生成自签署证书
     -days n: 有效天数

2.2.1.3、初始化工作环境
   # touch /etc/pki/CA/{index.txt,serial}
   # echo 01 > /etc/pki/CA/serial
命令详解:
index.txt:证书缩影数据库
serial:签署证书编号文件
echo 01 > serial #设定编号初始值

2.2.2、节点申请证书

2.2.2.1、生成密钥对儿
我们给web服务生成请求用于https,在其配置文件目录创建用于保存私钥和证书的目录
# mkdir /etc/httpd/ssl
# cd /etc/httpd/ssl
# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

2.2.2.2、生成证书签署请求
# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr

2.2.2.3、把签署请求文件发送给CA服务
# scp
eg:scp httpd.csr 172.11.100.7:/etc/pki/CA/csr/

2.2.3、CA签署证书

2.2.3.1、验正证书中的信息

2.2.3.2、签署证书
#openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N

eg:#openssl ca -in /etc/pki/CA/csr/httpd.csr  /etc/pki/CA/csr/httpd.crt -days 1000

2.2.3.3、发送给请求者
scp /etc/pki/CA/csr/httpd.crt  172.11.100.6:/etc/httpd/ssl

2.3、吊销证书

(一)节点
1、客户端获取证书serial
# openssl x509 -in /path/to/certificate_file.crt -noout -serial -subject
eg:openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -serial -subject

(二) CA
2、根据节点提交的serial和subject信息来验正与index.txt文件中的信息是否一致;
cat /etc/pki/CA/index.txt

3、吊销证书
   #cd /etc/pki/CA/newcerts
   #ls -ltr
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

4、生成吊销证书的编号(如果是第一次吊销)
# echo 00 > /etc/pki/CA/crlnumber

5、更新证书吊销列表
  # cd /etc/pki/CA/crl/
  # openssl ca -gencrl -out thisca.crl

如果需要,查看crl文件的内容:
 # openssl crl -in /path/to/crlfile.crl -noout -text

时间: 2024-10-09 20:52:54

openssl加解密原理及私有CA的建立的相关文章

数据加解密原理及私有CA的搭建以及撤销

简单罗列基础命令,只分享我的想法! 一.数据加/解密原理说明 客户端双方在互联网上通信,为了保证信息的安全,有了SSL协议,就是在TCP/IP模型传输层之上应用层之下,叫做安全的套接字层.目的就是为了把应用层的数据进行加密传递给客户端,而在Linux上实现这个协议或这个功能的软件就是OpenSSL. 原理其实就是,双方客户端的SSL层进行协商应用哪种加/解密的方式,ok,如果双方SSL达成一致,上层应用协议又通过SSL进行加密的话,那么双方在互联网上传输的数据就是加密的,这个加密之后的数据到达客

Openssl加密解密原理与命令使用--尚未完善

Openssl加密解密原理: 示例: 比如A与B通信发送数据: 加密原理: 在A把要发送的内容通过单向加密方式进行数据指纹计算,计算出数据指纹后,会用自己的私钥加密数据指纹,并把加密的数据指纹添加到原数据的后面.然后对整个数据(原数据+数据指纹)进行对称加密算法进行计算(让明文转换成密文),得出的数据为整个数据的密码,再用B的公钥进行这个密码进行加密,并放到这个数据的后面一并发给B. 解密原理: 1.B用自己的私钥能够解密---------至此说明数据保密的. 2.B用私钥解密出来的密码,去解密

AES CBC/CTR 加解密原理

So, lets look at how CBC works first. The following picture shows the encryption when using CBC (in this case, using AES as the cipher). Basically, Cipher-Block-Chaining means that previous to putting the cleartext data block into the cipher itself (

linux网络数据传输的加密,解密以及基于openssl的私有CA的建立

网络数据传输的安全性是计算机通信领域的重要课题,数据加密就是保证数据安全性的主要方法.所谓数据加密,即是通过某种算法和秘钥对数据明文进行处理,从而得到密文的过程.计算机网络通信过程中的加密形式主要有以下几种: 1,对称加密,用同一个密钥对信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密.对称加密算法的优点是算法公开.计算量小.加密速度快.加密效率高,但秘钥有时会很多,难以管理.而且秘钥交换又是一个难以解决的问题. 常见算法: DES:Data Encryption Standard,

openssl的加密、解密以及构建私有CA

SSL.TLS介绍: SSL:安全套接字(Secure Socket Layer,SSL)协议是Web浏览器与Web服务器之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密. TLS:安全传输层协议(Transport Layer Security)用于在两个通信应用程序之间提供保密性和数据完整性.该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake).较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面,与具体

openssl 加解密学习笔记

首先最近接到一个项目,这个项目中需要用到RSA的加密解密,因为之前没有接触过,在网上找了些资料,然后自己测试后发现其实使用openssl来进行加解密挺简单的,但是网上百度出来的很多又是一样的,有时候帮助不是很大,所以才想要写下来自己在搞整个加密过程遇到的一些问题,方便自己以后回头查看,也可能会帮到遇到同样的童鞋. 废话不多说,我接到的这个项目呢,有几个地方是需要用到RSA的加解密.1.使用.pfx格式的私钥签名.2.使用.cer的公钥文件进行加密操作.3.使用给定的指数与模进行公钥加密.下面有些

加密解密基础及私有CA的实现-2015092801

1. 加密解密简述 2.加密算法 3.加密解密步骤 4.使用openssl自建私有CA 加密解密基础: 由于互联网的数据传输基本上都是明文的(如ftp.http.telnet等),而往往有些数据在互联网传输对于传输方来讲,确实涉及隐私或是一些敏感的内容不想让互联网上其他人看到,因此,引入了加密的机制. 最早起的加密,采用移位的方式对数据进行加密,如数据数"abcd",其对应的在互联网上传输的内容是"efgh".后来的加密方式是采用"密码对照本",

curses-键盘编码-openssl加解密【转】

本文转载自;https://zhuanlan.zhihu.com/p/26164115 1.1 键盘编码 按键过程:当用户按下某个键时, 1.键盘会检测到这个动作,并通过键盘控制器把扫描码(scan code)传送到计算机:键盘扫描码跟具体的硬件有关的,不同厂商对同一个键的扫描码有可能不同.2.计算机接收到扫描码后,将其交给键盘驱动程序:3.键盘驱动程序把这个扫描码转换为键盘虚拟码:虚拟码与具体硬件无关,不同厂商的键盘,同一个键的虚拟码总是相同的.然后,键盘驱动程序把该键盘操作的扫描码和虚拟码以

Openssl加密文件及创建私有CA及证书

# cat /etc/redhat-release  CentOS release 6.6 (Final) # uname -r 2.6.32-504.el6.x86_64 首先我们先演示加密文件的方式: 拷贝一个文件到当前目录,使用openssl enc命令进行加密文件测试. 加密所用到的选项 # -e --> 加密选项 # -d --> 解密选项 # -des3 --> 选择加密的算法 # -a --> 基于文件进行编码 # -salt --> 自动添加杂质 # -in