加密、解密原理和openssl自建CA过程详解

2017-06-19  本文已影响819人  hjqjk

一、加密和解密相关知识简介

1、信息安全标准

NIST(National Institute of Standards and Technology)美国国家标准与技术研究院,制定了网络信息安全与保密的三个要素:(这三大要素被简称为:CIA)

  • 保密性(confidentiality):信息不泄露给非授权用户、实体或过程,或供其利用的特性。(一般包括数据保密性、隐私性。)

尽管三要素能保证网络信息安全和保密,但从很多从事网络安全的研究人员的反馈发现,除了CIA外,还有另外两个标准也被经常提醒:

  • 真实性:一个实体是真实的,是可被验证的。要确保数据发送方的确是它所声称的那个人。

2、OSI组织定义的安全框架x.800

安全攻击:

安全机制:

安全服务:

3、加密方式和算法

(1)、对称加密

对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密。
对称加密的算法:

DES : 数据加密标准(56位密钥)
3DES
AES :高级加密标准(128,192,256,384,512)
Blowfish
Twofish
IDEA
RC6
CAST5

对称加密的特性:

对称加密的缺陷:

(2)、公钥加密

公钥加密:由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。

密钥:public key, secret key (p/s)
公钥是从私钥中提取出来的。
公钥加密,只能私钥解密。私钥加密,也只能公钥解密。

常用加密算法:

RSA
DSA:只能用于身份验证
EIGamal

(3)、单向加密

单向加密:不可逆的加密
单向加密特性:

单向加密算法:

MD5(128位)、SHA1、SHA256、SHA384、SHA512

二、加密和解密的过程和原理

首先问一个问题:

假设B与A通信,B向A发送报文,怎么才能保证B的报文安全、可靠地被A接收到,并且保证报文数据的完整性?

接下来围绕着这个问题来说明一下。

加密和解密的过程和原理图

加密解密过程和原理详细说明:

1、发送端B

2、接收端A

问题:以上这种方式能保证数据完整性、身份验证和数据的保密性,在加密和解密的过程中都要用到对方的公钥,如何在传输过程中安全可靠地获得对方的公钥就成了关键的一环,那该如何做呢?
答:安全可靠地获取对方的公钥靠CA(Certificate Authority )证书授权中心来实现。

因而接下来,我们来说说CA。

三、CA(证书授权中心)

1、CA证书标准:x.509

x.509: 定义了证书结构和认证协议标准;(基于公钥和数字签名)
用于:IP安全、TLS/SSL(传输层安全)和S/MIME(安全电子邮件通信)


x.509证书标准详细说明:

(1)版本号(默认为1,如果有多个扩展,可能为3)
(2)证书序列号(是一个整数,在CA中唯一标识,表明发行了多少个证书)
(3)算法参数 (标志用了那种算法)
(4)发行者的名称(CA自己的名字)
(5)有效期限
(6)主体名称(证书拥有者名称)(很关键!!!)(个人用户使用的是个人用户名,主机使用的必须是主机名而不是ip地址)
(7)公钥(最重要)(公钥由证书拥有者提供)
(8)发行者的ID(CA的唯一编号)
(9)主体的ID(CA生成的证书拥有者唯一编号)
(10)扩展
(11)CA的签名(用于验证CA的来源合法性)

CA是相对于发送方B和接收方A的第三方,是具有公信力的机构。

2、验证数字证书的过程

B在发送之前获得A的数字证书或A在接收之前获得B的数字证书,都会去验证该数字证书的真伪。
以B在发送之前获得A的数字证书为例,说明验证数字证书的过程:

  1. 要用对应给A发数字证书的那个CA的公钥去解密CA的签名,如果能解密,则说明A的数字证书确实是那个信任的CA所颁发的证书。
  1. 解密出一段特征码,B再使用同样的单向加密算法提取A的数字证书的特征码,比较这两个特征码是否一样,如果一样,则表示获得的A的数字证书是完整的。
  2. 此后,还要去验证该数字证书中的持有者是不是A,如果验证通过,才可以确定该数字证书确实是A的数字证书。
  3. 确认该数字证书的拥有者是A后,还要去查看该数字证书是否在有效期限内和是否在CA的数字证书吊销列表中。

四、SSL层

1、SSL层

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。
版本:sslv1, sslv2, sslv3

ssl是介于应用层和传输层之间的半层,一般被制作成公共共享库,要想使用ssl就要调用ssl共享库。

2、https通信过程

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL。

以https为例,进一步说明如何依靠CA来可靠的获得通信对方的公钥


https的主要实现过程说明:

(1)在通信之前,服务器端通过加密算法生成一对密钥,并把其公钥发给CA申请数字证书
(2)CA审核后,结合服务端发来的相关信息生成数字证书,并把该数字证书发回给服务器端。
(3)客户端和服务器端经tcp三次握手,建立初步连接。
(4)客户端发送http报文请求并协商使用哪种加密算法。
(5)服务端响应报文并把自身的数字签名发给服务端。
(6)客服端下载CA的公钥,验证其数字证书的拥有者是否是服务器端(这个过程可以得到服务器端的公钥)。(一般是客户端验证服务端的身份,服务端不用验证客户端的身份。)
(7)如果验证通过,客户端生成一个随机对称密钥,用该密钥加密要发送的URL链接申请,再用服务器端的公钥加密该密钥
(8)客户端把加密的密钥和加密的URL链接一起发送到服务器。
(9)服务器端使用自身的私钥解密,获得一个对称密钥,再用该对称密钥解密经加密的URL链接,获得URL链接申请。
(10)服务器端根据获得的URL链接取得该链接的网页内容,并用客户端发来的对称密钥把该网页内容加密后发给客户端。
(11)客户端收到加密的网页内容,用自身的对称密钥解密,就能获得网页的内容了。
(12)TCP四次挥手,通信结束。

五、openssl自建CA过程详解

OpenSSL是套开放源代码的软件库包,实现了SSL与TLS协议。其主要库是以C语言所写成,实现了基本的加密功能。
OpenSSL可以运行在绝大多数类Unix操作系统上(包括Solaris,Linux,Mac OS X与各种版本的开放源代码BSD操作系统),OpenVMS与Microsoft Windows。它也提供了一个移植版本,可以在IBM i(OS/400)上运作。
此软件是以Eric Young以及Tim Hudson两人所写的SSLeay为基础所发展的,SSLeay随着两人前往RSA公司任职而停止开发。
虽然此软件是开放源代码的,但其授权书条款与GPL有冲突之处,故GPL软件使用OpenSSL时(如Wget)必须对OpenSSL给予例外。

openssl建立私有CA

openssl创建私有CA的过程:

前提:安装openssl

# yum install openssl

1、建立CA服务器

(1)生成密钥

# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

命令解释:

(2)自签证书

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

命令解释:

(3)初始化工作环境

只有第一次创建CA时,才需要初始化工作环境

# touch /etc/pki/CA/{index.txt,serial}
# echo 01 > /etc/pki/CA/serial   (指定序列号从那个数字开始)

2、节点申请证书

(1) 节点生成请求

# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr

.csr :证书签署请求,一般都是这样的后缀


红框中的信息,需要和CA自签证书中填写的保持一致,否则会出错。

(2) CA签署证书

格式:openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N
说明:-in 指定证书签署请求文件 ; -out CA根据请求文件生成的证书,一般为 .crt 后缀;N 指定证书生效时长,天为单位

[root@localhost CA]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 1000     
Using configuration from /etc/pki/tls/openssl.cnf      
Check that the request matches the signature      
Signature ok      
Certificate Details:      
        Serial Number: 1 (0x1)      
        Validity      
            Not Before: Jul  3 14:07:23 2014 GMT      
            Not After : Mar 29 14:07:23 2017 GMT      
        Subject:      
            countryName               = CN      #国家名
            stateOrProvinceName       = GuangDong   #省份名   
            organizationName          = 51CTOblog   #公司名
            organizationalUnitName    = Ops         #部门名
            commonName                = www.hjqjk.com   #主机名   
            emailAddress              = hjqjk@163.com   #邮箱   
        X509v3 extensions:      
            X509v3 Basic Constraints:       
                CA:FALSE      
            Netscape Comment:       
                OpenSSL Generated Certificate      
            X509v3 Subject Key Identifier:       
                F9:DB:00:04:8A:D7:17:C8:21:B7:2D:15:F2:E9:89:66:BB:6D:D5:F9      
            X509v3 Authority Key Identifier:       
                keyid:98:56:B3:30:B0:9D:75:A1:69:AD:BF:2F:E4:0D:FE:3F:17:87:B0:A8
Certificate is to be certified until Mar 29 14:07:23 2017 GMT (1000 days)     
Sign the certificate? [y/n]:y  #询问是否签署证书
1 out of 1 certificate requests certified, commit? [y/n]y     
Write out database with 1 new entries      
Data Base Updated      
[root@localhost CA]# ls /etc/httpd/ssl      #证书已签署,自建CA到这里就成功了
httpd.crt  httpd.csr  httpd.key

之后,只要把签署的证书发回给申请者就行了!

上一篇 下一篇

猜你喜欢

热点阅读