加密、解密过程及使用Opssl 工具自建CA

一、加密,解密

随着全球互联网越来越庞大,接入的用户越来越多,你不得不面临数据安全问题,通过各种各样的加密技术以保障数据的机密性、完整性、不可篡改、不可否认性等,通常加密就是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。


数据加密的术语有

明文,即原始的或未加密的

数据。通过

加密算法对其进行加密,

加密算法的输入信息为明文和

密钥;密文,明文加密后的格式,是加密算法的输出信息。


常用的加密技术分为对称加密与非对称加密:

对称加密:

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密需要对加密和解密使用相同密钥加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密

常用的对称加密:DES3DESAESDH

DH组的本质是使用非对称密钥来加密对称密钥。 DH算法过程: 1、相互产生密钥对 2、交换公钥 3、用对方的公钥和自己的私钥运行DH算法——得到另外一个密钥X



注意:对称加密使用公开算法、维持密钥。仅仅只能完成数据的机密性,在更多场合还存在漏洞比如身份验证、密钥安全等


非对称加密:

无需共享通用密钥,解密的私钥只有自己拥有,即使公钥在网上截获,如果没有与之配对的私钥的话,也是无法的,所截获的公钥是没有任何用处的,因为它加密、解密需要花费的时间比较长、速度慢,因此不适合于对文件加密而只适应于少量数据的加密,常用于数字签名。

由于非对称加密的特点,可以利用非对称加密密钥去完成数据加密

通信双方AB,都拥有密钥和对方公钥,将数据通过密钥加密,密钥被私钥加密传给对方,B收到A 发来的数据利用A的私钥得到密钥继而解密数据

这样看似完整,不能保整数据的完整的完整性,如果在过程中数据被修改、删除等也会一样会不安全,并且也保证不了发送方的身份,如果AB传输过程中有中间人监听去冒充A,冒充B,完成数据交互,显示非对称加密也就失去了意义


      • 单向加密

是一种不可解密的加密方法,所以这种加密只是用于完成加密过程中的数据的验证,检测数据是否一样,常用的单向加密算法有:

MD5SHA1SHA512CRC-32


工作原理:

对了保证机密性、完整性、身份的合法性,从而利用密钥、单向加密、私钥加密手段连合通信双方AB,都拥有密钥和对方公钥,并协商采用相同的单向加密算法。发送前先对数据的采用单向加密,形成特征码,利用自己的私钥完成对特征码的加密(私钥加密比较慢但是加密简短的特征码还是可以的,利用私密加密是为了不可否认身份)利用密钥将数据和加密后特征码一起加密形成X,最后利用对方的公钥加密对称加密过程中使用的密钥一同送给对方。B收到数据自己私钥解密,对方公钥解密,对解密后数据再次单向加密验证完整性


这种加密算法算是安全的了,不过最大的隐患也存在于身份的安全性,很难保证数据在传输过程中被替代,所以AB通信就要借助于一个第三方,这个第三方是被公认的,能够被身份验证,不易非法攻入的。这就是CA,即证书。


数字证书:

类似于日常生活中的×××它是由一个由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名

常用证书格式:

x509pkcs

证书信息:

公钥和有效期限

包含持有者的个人身份信息(主机名、机构名等)

证用的使用方式

CA的相关信息

CA的数字签名


工作原理:

通信前双方都得去信任一个权威机构,这个机构证书是自签而成,但是如何为我们信任


      1. 本机内置有它的证书,这样是最安全了不用在网络间转发

      2. 在通信前联系第三方机构获取证书,并是否同意

而客户端的证书便是由CA 机构去签暑颁发的,它含有客户端一些身份信息、公开密钥及证书授权中心的签名信息(要发送的报文的摘要值用发送者(CA)的私人密钥加密之后,连同报文一起发送过去被称为数字签名),然后用户就可以使用自已的数字证书进行相关的活动。在客户端A,B通信之前,A 会先获取B 的数字签名,去CA验证身份有效性,再用双方协商HASH算法对原报文计算出报文摘要值,然后与用发送者的公开密钥对数字签名进行解密解开的报文摘要值相比较。如相等则说明报文确实来自所称的发送者。


二、linux 下利用Openssl 工具实现自建CA 及证书颁发

  1. OpenSSL 是一个强大的安全套接字层密码库,Appache使用它加密HTTPSOpenSSH使用它加密SSH,它不止是一个库,而且还是一个多用途、跨平台的密码加密工具。整个软件包有三部份构成:

    1. 密码算法库(7种分组加密算法、RC4的流加密算法)

    2. SSL 协议库(SSLv2,v3TLSv2,v3)

    3. 应用程序(密码生成、证书管理、格式转换、数据加密签名)


下面介绍一下OpenSSL 的简单使用


加密、解密过程及使用Opssl 工具自建CA_密码

Standar commands:命令功能

Message Digest command :信息摘要支持的算法

Cipher:加密支持得算法


  1. CA 的生成过程(CA 端的操作)

    1. 需要先生成密钥对

    2. 完成自签

    3. 给别人签暑


先检查本机是否安装了OpenSSL

openssl --help

rpm -ql openssl


加密、解密过程及使用Opssl 工具自建CA_技术_02


查看OpenSSL 的安装文件,配置之前建议先去读/etc/pki/tls/openssl.cnf 配置文件,了解openssl 工具家目录下各个文件夹的作用。

加密、解密过程及使用Opssl 工具自建CA_openssl_03


这里看到CA 的家目录是在/etc/pki/CA,先去看看里面的目录结构

加密、解密过程及使用Opssl 工具自建CA_openssl_04

certs:签发的证书存放的地方

private:存放CA的私钥(很重要)

crl:吊销的证书存放的地方

newcerts:签发新证书存放的地方

cacert.pemCAcertificate生成之后的

serial:签发证书的序列号(需创建),serial 起始序列号需要指定

index.txt:数据库的索引文件(需创建)

crlnumber:吊销证书的序列号(需创建)


touch /etc/pki/CA/{serial,index.txt,crlnumber}

echo "01" > /etc/pki/CA/serial


密钥对生成:

openssl genrsa - generate an RSA private key,The genrsa command generates an RSA privatekey.

-des | -des3 | -idea :对生成的密钥进行再次加密

-rand FILES :读取一个包含随机数种子的文件,这样在生成私钥的时候更加安全

-out FILENAME::指定输出文件

numbits :生成私钥的长度


由于private key很重要,所要生成时候要注意权限,这里我直接指定umask

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

加密、解密过程及使用Opssl 工具自建CA_技术_05


加密、解密过程及使用Opssl 工具自建CA_密码_06

公钥是从私钥里面生成的,所以不用生成

openssl rsa -in ${dirCA}/private/cakey.pem -pubout -text

查看私钥、公钥信息


生成自签证书:

openssl req   - PKCS#10 certificate request and certificate generating utility

The req command primarily creates and processes certificate requestsin PKCS#10 format. It canadditionallycreate self signed certificates for use as root CAs for example.


-x509 :证书格式(自签的时候用到)

-key:私钥文件

-new:生成证书请求

-day:证书的有效期

openssl req -new -key /etc/pki/CA/private/cakey.pem -out/etc/CA/cacert.pem

加密、解密过程及使用Opssl 工具自建CA_互联网_07


加密、解密过程及使用Opssl 工具自建CA_数据安全_08


这样CA 端的证书就已经制作完毕


  1. 制作证书请求

    1. 生成密钥对

    1. 生成密钥请求

    2. 把密钥请求发送到CA

当然这些操作也可以CA端完成,生成密钥对,签证书,然后全部发送到客户端


生成密钥对(同上)

(umask 077;openssl genrsa -out node1.crt 2048)

加密、解密过程及使用Opssl 工具自建CA_数据安全_09


生成密钥请求

openssl req -new -key node1.key -out node1.crt


加密、解密过程及使用Opssl 工具自建CA_openssl_10

注意:Organization 必须与CA 机构的信息一致,passwd 为使用证书的密码

加密、解密过程及使用Opssl 工具自建CA_数据安全_11

可以看到当前目录下面的node1.crt 已经生成,现在需要把它拷发到CA端进行签署


  1. 证书颁发

openssl ca  

Theca command is a minimal CA application. It can be used to sign certificaterequests in a varietyof forms and generate CRLs it also maintains a textdatabase of issued certificates and their status


-in :证书请求的路径

-days :证书的使用天数

-keyfile :指定私钥签名

-certCA证书路径

-out:输入位置

openssl ca -in node1.crt -out node1.cer


加密、解密过程及使用Opssl 工具自建CA_密码_12


加密、解密过程及使用Opssl 工具自建CA_数据安全_13


这个node1.cer 就是颁发的证书只需要再拷到客户端需要应用证书的服务里面就可以了



这个是CA家目录,可以看到serial 已经改变,/newcerts,index.txt  也都发生了变化


加密、解密过程及使用Opssl 工具自建CA_数据安全_14


加密、解密过程及使用Opssl 工具自建CA_openssl_15



最后奉上自动建CA写的一个小脚本:

#!/bin/bash
#
#cert.sh
#
dirCA=/etc/pki/CA
if ! [[ -e ${dirCA}/serial && -e ${dirCA}/crlnumber && -e {dirCA}/index.txt} ]] ;then
touch ${dirCA}/{serial,crlnumber,index.txt}
echo "01" > ${dirCA}/serial
fi
#create CA private key to ${dirCA}/private/cakey.pem
[[ -e ${dirCA}/private/cakey.pem ]]||(umask 077;openssl genrsa -out ${dirCA}/private/cakey.pem 2048)
#display the CA public key
openssl rsa -in ${dirCA}/private/cakey.pem -noout -text
#self req cert
#signature for self
#echo -e "CN\nHeNan\nzhengzhou\nmagedu\njatai\njatai\n" |
[[ -e ${dirCA}/cacert.pem ]]||openssl req -x509 -new -key ${dirCA}/private/cakey.pem -out \
${dirCA}/cacert.pem
/bin/bash clcert.sh
#signatre for client
openssl ca -in node1.csr -out node1.cer


#!/bin/bash
#
#Client_cert.sh
#
#read -p "Please input input the Private key for Client" name
#create the Client Private key
(umask 077;openssl genrsa -out node1.key 1024)
#display thd Client Public key
openssl rsa -in node1.key -pubout -noout -text
#Certificate Requist
#echo -e "CN\nHeNan\nzhengzhou\nmagedu\njatai\njatai\n" |
openssl req -new -key node1.key -out node1.csr