数据安全及OpenSSL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据安全及OpenSSL相关的知识,希望对你有一定的参考价值。

一、数据安全特性


1、数据保密性

   保密性就是把明文传输的数据使用具体的某种加密算法进行加密,使得第三方截获数据也无从知晓其中内容,必须使用对应的密钥进行解密。

2、数据完整性

   为防止第三方篡改数据信息,可以使用单向加密算法,对数据提取特征码。接收方收到数据后,可以使用相同加密算法对接收到的数据进行特征码提取,再将接收到的特征码与自己计算的特征码进行比对。

3、用户身份验证

   接收方为了验证接收到的数据是否是合法的发送方发来的,发送方在发送数据时,将提取出的特征码用自己的私钥加密后再发送给接收方。接收方接收到数据后,使用发送方的公钥解开加密后的特征码,这样就确定是合法的发送方发送的。


二、加密算法


1、对称加密算法

   对称加密是指加密和解密操作都是使用相同的密钥,或者加密的密钥和解密的密钥能够推算出彼此;

    发送方与接收方在通信之前,需要协商一个用于加密数据的密钥;

       对称加密过于依赖密钥的安全性,如果密钥泄露,则通信过程不再安全;

       在分布式系统环境中,每对用户在使用对称加密算法时,都需要使用唯一的密钥,这样会使得密钥的数量成几何式的增长,对密钥的管理上变得很困难;

        而与非对称密钥相比,对称密钥没有签名功能,使得对称密钥的使用范围缩小;

        但是,对称加密算法计算量下、加密速度快、加密效率高,所以仍然有其用武之地。

        常见的对称加密算法:DES3DESBlowfishR5等。


2、非对称加密算法

       非对称加密算法有两个密钥:公钥和私钥。在使用非对称加密算法通信过程前,双方各自生成一对公钥和私钥,把公钥发送给需要跟自己通信的一方,自己保管好自己的私钥;

       公钥加密的数据,只能由与之匹配的私钥解密,私钥加密的数据,也只能由与之匹配的公钥才能解开;

       安全性的提高,势必带来效率低的后果。非对称密钥算法的特点就是算法复杂、加解密的速度远低于对称加密算法。

       常见的非对称加密算法:DHRSADSA等。


3、信息摘要

   也就是单向加密算法,可以检验数据的完成性,防止数据被篡改。

   常见的单向加密算法:MD5、SHA1等。


三、实现数据安全传输基本原理


    一般实现数据安全传输的过程:先将发送的数据进行特征码提取,即为单向加密;再由发送方自己的私钥,对特征码进行加密,接收方收到后只能用发送方的公钥进行解密,这样能够确认发送方的身份;由于对称加密算法的效率要远高于非对称算法,这里再使用对称加密算法对数据以及加密后的特征码一起进行对称加密;最后使用接收方的公钥对上步中对称加密的密钥进行加密。


技术分享


    到现在为止,由于最后一步使用接收方公钥来加密密钥,这样一来,发送方还是无从得知自己手上接收方的公钥是否合法。如果第三方伪造了一个接收方的公钥,那么第三方就能够用假冒的公钥所对应的私钥获取对称密钥,从而解开数据。


    为了验证公钥的合法性,就出现了CA(Certificate Authority)的概念。通信方向CA提供自己的Public Key以及其他相关信息,CA签署成功后,再使用自己的私钥加密,最终生成一个证书发送给通信方。以后发送方和接收方就直接发送证书给对方,对方接收到证书后,就用CA的公钥进行解密,从而获取到里面对方公钥。


    CA如果要验证自己的公钥合法性,要么向上级CA获取证书,要么就自己给自己颁发证书。


技术分享


四、OpenSSL实现私有CA

       Secure Sockets Layer(SSL,安全套接层协议)服务于传输层,基于可靠的TCP协议。可以对传输层协议(HTTP,FTP等)提供加密算法、密钥协商、认证等服务。


    CentOS 7.2内置的OpenSSL为openssl-1.0.1e-42.el7.9.x86_64版本。

 

1、生成私钥

  由于公钥是按照一定方式从私钥中提取出来的,所以可以理解为公钥和私钥是成对生成的。  

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

  查看公钥方法:

 openssl rsa -in private/cakey.pem -pubout -text

2、生成自签证书   

 openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365

   技术分享

3、创建文件

 touch index.txt serial
 echo 01 > serial   #证书序号

4、web服务器生成请求待签证书

 (umask 077 ; openssl genrsa -out http.key 2048)
 openssl req -new -key http.key -out http.csr -days 365

将http.csr传给CA,让CA对其进行签证。

5、CA签证

 openssl ca -in http.csr -out http.crt

    再将证书http.crt传回给web服务器,可以使用openssl x509 -in http.crt -text来查看证书里的具体内容了。

    在CA一端这边我们发现,在签署过一个证书后,有些文件已经发生变化:

    serial文件的序号已经变成02号,等待第二个待签证书的到来;

   技术分享

    index.txt文件:

   技术分享  

   newcerts目录中存入已签发过的证书,按照序列号命名:

   技术分享

6、吊销证书

 openssl ca -revoke http.crt

技术分享

以上是关于数据安全及OpenSSL的主要内容,如果未能解决你的问题,请参考以下文章

Openssl及加密解密数据加密解密及CA原理

OpenSSL库开发:C++ 编译及使用

修复OpenSSL漏洞 升级OpenSSL版本 nginx静态编译ssl模块

https原理及实践

OpenSSL 功能介绍

openssl+http实现https