关于数据传输中加密解密那点事儿

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于数据传输中加密解密那点事儿相关的知识,希望对你有一定的参考价值。

    基于上一篇,知道了数据加密中所用到的加密方式及算法,还有某些认证机构;

             那么这一篇就用来实际操作,如何使用命令来完成数据的加密及解密;

  首先,在操作之前,要了解到两个关于安全传输的协议即:SSL与TLS

       SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:

  TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。

  SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本

    在了解上述两个协议之后,接下来就是使用OpenSSL程序来实现上述的安全协议;

    OpenSSL是一个开源项目;其组成主要包括以下三个组件:

  •  openssl;多用途的命令行工具

  • libcrypto;实现加解密的算法的库

  • libssl;实现SSL/TLS功能的库

 

openssl的具体使用方法:

    ㈠ 对称加密

      对称加密使用了openssl的标准命令是enc。具体用法如下:

      openssl enc -ciphername [-in filename] [-out filename] [-e] [-d] [-a/-base64] [-salt]

        常用选项:

              -ciphername:算法名称;包括des3, des, aes, rc4, ...

              -e:加密

              -d:解密

              -a/-base64:纯文本格式编码

              -salt:加随机盐

              -in filename:要加密的文件路径

              -out filename:加密之后的文件的输出路径

          示例:   

    [[email protected] ~]# mkdir /shiyan

    [[email protected] ~]# cd /shiyan/

    [[email protected] shiyan]# cp -a /etc/fstab ./

    [[email protected] shiyan]# ls

    fstab

    [[email protected] shiyan]# openssl enc -e -des -a -salt -in ./fstab -out ./fstab.aes

    enter des-cbc encryption password:

    Verifying - enter des-cbc encryption password:

    [[email protected] shiyan]# ls

    fstab  fstab.aes

    [[email protected] shiyan]# cat fstab.aes 

    U2FsdGVkX1/8MReIhI8TC8rl+oSgYbU5+c/bzZut1Kv+JylxuubCqgybgIJafKEe

    Db1kH6YeCtU+zoAqrQMPdVGtyQ4X3kMPbyFZSRbnv91Ouj8QJxpjkO3ja5o3/qFk

    aJ7HtP8R3cyXiKynOzu7M2zNU4N7uKDz2G1QOCY/ZB1ds7mT7CkM27vnGkisjxTy

    3CiFZQZ0xex6P3MGK78IoWPMyv3tYnLb0Bz9vDbfWXWnj8ImEWSg0G1SbkZyTvcm

    T13PrzzaRiP11JOSB1isG3Qz9G2r8hp/0SbqduIyeZtvTr2GmsGz5AZpULakT31s

    iLmgfHtGtWCN0EGEbVh9zLzS7UsAY4D/r03iePY/BiGnEPY4leFqqOFfuqBL/1ec

    8LkiKB2LAvRnQI4LLWzEPXTysk67ETqiXHZrOtKWE744qFkRAK9kliUT7R8KtefQ

    gl+0dWI0ODNbbdL+j9s+VZB4YdlFYXacfOhiA5Qb1R69S52RmErx+kvjq1XmwoVx

    ld0lcctrEeSsF2jMReSpZ84gmyvMC511VYMlL9QLYn6BFFE65ycXZuQfv43GRQKu

    OeYYooaswQJQ5E4SjPQDMfSBgxblZqmIxuhKBH1Mve1FQZLAo9YZsn/CrzpOTSqa

    w57DkPY8U9A2Zdz5I4qC05wCQoXhoLcmXmc6f4keHLK4IVtOOHa/7OIKn3bHpUyG

    o/Aw4fNXYbwyst4yROvXQEJPKpmg6lD/Som0K6tDGvEyX/BZAgJu+5pInhDGLnaR

    +OkEyTN3otEXGytApEW2gxunQS3UFHzK+swVstUzjHYipXvzTBR0C3Aq4NkxWoK2

    weSYlDr6FujaqMIY6wbUoMR+gD7WdstDyVfgZtOo+sXMpagB8VEsAXtPHSow50yn

    5iQdUrMRCUb70Cda7/JUNreL+cNAc2ufZaQ7FJl1+VvlxytgZf+9gn/68jHq0D6t

    CL+7rwAr+7F9hvuq3BLFrBfid1+1PjUuJABiLaArSsUrmOc7iDB08QJrz6arMQuz

    CziR6tCkN6SmiVk1j93WyTvYtjo45CMIye4t8uJsXZVOYmNKmEXfutmmw2Cxfaso

    2WUjp8c/VdkJ2Oqhx8cmY/ZWg5OmIEPTQvCmbRpbh+GnsfvaoxdbR2mkXEXDnq0+

    l6HvgpH/0g0=

     ㈡单向加密

        单向加密使用的openssl的标准命令是dgst。具体用法如下:

        openssl dgst -ciphername /PATH/TO/SOME_FILE

        示例: 

    [[email protected] ~]# echo "hello gril" | openssl dgst -md5

    (stdin)= 886b7588265e1ddcaeb8f0c025efc167

    [[email protected] ~]# openssl dgst -md5 /shiyan/fstab

    MD5(/shiyan/fstab)= e05f16e951766776dbb825646b21dae1

     生成随机数

        生成随机数使用的是openssl的标准命令rand。具体用法如下:

        openssl rand [-out file] [ -rand file(s)] [-base64] [-hex] num

         示例: 

    [[email protected] ~]# openssl rand -hex 10

    b957e6cd51ff87ef47bd

    [[email protected] ~]# openssl rand -hex -out /shiyan/a.rand 10

    [[email protected] ~]# cat /shiyan/a.rand 

    a814ddf429ce79b2f296

      ㈣生成用户密码

        生成用户密码使用的是openssl标准命令中的passwd

        openssl passwd [-1] [-salt string] [-stdin]

        常用选项:

          -1:使用md5加密算法

           -salt string:加入随机数,最多8位

          -stdin:对标准输入的内容进行加密

          示例:


    [[email protected] ~]# echo "xuzongchao123" | openssl passwd -1 -stdin

    $1$kRWLNvyk$HD1pT6kFEzSquqKSyOGeZ0

    [[email protected] ~]# openssl passwd -1 -salt `openssl rand -base64 10`

    Password: 

    $1$VY1BfSc9$lkI2LeSIk3Ye5hTBWMvcQ.

     ㈤生成公钥加密算法

        生成RSA算法的私钥是:openssl genrsa

        从私钥中提取RSA公钥是:openssl rsa

        openssl genrsa [-out filename] [-des] [-des3] [-idea] [-f4] [-3] [numbits]

           -numbits:生成私钥的大小,默认是2048

        示例:

    [[email protected] ~]# (umask 077; openssl genrsa -out /shiyan/ga.genrsa 4096)

    # 括号的意思是将命令在子shell中运行,使用umask掩码修改生成文件的权限

    Generating RSA private key, 4096 bit long modulus

    ...................................................................................    .............++

    .........................................................++

    e is 65537 (0x10001)

    [[email protected] ~]# ls -dl /shiyan/ga.genrsa 

    -rw-------. 1 root root 3243 8月  11 15:41 /shiyan/ga.genrsa

    [[email protected] ~]# cat /shiyan/ga.genrsa 

    -----BEGIN RSA PRIVATE KEY-----

    MIIJKQIBAAKCAgEA8+W/qjcEKMnbzLmCHxf2oigkTpuA11eVtD5ZvpMSH78ZtQvU

    auyRxrwqnr7Jvge2AawA6F7JvyBEux5v1AImFXFyBZpK9yMe/WUEyjKLrToA151b

    ID6KbrT8OGGE0fNdNY+UuR1hvZ1Hz/+rjVZVDYKtnhi8TxrLPuTSaA90tn4WCajh

    UtSn9d7tmBhBNmW0AEZIxFc2VnX9HexGGWR1sCcYV6oeojxv+1BZHPmcyB7zeQuB

    AH1cB3c/mUKMdXBEgMUXf9BMycJpAZL3qzXpig5GHN6VKsAA6ELNmXmBaCEfDhH1

    Bv2jetGAwL8GaImX0I+q6qjKp56NGI3tRfi420Ut7/kDFreqm8wUXykZMRGTaQic

    3s0t5Q/jBMFjD6cBEvijzyLVSfhP3C2Tsb9pdEFquj8A7O47NtH0hermujq7ycqz

    Dj0CuzjCsWfBooJfn2CIylQixl109gyvYuJ5q6xyNIwKCAQA1AYuaNo4Y/EXZW2Y

    m0Fx/RZCrohs2rEcTxSRTvmenH9cGYn+tKmE4PcuyrulYkV88TmpRL12f64v1V3h

    -----END RSA PRIVATE KEY-----    

          openssl rsa [-in filename] [-out filename] [-pubout]

            -pubout:根据私钥提取出公钥,不生成文件,在显示屏输出结果;
         示例:

    [[email protected] ~]# openssl rsa -in /shiyan/ga.genrsa -pubout

    writing RSA key

    -----BEGIN PUBLIC KEY-----

    MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8+W/qjcEKMnbzLmCHxf2

    oigkTpuA11eVtD5ZvpMSH78ZtQvUauyRxrwqnr7Jvge2AawA6F7JvyBEux5v1AIm

    loR7sgFWoRASmiZCyAHPntzQUralQluU5xqinzXigO6CtKoAlyj/GU7xa+jW3aN8

    G4NWwel6W9ZB9S6scPd1pj5efUwKZ+4nbzu96upppsmLdTuftDab513IYEA5iiRq

    UeHCh5/oCC4ZMSiLSuOLQx8CAwEAAQ==

    -----END PUBLIC KEY-----

        ㈥建立私有CA
            ①创建CA的私钥文件

                ~]# (umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

             ②生成自签证书

                 ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem  -out /etc/pki/CA/cacert.pem -days 3653

                    -new :生成新证书签署请求

                    -x509:生成自签证书,专用语私有CA的自签证书的颁发

                    -key:指定CA的私钥文件路径

                    -out:生成自签证书所保存的路径

                    -days:设置证书有效期限;单位是天

                ③满足CA所必须的目录级文件和文本文件的布局:

                    ~]# touch /etc/pki/CA/index.txt

            ~]# echo 01 > /etc/pki/CA/serial


本文出自 “从运维开始” 博客,请务必保留此出处http://xredm.blog.51cto.com/12445165/1955532

以上是关于关于数据传输中加密解密那点事儿的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Cookie、HttpOnly那点事儿

关于LOG那点事儿

漫画https 加密背后那点事

关于SSL/TLS的那点事儿

关于SSL/TLS的那点事儿

关于docker那点事儿——docker基础命令