您的位置:首页 > 理论基础 > 计算机网络

https 相关知识 (openssl)

2016-06-18 20:52 288 查看
秘钥算法和协议

   对称加密 加密和解密使用同一个秘钥

   DES:Data Encryption Standard(不安全,容易被破解) 56位秘钥
   3DES:Triple DES
   AES:Advanced Encryption Standard;(安全性特别高)秘钥128bits 192bits 256bits,384bits
   。。。

   特性:

      1、加密和解密使用同一个秘钥

      2、将原始数据分割成固定大小的块,逐个进行加密;

   缺陷:

      1、秘钥过多;服务器要和每个访问者都要生成一个秘钥

      2、秘钥分发困难;

   公钥加密 :秘钥分为公钥和私钥 (比对称加密效率低很多)

           公钥:从私钥中提取产生,公开给所有人:pubkey

           私钥:通过工具创建,secret key;
   特点:公钥加密私钥解密   私钥加密公钥解密

  用途:
      数字签名:让接收方确认发送方的身份
      秘钥交换:发送方用对方的公钥加密一个对称秘钥,发送对方
      数据加密

           算法:RSA(可以作为签名也可以作为加密)、DSA(只能做签名)、ELGamal

     

   单向加密:即提出数据指纹;只能加密,不能解密;

       特征:定长输出

       功能:完整性验证

       算法:

             md5 128 bits  

             sha1 160bits 

  密钥交换: IKE
      公钥秘钥,缺点是加密后的秘钥还是通过网络传给对方,有风险

      DH算法 工作原理:假设A B两个要共同约定一个对称加密的秘钥。        
      首先 A要自己定义一个x数(随机的),同时和B约定一组数P和G(这两个数是公开的),然后A利用数据公式P^x%G=A1 得到A1这个数,然后把A1发给B,这个时候,虽然别人知道P和G和计算公式,但是也无法又A1反过来得到x。接着B收到了A1,B自己也定义一个只有自己知道的数y,然后跟A的做法一样,根据公式 P^y%G=B1 得到一个数B1发给A。这个时候,A拥有了B发给自己的B1,B拥有了A发给自己的A1,注意,这个时候A1和B1是不相等的,然后,A拿着B1再用公式 B1^x(其实就是P^y%G^x)得到一个B2,同理,B拿着A1也用公式A1^y(其实就是P^x%G^y)得到一个A2,然后大家就会发现其实B2是等于A2的,然后,A2,B2就是我们要的加密的秘钥,而且在整个过程中,A2或B2没有在网络上传输过,所以显得非常安全。

    PKI:Public Key Infrastructure(公钥基础设施)

        签证机构:CA
        注册机构:RA
        证书吊销列表:CRL
        证书存取库:

   x.509:定义了证书的结构以及认证协议标准
     版本号
     序列号
     签名算法ID
     发行者名称
     有效期限
     主体名称
     主体公钥
     发行者的唯一标识
     主体的唯一标识
     扩展
     发行者签名

 

    SSL:Secure sockets Layer

        网景公司开发1994

    TLS:Transport Layer Secutity

        IETF:1999 年发布

             v1.0 v1.1 v1.2 v1.3

    

    开源实现OpenSSL

    

对于Linux系统:OpenSSL ,GPG(pgp)

  OpenSSL 由三部分组成:

      libencrpt库

      libssl库
      openssl 多用途命令行工具

      SSL主要有三步:

      客户端向服务器端索要证书并验证证书;

      双方协商生成“会话秘钥”;

      双方采用会话秘钥进行加密通信

  第一阶段:ClientHello

       支持的协议版本,比如tls1.2 

       客户端生成一个随机数,稍后用户生成“回话秘钥”

       支持的加密算法,比如AES、RSA

       支持的压缩算法

  第二阶段:ServerHello(服务器回应)

      确认使用的加密通信协议版本,比如tls1.2;

      服务器端生成一个随机数,稍后用于生成“会话秘钥”

      确认使用的加密方法

  第三阶段:

      验证服务器证书;

      发送一下信息给服务器端

      一个随机数

      编码变更通知

      客户端握手结束通知

   第四阶段:

      收到客户端发来的第三个随机数,计算生成本次会话所有的会话秘钥

      服务端握手结束。

      Openssl

       众多子命令,分为三类

       标准命令

       消息摘要(dgst 子命令)

       加密命令 (enc子命令)

     标准命令:enc ca req genrsa 。。。。

    对称加密

    工具:openssl enc

   //加密

   openssl enc -e -des3 -a -salt -in aaa -out aaa.cipher

   //解密

   openssl enc -d -des3 -a -salt -in aaa.cipher -out ccc.plain

   单向加密

     openssl dgst

     openssl dgst -md5 bbb.palin

   生成随机数:

   工具

     openssl rand

     openssl rand -base64 10  ==》3f38ii5B3BqKEA==

     openssl rand -hex 10 == 》af7b04d09c1743a17ba7

     生成私钥

     openssl genrsa 1024 -out /tmp/mykey.private

     提出公钥

     openssl rsa  -in /tmp/mykey.private -pubout

      CA:

       公共CA 和私有 CA

      openssl ca配置文件

      /etc/pki/tls/openssl.cnf

     构建私有的CA

      在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;

      步骤:

        (1) 生成私钥
    openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096

         
(2) 生成自签证书
    openssl req -new -key -x509 /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

        (3) 为CA提供所需的目录及文件
mkdir -pv /etc/pki/CA/{certs,crl,newcerts}

         touch /ect/pki/CA/{serial,index.txt}

         echo 01 > /etc/pki/CA/serial

要用到证书进行安全通信的服务器,需要向CA请求签署证书;

步骤:以httpd为例
 (1) 用到的证书的主机生成私钥;
  
      mkdir /etc/httpd/ssl
         cd /etc/httpd/ssl
 openssl genrsa -out /etc/httpd/ssl/httpd.key 2048
(2)生成证书签署的请求
     openssl req -new-key /etc/httpd/ssl/httpd.key
4000
-out /etc/httpd/ssl/httpd.csr -days 365

           
(3)将请求通过可靠方式发送给CA主机;

 (4) 在CA主机上签署证书;
     openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd/crt -days 365

     查看证书中的信息
        openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

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

              
     (2) CA主机吊销证书
          先根据客户提价的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致

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

    (3)生成吊销证书的吊销编号(第一次吊销证书时执行)
            echo 01  > /etc/pki/CA/crlnumber

     (4) 更新证书吊销的列表
            openssl ca -gencrl -out thisca.crl

   查看crl文件:

          openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: