美文网首页
Openssl加密解密原理+CA自建实现

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

作者: 六月天的安静 | 来源:发表于2017-08-22 13:21 被阅读357次

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

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

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

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

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

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

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

    一、基本概念

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

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

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

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

    常用的对称加密:DES、3DES、AES、DH

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

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

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

    公钥私钥的原则:

    • 1、 一个公钥对应一个私钥。

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

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

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

    二、加密传输原理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • 1、Bob生成数据

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

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

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

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

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

    • 7、Alice用自己的私钥解密对称密钥

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

    • 9、Alice用Bob的公钥解密特征码—————–使用发送者的公钥对签名进行认证;

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

    • 11、Alice接收数据

    使用数字证书能做什么?

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

    三、Openssl 基本使用方法

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

    • 密码算法库(7种分组加密算法、RC4的流加密算法)
    • SSL 协议库(SSLv2,v3、TLSv2,v3)
    • 应用程序(密码生成、证书管理、格式转换、数据加密签名)

    2、openssl基本用法

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

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

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

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

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

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

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

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

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

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

    openssl命令选项:

    -e:指定为加密,可以不写默认为加密。
    
    -des3:指定算法算法
    
    -salt:默认设置,生成一段字符串放在密码最前面进行加密,提高解密难度。
    
    -a:基于base64处理数据。加密结果进行base64编码处理
    
    -in:读取那个文件进行加密
    
    -out:输出到那里
    
    -d:指定为解密
    
    -req:表示证书输入请求
    
    -new:表示新请求
    
    -days:表示有效天数
    
    rand:随机数命令
    

    对messages解密:


    单项加密:openssl dgst 用于实现在网络通信中保证所传输的数据的完整性
    -md5:用md5方式加密
    
    -sha1:sha1方式加密
    
    -out:加密后密码保存到那里
    

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


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

    -1:md5加密
    
    -salt:自己指定附加信息
    

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

    四、自建CA过程

    一、使用OppenSSl构建私有CA的步骤
    1、生成私钥;
    默认生成的权限时644的,如果想在生成后就是600的权限,可以使用umask;
    # mkdir app
    # cd /app
    # (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 1024)

    • 用()是为了在子shell中运行,不影响当前的umask
    • -out为输出私钥的位置
    • 2048为密钥的长度

    2、生成CA自签证书;
    # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365

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

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

    • –key私钥位置

    • –days申请的天数(默认30天)

    • -out生成位置

    Alt text

    Country Name (2 letter code) [XX]: # 两个字符表示的国家代码,CN为中国
    State or Province Name (full name) []: # 省或洲的完整名称
    Locality Name (eg, city) [Default City]: # 所在位置的名称(默认为城市)
    Organization Name (eg, company) [Default Company Ltd]: # 组织机构名称(默认为公司)
    Organizational Unit Name (eg, section) []: # 组织机构单元名称(eg.部门)
    Common Name (eg, your name or your server’s hostname) []: # 持有者名或者所在服务器主机名(即域名)
    Email Address []: # 管理员邮件地址,可以省略




    涉及的配置文件:/etc/pki/tls/openssl.cnf

    工作目录:/etc/pki/CA/

    3、为CA提供所需的目录及文件;

    • # mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
      当不存在时需要创建签发证书、吊销证书、新证书目录
    • # touch /etc/pki/CA/{serial,index.txt}
      创建证书序列号文件、证书索引文件
    • # echo 01 > /etc/pki/CA/serial
      第一次创建的时候需要给予证书序列号

    二、OpenSSL;服务申请证书签署实现SSL安全通信

    要用到证书进行安全通信的服务器,需要向CA请求签署证书;需要签署的服务无需和CA证书签署机构主机在同一台服务器上。此处以httpd服务为例进行演示,步骤如下:

    演示环境: httpd服务放置192.168.220.157主机(centos6上) 此处用yum安装httpd

    CA私有签机构放置192.168. 220.164主机(centos7上)
    Alt text
    1、 用到证书的服务器生成私钥;
    • # mkdir /etc/httpd/ssl //指定一个证书存放的位置
    • # cd /etc/httpd/ssl
    • # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) 生成私钥

    生成httpd服务的私钥创建时候无需在/etc/pki/CA创建,/etc/pki/CA目录仅在创建CA主机时候


    2.生成证书签署请求
    # openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
      1. *.csr表示证书签署请求文件
      1. 要保证和签署机构CA签署机构信息一致

    3.将请求通过可靠方式发送给CA主机
    # scp /etc/httpd/ssl/httpd.csr root@192.168.220.164:/app/
    4.在CA主机上签署证书
    # openssl ca -in /app/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
    • *.crt:表示证书文件
    • -days :签署证书的有效期 注意:此处需要自己去查看信息是否正确,并确定是否给予签署证书

    5.查看所签署的证书信息
    方法一:# cat /etc/pki/CA/index.txt
    • V:表示已经签署的
    • 01:表示证书序列号
    • /C=CN/ST=Beijing/O=… …: 表示主题信息(主题标示)

    方法二:查看证书中的信息(CA或者服务端均可):
    # openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

    • -serial :序列号
    • -subject:主题信息

    6.将CA签署机构的.crt证书发送给服务器
    # scp /etc/pki/CA/certs/httpd.crt root@172.16.249.210:/etc/httpd/ssl

    注意:第一次进行主机间基于ssh的scp操作会接收一个证书,Queue要你那认证

    7.删除服务器和CA主机上签署前的.csr文件,确保安全*

    httpd主机:# rm -rf /etc/httpd/ssl/httpd.csr

    CA主机:# rm -rf /tmp/httpd.csr

    三、OpenSSL:私有CA证书签署机构吊销证书

    1.客户端获取要吊销的证书的serial(在使用证书的主机上执行)
    # openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject


    2.CA主机吊销证书
    • 先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;
    • /etc/pki/CA/crets/*下生成证书后,会在/etc/pki/CA/newcrets/*`以对应证书命名为SERIAL.pem文件存放

    吊销:
    # openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
    • 其中SERIAL要换成证书真正的序列号:eg. 01.pem

    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

    相关文章

      网友评论

          本文标题:Openssl加密解密原理+CA自建实现

          本文链接:https://www.haomeiwen.com/subject/qifldxtx.html