Openssl加密解密原理+CA自建实现

 Openssl密解密原理+CA自建实现

 

  前言

互联网的惊人发展使企业和消费者都感到非常兴奋,它正改变着我们的生活和工作方式。但是,互联网的安全程度如何——尤其是在通过它发送机密信息时的安全性——已经成为人们关心的主要问题。随着时代的发展,加密原理也不断地在更新换代. 数据的加密目前已广泛地运用于战争,商业活动,信息交换等领域,。其实加密技术也不是什么新生事物,只不过应用在当今电子商务、电脑网络中还是近几年的历史。以下我们将了解一下加密技术的方方面面,愿能为那些对加密技术有兴趣的朋友提供一个详细了解的机会!

在电子商务没有出现之前,我们基本上通过面对面的钱权交易,不存在加密解密问题;随着电子商务的兴起,我们现在很多的交易都是在互联网上完成的,银行转账,网上购物等等。早期的各种传输软件都没有考虑到安全的问题,都是以明文进行传输,信息被别人窃取,篡改等等;因此有很多群体靠网络发家!!犯罪!!但是网络交易确实给我们的生活带来了极大的方便,怎么解决这个问题呢;美国NIST,为了保证计算机的安全,提出了几个要求:

         1、数据要有保密性:数据保密性和隐私性;确保信息不被别人获取,个人存储的信息不能被别人收集到;

         2、完整性:包括数据完整性和系统完整性;数据完整性确保数据和程序只能以特定权限的进行授权和改变,只能授权之后才能改变或者被改变;确保系统以一种正常的方式执行预定的功能,不会因别人的介入改变方向;

         3 可用性,工作迅速,可正常使用的情况并获取到信息;

以下我们将说一下基本概念,然后再说明一下在互联网上如何安全的进行传输数据进行安全交易的过程;

一、基本概念

加密:我们将文字转换成不能直接阅读的形式(即密文)的过程称为加密。数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为"密文",使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。

解密:我们将密文转换成能够直接阅读的文字(即明文)的过程称为解密。

大多数计算机加密系统都属于以下两种类型之一:"对称式""非对称式"

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

常用的对称加密:DES3DESAESDH

因为对称式的加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被别窃听到。且通信方如果比较多,秘钥过多,不便于管理,密钥传输和交换难以实现;因此产生了公钥加密(也叫非对称加密):

非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥""私钥",它们两个必需配对使用,否则不能打开加密文件。这里的"公钥"是指可以对外公布的,"私钥"则不能,只能由持有人一个人知道。"公钥"是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。

常用加密算法:RSA, DSA, EIGamal RSA:身份认证和加密;DSA:身份认证

公钥私钥的原则:

1. 一个公钥对应一个私钥。

2. 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。

3. 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。

4. 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

二、加密传输原理

加密的各种算法只是对文件进行了加密,可是如何让其能在网络上进行安全的传输,而不被窃听,篡改呢?

用电子邮件的方式说明一下原理。

       使用公钥与私钥的目的就是实现安全的电子邮件,必须实现如下目的:

       1. 我发送给你的内容必须加密,在邮件的传输过程中不能被别人看到。

       2. 必须保证是我发送的邮件,不是别人冒充我的。

       要达到这样的目标必须发送邮件的两人都有公钥和私钥。

       公钥,就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的。私钥,就是自己的,必须非常小心保存,最好加上 密码,私钥是用来解密/签章,首先就Key的所有权来说,私钥只有个人拥有。公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能 用公钥解密。

随着计算机网络技术的迅速发展和信息化建设的大力推广,越来越多的传统办公和业务处理模式开始走向电子化和网络化,从而极大地提高了效率、节约了成本。与传统的面对面的手工处理方式相比,基于网络的电子化业务处理系统必须解决以下问题:

1如何在网络上识别用户的真实身份;

2如何保证网络上传送的业务数据不被篡改;

3如何保证网络上传送的业务数据的机密性;

4如何使网络上的用户行为不可否认;----------如我们网上购物,东西到了,我们不承认,商家将遭受损失;

例如: 假设用户甲要寄信给用户乙,他们互相知道对方的公钥。甲就用乙的公钥加密邮件寄出,乙收到后就可以用自己的私钥解密出甲的原文。由于别人不知道乙的私钥,所以即使是甲本人也无法解密那封信,这就解决了信件保密的问题。另一方面,由于每个人都知道乙的公钥,他们都可以给乙发信,那么乙怎么确信是不是甲的来信呢?那就要用到基于加密技术的数字签名了

基于公开密钥算法的数字签名技术和加密技术,为解决上述问题提供了理论依据和技术可行性;同时,《中华人民共和国电子签名法》的颁布和实施为数字签名的使用提供了法律依据,使得数字签名与传统的手工签字和盖章具有了同等的法律效力。

PKIPublic Key Infrastructure是使用公开密钥密码技术来提供和实施安全服务的基础设施,其中CACertificate Authority)系统是PKI体系的核心,主要实现数字证书的发放和密钥管理等功能。数字证书由权威公正的CA中心签发,是网络用户的身份证明。使用数字证书,结合数字签名、数字信封等密码技术,可以实现对网上用户的身份认证,保障网上信息传送的真实性、完整性、保密性和不可否认性。

数字证书目前已广泛应用于安全电子邮件、网上商城、网上办公、网上签约、网上银行、网上证券、网上税务等行业和业务领域。

数字证书是一种数字标识,如同我们的身份证一样,是网络上的身份证明,它是由证书授权机构(CA)签名颁发的数字文件,该签名使得第三者不能伪造和篡改证书。

数字证书:  数字证书为实现双方安全通信提供了电子认证。在因特网、公司内部网或外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。

ITU-TX..509国际标准定义了数字证书的格式,目前X .509v3数字证书的主要内容如图:

                                               1.png

注册授权服务器(RA :负责定期从数据库中提取已审核通过的证书申请/更新/作废信息,按既定格式打包提交到CA服务器,并接收和记录返回的结果。

证书签发服务器(CA:负责密钥对(公私钥对)的产生,可采用软件方式或硬件方式(加密机);接收RA服务器的请求,签发/更新/作废用户证书;定期签发CRL(证书撤销列表)。

CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

CA 也拥有一个证书(内含公钥)和私钥。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。

如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。

如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。

2.png

上面我了解了基本的概念和原来后,我们来根据上图来说一下一次会话,发邮件,用户和用户之间的数据加密的全过程:

1Bob生成数据

2、用单向加密数据生成特征码

3Bob用自己的私钥加密特征码放在数据后面----------用自己的私钥进行签名;

4、生成临时会话密钥加密特征码和数据-------因为之前没有对数据进行加密;

5、用对方Alice的公钥加密临时密钥

6、数据加密完后一并发给对方

7Alice用自己的私钥解密对称密钥(原图有误不是BOb

8、拿到密码后解密对方加密的数据

9AliceBob的公钥解密特征码-----------------使用发送者的公钥对签名进行认证;

10Alice用相同的单向加密验证数据的完整性

11Alice接收数据

使用数字证书能做什么?  

数字证书在用户公钥后附加了用户信息及CA的签名。公钥是密钥对的一部分,另一部分是私钥。公钥公之于众,谁都可以使用。私钥只有自己知道。由公钥加密的信息只能由与之相对应的私钥解密。为确保只有某个人才能阅读自己的信件,发送者要用收件人的公钥加密信件;收件人便可用自己的私钥解密信件。同样,为证实发件人的身份,发送者要用自己的私钥对信件进行签名;收件人可使用发送者的公钥对签名进行验证,以确认发送者的身份。如此我们便可以安全的在网上进行各种交易,接下来我们实践操作一下此过程的实现。

三、Openssl 基本使用方法

1OpenSSL 是一个强大的安全套接字层密码库, 在应用层和传输层之间加了一个半层,基于套接字传输时专用的;所以不是对所有的数据进行加密;Appache使用它加密HTTPShttp(80/tcp)->ssl--->https(443/tcp):两个完全不同的协议;OpenSSH使用它加密SSH,它不止是一个库,而且还是一个多用途、跨平台的密码加密工具。整个软件包有三部份构成:

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

SSL 协议库(SSLv2,v3TLSv2,v3)

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

2openssl基本用法

可以使用rpm –ql  openssl 查看是否安装;3.png

Standar commands:命令功能

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

Cipher:加密支持的算法

查看OpenSSL 的安装文件,配置之前建议先去读/etc/pki/tls/openssl.cnf 配置文件,了解openssl 工具家目录下各个文件夹的作用。这里看到CA 的家目录是在/etc/pki/CA,先去看看里面的目录结构4.png

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

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

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

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

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

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

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

例如:cp /var/messages /home/test目录下对messages文件进行加密;使用cat查看是乱码;

openssl命令选项:

                   -e:指定为加密,可以不写默认为加密。

                   -des3:指定算法算法

                   -salt:默认设置,生成一段字符串放在密码最前面进行加密,提高解密难度。

                   -a:基于base64处理数据。加密结果进行base64编码处理

                   -in:读取那个文件进行加密

                   -out:输出到那里

                   -d:指定为解密5.png

messages解密6.png

单项加密:openssl dgst  用于实现在网络通信中保证所传输的数据的完整性

                  -md5:用md5方式加密

                  -sha1sha1方式加密

                  -out:加密后密码保存到那里

例如:md5sum messages   或者    openssl dgst -md5 messages  二者提前的特征码相同7.png

生成用户密码:openssl passwd -1 [-salt string] password

                  -1md5加密

                  -salt:自己指定附加信息

                  生成随机数:openssl rand -base64 4openssl rand -hex 4,生成8位随机数8.png

生成私钥和公钥:openssl genrsa 

默认生成的权限时644的,如果想在生成后就是600的权限,可以使用umask;9.png

四、自建CA过程

1、建立私有CA

1.1、在CA上生成私钥文件 /etc/pki/CA/private

()是为了在子shell中运行,不影响当前的umask  

-out为输出私钥的位置    

2048为密钥的长度100.png

1.2、在CA上生成自签署证书  必须在/etc/pki/CA目录下

101.png

-new 为生成新的证书,会要求用户填写相关的信息

-x509 通常用于自签署证书,生成测试证书或用于CA自签署 

-key私钥位置  

-days申请的天数(默认30天) 

-out生成位置

以上自签时填写的相关信息可以通过/etc/pki/tls/openssl.cnf配置文件添加,从而可以复制到其他主机生成签署请求的时候重复填写;以下2个不能使用默认值;commonName ;emailAddress。

2、给http服务器发放证书

假设:用httpd服务,其位置为/etc/httpd/conf/certscerts为自己创建的文件夹

2.1http服务器申请证书:在http服务器上进行

生成私钥

生成证书签署请求/etc/httpd/conf/certs102.png

2.2、在CA上给http服务器签署证书

需要把http那台主机的证书申请文件拷贝到CA(位置随意)

1次签署在/etc/pki/CA目录下创建以下文件

# touch {index.txt,serial}

# echo "01" > serial  首次必须添加序列号否则会报错

CAhttp服务器签署证书

103.png

确认签署

查看index.txt,最前面有一个大V

serial0102

ll /etc/pki/CA/newcerts/  会有一个文件生成104.png

2.3、查看生成的证书的信息 http.crt文件)

openssl x509 -in http.crt -noout -subject

openssl x509 -in http.crt -noout -serial

4、生成完需要拷贝到http服务器上  也用scp命令

五、吊销证书

1、第一次吊销需创建文件,生成编号,在CA端进行

touch /etc/pki/CA/crlnumber

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

2、在CA端,吊销证书

openssl ca -revoke /etc/pki/CA/newcerts/01.pem  吊销证书

# cd /etc/pki/CA/crl/     

# openssl ca -gencrl -out thisca.crl   更新证书吊销列表

3、查看吊销信息

# cat index.txt   V变成了R

cat crlnumber   增加(此处我吊销两次所以为03

105.png

以上是对加密解密文件,基于CA进行安全传输的个人理解和想法,如有问题请批评指正!希望对那些加密技术有兴趣的朋友有所帮助!

 

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!