加密解密技术基础及用OpenSSL创建私有CA

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/article/details/84504386

1、加密解密技术基础

(1)进程通信
传输层协议有TCP,UDP,SCTP等,端口号port表示进程地址,进程向内核注册独占使用某端口。
同一主机上的进程间通信方式:进程间通信(IPC), 消息队列(message queue),共享内存(shm), 旗语(semerphor)。
不同主机上的进程间通信:socket,远程过程调用(RPC)。
监听模式:LISTEN (ip:port)
(2)安全及攻击
安全的目标:保密性(confidentiality)、完整性(integrity)、可用性(availability)。
攻击类型:
1)威胁保密性的攻击:窃听、通信量分析;
2)威胁完整性的攻击:更改、伪装、重放、否认;
3)威胁可用性的攻击:拒绝服务(DoS);
解决方案:技术(加密和解密)、服务(用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务)。
(3)加密和解密
传统加密方法:替代加密方法、置换加密方法;
现代加密方法:现代块加密方法。
服务:认证机制、访问控制机制。
密钥算法和协议分为四类:对称加密、公钥加密、单向加密、认证协议。
(4)加密算法和协议
1)对称加密:加密和解密使用同一个密钥;
DES:Data Encryption Standard;
3DES:Triple DES;
AES:Advanced Encryption Standard,(128bits, 192bits, 256bits, 384bits);
Blowfish、Twofish、IDEA、RC6、CAST5;
特性:

  1. 加密、解密使用同一个密钥;
  2. 将原始数据分割成为固定大小的块,逐个进行加密;

缺陷:

  1. 密钥过多;
  2. 密钥分发困难;

2)公钥加密:密钥分为公钥与私钥;
公钥:从私钥中提取产生,可公开给所有人,pubkey;
私钥:通过工具创建,使用者自己留存,必须保证其私密性,secret key;
特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然。
用途:
数字签名:主要在于让接收方确认发送方的身份;
密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;
数据加密:不常用,比对称加密要慢3个数量级;
算法:RSA, DSA, ELGamal;
DSS: Digital Signature Standard
DSA:Digital Signature Algorithm
3)单向加密:即提出数据指纹,只能加密,不能解密;
特性:定长输出、雪崩效应;
功能:完整性;
算法:
MD5:Message Digest 5,128bits;
SHA1:Secure Hash Algorithm 1,160bits;还有SHA224,SHA256,SHA384,SHA512。
4)密钥交换: IKE(Internet Key Exchange)

  1. 公钥加密;
  2. DH(Deffie-Hellman,迪菲-赫尔曼),ECDH(椭圆曲线DH),ECDHE(临时椭圆曲线DH);

DH算法过程:

  1. A:p, g
    B:p, g
  2. A:x
    –> p^x%g ==> B
    B:y
    –> p^y%g ==> A
  3. A:(p^ y%g)^ x=p^yx%g
    B:(p^ x%g)^ y=p^xy%g

(5)PKI:Public Key Infrastructure,公钥基础设施
分为以下组件:
签证机构(CA)、注册机构(RA)、证书吊销列表(CRL)、证书存取库。
X.509v3定义了证书的结构以及认证协议标准:版本号、序列号、签名算法ID、发行者名称、有效期限、主体名称、主体公钥、发行者的惟一标识、主体的惟一标识、扩展、发行者的签名;

2、SSL

(1)SSL简介
SSL(Secure sockets Layer,安全套接字层),是Netscape于1994年提出的,共有V1.0,V2.0,V3.0版本。TLS(Transport Layer Security,传输层安全),是IETF于1999年提出的,共有V1.0,V1.1,V1.2,V1.3版本。SSL V3.0版本被发现有重大漏洞,现在已基本不使用,现在使用的都是TLS。
SSL的分层设计:

  1. 最底层:基础算法原语的实现,aes, rsa, md5
  2. 向上一层:各种算法的实现;
  3. 再向上一层:组合算法实现的半成品;
  4. 用各种组件拼装而成的各种成品密码学协议软件;

SSL协议的开源实现是OpenSSL,OpenSSL由三部分组成:libencrypto库(主要由开发者使用),libssl库(主要由开发者使用)和openssl多用途命令行工具。http + ssl --> https,Linux系统上的安全协议:OpenSSL(ssl协议的开源实现), GPG(pgp协议的开源实现)。
(2)SSL会话
SSL会话主要三步:
1)客户端向服务器端索要并验正证书;
2)双方协商生成“会话密钥”;
3)双方采用“会话密钥”进行加密通信;
SSL会话过程:
第一阶段:ClientHello,发送以下内容:
支持的协议版本,比如tls 1.2;
客户端生成一个随机数,稍后用户生成“会话密钥”;
支持的加密算法,比如AES、3DES、RSA;
支持的压缩算法;
第二阶段:ServerHello:
确认使用的加密通信协议版本,比如tls 1.2;
服务器端生成一个随机数,稍后用于生成“会话密钥”
确认使用的加密方法;
服务器证书;
第三阶段:
验证服务器证书,在确认无误后取出其公钥;(验证以下内容:发证机构、证书完整性、证书持有者、证书有效期、吊销列表);
发送以下信息给服务器端:
一个随机数;
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
客户端握手结束通知;
第四阶段:
收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;
向客户端发送如下信息:
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
服务端握手结束通知;

3、OpenSSL

(1)OpenSSL命令
OpenSSL有众多子命令,分为三类:标准命令、消息摘要命令(dgst子命令)和加密命令(enc子命令)。
标准命令: enc, ca, req, genrsa, …
(2)各种加密算法及工具
1)对称加密:
工具:openssl enc, gpg
支持的算法:3des, aes, blowfish, towfish
enc命令:
加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:~]# openssl enc -d -des3 -a -salt -out fstab -in fstab.ciphertext
2)单向加密:
工具:openssl dgst, md5sum, sha1sum, sha224sum, …
dgst命令:~]# openssl dgst -md5 /PATH/TO/SOMEFILE
3)生成用户密码:
工具:passwd, openssl passwd
命令:openssl passwd -1 -salt SALT
4)生成随机数:
工具:openssl rand
~]# openssl rand -hex NUM
~]# openssl rand -base NUM
5)公钥加密解密:
算法:RSA,ELGamal
工具:openssl rsautl, gpg
6)数字签名:
算法:RSA, DSA, ELGamal
工具:openssl rsautl, gpg
7)密钥交换:
算法:DH
工具:openssl rsautl, gpg
8)生成密钥:
生成私钥: ~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
提出公钥: ~]# openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout
(3)Linux系统上的随机数生成器
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞;
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;伪随机数不够安全;
熵池中随机数的来源:
1)硬盘IO中断时间间隔;
2)键盘IO中断时间间隔;

4、用OpenSSL搭建私有CA

(1)背景介绍
CA分为:公共信任的CA和私有CA;
建立私有CA可用工具:OpenSSL和OpenCA。
OpenSSL命令的配置文件为:/etc/pki/tls/openssl.cnf。
构建私有CA是在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可。
(2)私有CA搭建步骤
1)生成私钥:~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2)生成自签证书:~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
-new:生成新证书签署请求;
-x509:生成自签格式证书,专用于创建私有CA时;
-key:生成请求时用到的私有文件路径;
-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
-days:证书的有效时长,单位是day;
3)为CA提供所需的目录及文件;
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial
4)要用到证书进行安全通信的服务器,需要向CA请求签署证书(以httpd为例):

  1. 用到证书的主机生成私钥;
    ~]# mkdir /etc/httpd/ssl ~]# mkdir /etc/httpd/ssl
    ~]# cd /etc/httpd/ssl
    ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
  2. 生成证书签署请求
    ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
  3. 将请求通过可靠方式发送给CA主机;
  4. 在CA主机上签署证书;在CA主机上签署证书:~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

5)查看证书中的信息:~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
6)吊销证书:

  1. 客户端获取要吊销的证书的serial(在使用证书的主机执行):
    ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
  2. CA主机吊销证书:先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;
    吊销命令:# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
    其中的SERIAL要换成证书真正的序列号;
  3. 生成吊销证书的吊销编号(第一次吊销证书时执行):# echo 01 > /etc/pki/CA/crlnumber
  4. 更新证书吊销列表:# openssl ca -gencrl -out thisca.crl
  5. 查看crl文件:# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

猜你喜欢

转载自blog.csdn.net/gongxifacai_believe/article/details/84504386