• 网络安全加解密原理


    网络安全背景

    ​        网络就是实现不同主机之间的通讯。网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间可以进行通讯的目的,虽然看似简简单单几句话,就描述了网络概念与网络出现的目的,但是为了真正实现两台主机之间的稳定可靠通讯,其实是一件非常困难的事情了,如果还要再通讯的基础上保证数据传输的安全性,可想而知,绝对是难上加难,因此,网络发明之初,并没有太关注TCP/IP互联协议中的安全问题。

    ​        对于默认的两台主机而言,早期传输数据信息并没有通过加密方式传输数据,设备两端传输的数据本身实际是明文的,只要能截取到传输的数据包,就可以直接看到传输的数据信息,所以根本没有安全性可言。

    早期利用明文方式传输的协议有:FTP、HTTP、SMTP、Telnet等。

    数据加密算法

    网络安全涉及很多方面,而网络数据的安全传输通常会面临以下几方面的威胁:

      1.数据窃听与机密性: 即怎样保证数据不会因为被截获或窃听而暴露。

      2.数据篡改与完整性: 即怎样保证数据不会被恶意篡改。

      3.身份冒充与身份验证: 即怎样保证数据交互双方的身份没有被冒充。

    针对以上几个问题,可以用以下几种数据加密方式来解决(每种数据加密方式又有多种不同的算法实现):

    数据加密方式 描述 主要解决的问题 常用算法
    对称加密 指数据加密和解密使用相同的密钥 数据的机密性 DES,AES
    非对称加密 也叫公钥加密,指数据加密和解密使用不同的密钥-密钥对 身份验证 DSA,RSA
    单向加密 指只能加密数据,而不能解密数据 数据的完整性 MD5,SHA系列算法

    普通算法

    网站此时利用普通常见算法,针对密码加密,基本保证数据再传输时候,不是明文
    但是黑客可能会有一个庞大的算法本,里面记录了常见的密码和加密后的密文,一一对应,然后可以利用程序大量计算,反解出明文密码
    
    撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。 很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网址,这就可以理解为撞库攻击。
    

      

    对称加密 

     

    对称加密算法,如其名,就是使用同一个秘钥进行加密和解密。
    
    优点是速度较快,适合对数据量比较大的数据进行加密。
    
    缺点是密钥的保存方式需要保证,一旦加密或者解密的哪一方泄漏了密钥,都会导致信息的泄漏。
    
    常用的对称加密算法有:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6、AES。
    

      

    非对称加密

    简单理解,比喻关系
    公钥---锁
    私钥---开锁钥匙
    
    私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。
    比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。
    

      

    常用的非对称假面算法有:RSA,ECC,Diffie-Hellman,El Gamal,DSA(数字签名用)

    虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。为了解释这个过程,请看下面的例子:
    1.使用对称加密,速度快
    2.使用非对称加密的方式,针对第一步的秘钥加密传输
    
    
    (1) 超哥需要在银行的网站做一笔交易,他的浏览器首先生成了一个随机数作为对称密钥。
    
    (2) 超哥的浏览器向银行的网站请求公钥(非对称加密的公钥~~)。
    
    (3) 银行将公钥发送给超哥。
    
    (4) 超哥的浏览器使用银行的公钥将自己的对称密钥加密(这里是重点,已经是【对称加密+非对称加密】)。
    
    (5) 超哥的浏览器将加密后的对称密钥发送给银行。
    
    (6) 银行使用私钥解密得到超哥浏览器的对称密钥。
    
    (7) 超哥与银行可以使用对称密钥来对沟通的内容进行加密与解密了。
    

     总结

    1.对称加密方式,加密解密使用同样的密钥,速度较快,但是密钥需要在网络中传输,因此可能被截获,不安全
    
    2.非对称加密,使用一对密钥,公钥,私钥,因此安全性很高,但是加密和解密速度很慢
    
    3.常用的方式是,结合两种加密方式,效率与安全性都有又了保障。
    

      

    如何安全获取公钥

     1) A和B端首先生成自己的公钥和私钥的密钥对,为了使对方能相信自己的公钥信息,将自己的公钥信息告知给第三方发证机构,利用第三方机构对自己的公钥进行公证。第三方机构会制作一个数字证书(机构 编号 以及发证机构的戳),并且第三方机构也要给自己设置一个合法的公钥和私钥,并且公钥设置为第三方机构的公钥证书。

    2) 发证机关计算出数字证书数据的特征码,并用自己的私钥进行加密,并将加密的信息附加到特征码后成为数字签名。

    3) A和B两端获得公正过的证书信息,并通过证书信息传递,得到对方的公钥。

    4) A和B两端与第三方机构建立连接,获得第三方证书,通过第三方证书获得第三方公钥,利用第三方公钥只要能解密数字签名即可。

    Openssl软件

    在传输层和应用层之间。ssl层

     

     openssl实践

    openssl由三部分组成:

      1.libcrpto:通用加密库

      2. libssl:TSL/SSL组成库,基于会话实现了身份认证,数据加密和会话完整性。

      3. openssl:提供命令行工具,例如模拟创建证书。

    openssl命令行

    # 检查版本
    [root@chaogelinux ~]# openssl version
    OpenSSL 1.0.2k-fips  26 Jan 2017
    
    # 配置文件
    [root@chaogelinux ~]# cat /etc/pki/tls/openssl.cnf
    
    #获取openssl命令操作
    [root@chaogelinux ~]# openssl -?
    openssl:Error: '-?' is an invalid command.
    
    # 标准命令
    Standard commands
    asn1parse         ca                ciphers           cms
    crl               crl2pkcs7         dgst              dh
    dhparam           dsa               dsaparam          ec
    ...
    
    # 信息摘要命令,单向加密命令
    Message Digest commands (see the `dgst' command for more details)
    md2               md4               md5               rmd160
    sha               sha1
    
    
    # 加密命令
    Cipher commands (see the `enc' command for more details)
    aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb
    aes-256-cbc       aes-256-ecb       base64            bf
    bf-cbc            bf-cfb            bf-ecb            bf-ofb
    
    # 测试机器对openssl支持的加密算法进行速度测试,检测服务器性能
    openssl speed
    

      

    【openssl加密命令】

    语法
    openssl enc -加密算法  -in filename -out filename  
    
    # 对文件加密
    
    [root@chaogelinux ~]# cat my.pwd
    yu:123
    [root@chaogelinux ~]#
    [root@chaogelinux ~]#
    # 输入密码后加密成功,超哥这里是888888
    [root@chaogelinux ~]# openssl enc -des3 -salt -a -in my.pwd -out my.pwd.des3
    enter des-ede3-cbc encryption password:
    Verifying - enter des-ede3-cbc encryption password:
    
    #解密文件
    [root@chaogelinux ~]# cat my.pwd.des3
    U2FsdGVkX19ZDOFtbdZz3QNu+bxm3DKd
    [root@chaogelinux ~]#
    
    # 输入密码后,解密文件
    [root@chaogelinux ~]# openssl enc -des3 -d -salt -a -in my.pwd.des3 -out my.pwd.src
    enter des-ede3-cbc decryption password:
    [root@chaogelinux ~]#
    [root@chaogelinux ~]# cat my.pwd.src
    yu:123
    
    参数解释:
    enc openssl把众多的对称加密算法,统一集成在了enc指令,用法是 enc -算法名
    -des3 指定算法
    -d    指定解密
    -e  指定加密
    -salt 密码加盐,防止密码被破解
    -a 基于base64位编码,可选参数
    

    【openssl创建私有证书】

    1.创建私钥和公钥,模拟证书颁发机构生成证书,生成一对密钥

    # 指定私钥长度1024,并且将生成的私钥信息保存在文件里,且利用小括号功能,修改子shell的umask
    [root@chaogelinux ssl_cert]# (umask 077;openssl genrsa -out server1024.key 1024)
    Generating RSA private key, 1024 bit long modulus
    ..........++++++
    ...................++++++
    e is 65537 (0x10001)
    
    # 读取私钥文件,选择非对称加密算法rsa,生成公钥,写入到文件中
    [root@chaogelinux ssl_cert]# openssl rsa -in server1024.key -pubout -out server1024.key.pub
    
    # 检查文件
    [root@chaogelinux ssl_cert]# ls
    server1024.key  server1024.key.pub
    
    
    # 生成自签的证书
    [root@chaogelinux ssl_cert]# openssl req -new -x509 -key server1024.key -out server.crt -days 365
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:BJ
    Locality Name (eg, city) [Default City]:BJ
    Organization Name (eg, company) [Default Company Ltd]:chaoge
    Organizational Unit Name (eg, section) []:it
    Common Name (eg, your name or your server's hostname) []:pythonav.cn
    

      

    Nginx部署https

    ​        利用证书实现HTTPS访问Nginx服务,需要nginx使用ssl模块配置HTTPS支持,默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,这些文件并不在同一个软件包中,通常这个文件名类似libssl-dev。 

    ​        nginx的https协议需要ssl模块的支持,我们在编译nginx时使用--with-http_ssl_module参数加入SSL模块。还需要服务器私钥,服务器证书,如果是公司对外环境,这个证书需要购买第三方的权威证书,否则用户体验得不到保障

    部署https实践

    1.创建Nginx需要的证书文件
    确保机器安装了openssl和openssl-devel,创建证书
    yum install openssl openssl-devel -y 
    
    2.确保nginx支持了ssl模块,查看nginx编译信息即可
    nginx -V
    
    3.模拟证书颁发机构CA创建证书
    进入nginx安装目录,便于管理证书
    [root@chaogelinux ~]# cd /opt/ngx112/
    [root@chaogelinux ngx112]# mkdir key
    [root@chaogelinux ngx112]# cd key/
    
    # 生成私钥文件,利用字shell降低文件权限
    [root@chaogelinux key]# (umask 077;openssl genrsa -out server1024.key 1024)
    Generating RSA private key, 1024 bit long modulus
    .++++++
    ...++++++
    e is 65537 (0x10001)
    
    
    # 自己签发证书,crt证书扩展名
    [root@chaogelinux key]# openssl req -new -x509 -key server1024.key -out server.crt -days 365
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:BJ
    Locality Name (eg, city) [Default City]:BJ
    Organization Name (eg, company) [Default Company Ltd]:chaoge
    Organizational Unit Name (eg, section) []:it
    Common Name (eg, your name or your server's hostname) []:pythonav.cn
    Email Address []:yc_uuu@163.com
    
    # 向机构申请证书,我们这里生成的是证书请求文件,而不是直接生成证书了,运维发送该文件给机构,请求合法证书
    [root@chaogelinux key]# openssl req -new -key server1024.key -out server.csr
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:BJ
    Locality Name (eg, city) [Default City]:BJ
    Organization Name (eg, company) [Default Company Ltd]:chaoge
    Organizational Unit Name (eg, section) []:it
    Common Name (eg, your name or your server's hostname) []:pythonav.cn
    Email Address []:yc_uuu@163.com
    
    # 针对这个请求文件,做一个加密处理,告知办法机构,可以用这个密码解密,了解公司信息,也可以直接回车不写密码
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    
    
    # 一般这个证书颁发,需要等到一周内的时间,因此我们直接使用本地的自己签发的证书即可,进行练习
    
    4.配置Nginx,加载私钥,证书
    修改nginx.conf,添加
    include extra/443.conf;
    
    # 创建https配置文件
    vim 443.conf 写入
    
    [root@web01 extra]# cat 443.conf
    
    server {
            server_name _;
            listen 443 ssl;
            ssl_certificate /opt/nginx/key/server.crt;
            ssl_certificate_key /opt/nginx/key/server1024.key;
            charset utf-8;
        location / {
    
             root html;
             index index.html index.htm;
    }
    }
    ~
    
    
    # 修改80端口虚拟主机,进行请求转发给443
    }
    server {
        listen 80;
        server_name www.chaoge.com;
        charset utf-8;
         rewrite ^(.*)$ https://$host$1 permanent;
        location / {
                root html;
                index index.html index.htm;
        }
        }
    include extra/443.conf;
    }
    
    
    # 检测语法,重启nginx
    [root@web01 extra]# nginx -t
    nginx: the configuration file /opt/nginx-1.16.0//conf/nginx.conf syntax is ok
    nginx: configuration file /opt/nginx-1.16.0//conf/nginx.conf test is successful
    

      

     使用腾讯云获取证书

    https://pythonav.com/wiki/detail/3/40/

  • 相关阅读:
    ROS2概述和实践入门
    ROS2与FastRTPSROS2与FastRTPS
    RoboWare Studio已经停更
    ubuntu20.04 Roboware安装遇到的问题
    Ubuntu16.04安装ROS2
    拥抱ROS2系列:ROS2概述和实践入门(一)
    clash for Linux安装使用
    Ubuntu 安装RoboWare
    Ubuntu 18.04 安装VSCode
    开源ImageFilter库For IOS源码发布
  • 原文地址:https://www.cnblogs.com/abc1234567/p/14224728.html
Copyright © 2020-2023  润新知