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、加解密过程描述
 

wKioL1VmfdHQBv2ZAAHJiqvXyto929.jpg

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