Fight For Freedom

12月 30

https原理的来龙去脉之一

       吐槽下typecho的编辑器,一点都不好用,搜了很久,一直都找不到自己喜欢的编辑器插件,每次都花了很多时间在文章的排版上,bug较多。以后自己写写 -^-。

       不多说,进入正题,对于https原理的讲解,我将分别从常规加解密、数字证书、实验环节及ssl/tls协议四个方面入手,对于有些理解不到位或不透彻的地方,欢迎讨论。

      0x01. 密码学基础

      0x02. 数字证书

      0x03. https的搭建

      0x04. 浅析ssl/tls协议

      0x05. 总结

      这篇文章将会讲前三部分,后两部分会再下一篇文章中讲解。


0x01. 密码学基础       

    现代密码学跟古典密码最大的不同是古典密码靠的的是加解密算法不公开,即认为安全,而现代密码学靠的是数论思想,算法公开,用户只需保存密钥即可。在信息传递的过程中可能会被窃取、监听、破坏等,为了保证接受方能够验证发送方的身份、信息的完整性、以及避免被监听的风险,这时各种加密算法蕴育而生。

      一、对称加密

       顾名思义,加密与解密使用同一密钥。它能够保证数据的机密性,但却不能保证其可用性及不能防止中间人攻击。

        常用的有DES、3DES、AES。但这就有两个问题,一是在互联网中,发送方怎么将密钥传给接受方;二是接收方如何验证发送方的身份,怎样知道发送方不是被冒充的。所以,非对称加密的出现很好地将这两个问题给解决了。

      二、非对称加密

       何谓非对称,就是加密解密使用的密钥不一样,有公钥和私钥之分,公钥是公开的,私钥需自己保管。公钥是从私钥提取而来。

        私钥加密的数据只能通过与之配对的公钥解密,这常用于验证身份;公钥加密的数据只能通过与之配对的私钥解密,常用于传输数据。
        常用的算法有RSA、DSS、ECC。一般来讲,在数据的传输过程中,不会用非对称算法来加密数据,因为效率比对称算法低了很多。大多时候用它来传输对称加密的密钥,之后再用对称加密进行通信。
 
      三、信息摘要算法

        但如何保证信息不被篡改呢?容易想到的就是将原数据的信息特征给提取出来。

        它是根据一定的运算规则对原有数据以某种形式上进行提取,输出是定长的,这种提取就是摘要。

        在早期中,其算法参考了DES的CBC模式,将其信息加密取最后的64bit作为信息摘要。但效率一般。摘要算法应只支持单向(明文到密文),有着“雪崩效应”。常见的摘要算法有md5、sha1、sha256、sha512等,常用于密码加密、数字签名等,用于验证数据的完整性。

        好了,通过简单地讲解这些算法,我们现在可以在脑海中进行一次完整的加密解密通信了。

        1.  发送方选用一摘要算法计算原始数据的特征码  -->  使用自己的私钥加密特征码(作为数字签名),附在原数据后面 -->发送方随机生成对称密钥,来加密原数据和数字签名  --> 用接受方的公钥来加密随机产生的对称密钥,并附在加密数据后面。(没画图,脑补下。-^-)

        2. 接受方用自己的私钥解密数据,得到了对称密钥  -->  使用对称密钥来解密剩下的数据,得到原数据和数字签名  --> 使用与发送方相同的单向算法来计算原数据的特征码,来与用发送方公钥解密出的特征码进行对比。

       在以后的过程中就用对称加密来实现通信。                    

       这一过程中,发送方用接收方的公钥来加密,保证了其机密性;用发送方公钥来解密数据即可验证身份,不可否认性;接收方将特征码进行比对,即可验证数据的完整性。但在这个过程中,依然存在着缺陷,不知大家看出来没。

       那就是最根本、最原始的问题,发送方和接受方的公钥如何验证,公钥在网络上传输时很容易被伪造。

      终于讲到正题了。因此需要权威的第三方认证机构,即CA。


0x02. 数字证书

       一、证书含义

       证书,其实就是数字签名的声明,它将公钥绑定到对应私钥的个人、设备或服务的身份。结构会在后面给出。

       提到证书又不得不提到PKI(公钥基础结构)。它是一个整体的概念,由端实体(申请者)、RC(注册机构)、CA(签证机构)、CRL(证书撤销列表发布机构)、证书存取库。从字面上就可以理解其意义,这里不再讲解。我们着重关注CA,它专门颁发证书。那证书如何发放呢?

       二、证书申请及发放流程

        1. 证书申请:用户生成密钥对,根据个人信息填好申请证书的信息,并提交证书申请信息;

        2. RA确认用户。在企业内部网中,一般使用手工验证的方式,这样更能保证用户信息的安全性和真实性;     

        3. 证书策略处理。如果验证请求成功,那么,系统指定的策略就被运用到这个请求上,比如名称的约束、密钥长度的约束等;

        4. RA提交用户申请信息到CA。RA用自己的私钥对用户申请信息签名保证用户申请信息是RA提交给CA的;

        5. CA用自己的私钥对用户的公钥和用户信息ID进行签名,生成电子证书。这样,CA就将用户的信息和公钥捆绑在一起了,然后,CA将用户把数字证书和用户的公用密钥公布到目录中;

         6. CA将电子证书传送给批准该用户的RA;

         7. RA将电子证书传送给用户(或者用户主动取回);

         8. 用户验证CA颁发的证书,确保自己的信息在签名过程中没有被篡改,而且通过CA的公钥验证这个证书确实由所信任的CA机构颁发的。

         这跟我们现实生活中的情景非常相似。为了加深理解,下面我们做实验来理解以上所有内容。


0x03. https的搭建

        我们需要配置CA、web服务器、DNS服务器(可选)。

        服务端:192.168.19.129,(CA、web服务器、DNS服务器)域名为www.test.com

        客户端:192.168.19.128

        下面只叙述CA和web服务器的配置

         一、关于CA的配置

         1. 给CA生成一对密钥(私钥和公钥)

 cd /etc/ssl
 (umak 66;openssl genrsa 2046 > private/cakey.pem)  创建私钥,并将权限改为600(一对括弧表示通过子shell执行命令)
         2. 生成自签证书                         
 openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650    (SSL中使用的证书通常是X.509类型证书。)CA颁发者的信息可随便填。

     

        通过上面两条命令即可建立CA。

        3. 创建CA的相关目录

            因为查看openssl.cnf配置文件,里面有着对文件描述。比如存放CA证书的位置、存放客户端的相关证书信息等等。

mkdir certs crl newcerts  
touch index.txt serial  
echo 01 > serial  

       二、关于web服务器的配置

          1. 建立CA

    (umask 66;openssl genrsa 2048 > web.key)  生成一对密钥
    openssl req -new -key web.key -out web.csr    为Apache服务器端配置密钥并生成证书签署请求文件
      
             
        2.  CA为Apache服务签署数字证书
     openssl ca -in httpd.csr -out httpd.crt -days 3650

             此时会更新CA端的数据。       

        3. 打开apache中ssl的功能
     a2enmod ssl
     a2ensite default-ssl
     service apache2 reload
         4. 设置apache的ssl配置
     nano /etc/apache2/sites-enabled/default-ssl.conf
              将以下内容添加进去:
      ServerName example.com:443
      SSLCertificateFile /etc/apache2/ssl/apache.crt
      SSLCertificateKeyFile /etc/apache2/ssl/apache.key

          5. 检验apache的ssl  

      openssl s_client -connect your_server_ip:443
       现在我们已经基本完成服务器的配置。将客户端(192.168.19.129)的dns指向刚刚配置的服务器,并登录该网站。但由于CA不是权威CA,浏览器会提示是否添加例外。我们选择添加,即访问到了https://www.test.com

     在浏览器中查看证书结构,可清晰地看到CA结构、服务器的信息:
   

    其余部分我们将会在下一篇文章中讲到。

标签:none

还不快抢沙发

添加新评论

captcha
请输入验证码

最新文章

最近回复

  • lynahex:好的。
  • xdxd:友链已加~~~希望有机会多多交流~~
  • lynahex:恩,重测了下是可以的。可能当时一些危险函数被我禁掉了。 thx
  • 过客:虽然博主文章过了好久了,本地system测试还是可以执行的
  • 友情链接

    分类

    其它