• 安全和加密


    信息安全防护的目标
      保密性 Confidentiality
      完整性 Integrity
      可用性 Usability
      可控制性Controlability
      不可否认性 Non-repudiation

    安全防护环节

      物理安全:各种设备/主机、机房环境
      系统安全:主机或设备的操作系统
      应用安全:各种网络服务、应用程序
      网络安全:对网络访问的控制、防火墙规则
      数据安全:信息的备份与恢复、加密解密
      管理安全:各种保障性的规范、流程、方法

    安全攻击: STRIDE
      Spoofing 假冒
      Tampering 篡改
      Repudiation 否认
      Information Disclosure 信息泄漏
      Denial of Service 拒绝服务
      Elevation of Privilege 提升权限

    密码算法和协议

      对称加密

      公钥加密

      单向加密

      认证协议

    对称加密算法

      DES:Data Encryption Standard,56bits
      3DES:
      AES:Advanced (128, 192, 256bits)
      商业解决方案:Blowfish,Twofish,IDEA,RC6,CAST5

      特性:
        1、加密、解密使用同一个密钥,效率高
        2、将原始数据分割成固定大小的块,逐个进行加密

      缺陷:
        1、密钥过多
        2、密钥分发
        3、数据来源无法确认

    非对称加密算法

      公钥加密:密钥是成对出现

        公钥:公开给所有人;public key

         私钥:自己留存,必须保证其私密性;secret key

      特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

           可以根据该原理实现数字签名,实现数据来源的确认

        功能:

          数字签名:主要在于让接收方确认发送方身份

          对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方

          数据加密:适合加密较小数据

         缺点:密钥长,加密解密效率低下

         算法:RSA(加密,数字签名),DSA(数字签名),ELGamal

         基于一对公钥/密钥对

          用密钥对中的一个加密,另一个解密

    单向散列

      hash(data)=digest 摘要

        1、data不同,摘要必不同

        2、摘要相同,data相同

        3、不论data大小,digest大小只与算法相关

        4、hash算法,不可逆

      计算哈希值:md5sum、sha1sum、sha512sum 

      比较哈希值用法:md5sum、sha1sum、sha512sum用法一样

        sha1sum f1.sh> f1.sh.sha1        生成哈希值文件

        sha1sum -c  f1.sh.sha1    比较哈希值

      多个文件可以生成一个校验文件,一次检查多个

        sha512sum f1.sh msconfig a.txt > all.sha

        sha512 -c all.sha

    应用程序:RPM

      文件完整性的两种实施方式

        被安装的文件

          MD5单向散列

            rpm --verify package_name (or -V)

      发行的软件包文件

        GPG公钥签名

          rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*

          rpm --checksig pakage_file_name (or -K)

    使用gpg实现对称加密

      对称加密file文件

        gpg -c file

        ls file.gpg

      在另一台主机上解密file

        gpg -o file -d file.gpg

    使用gpg工具实现公钥加密

      在hostB主机上用公钥加密,在hostA主机上解密  

      在hostA主机上生成公钥/私钥对 

        gpg --gen-key

      在hostA主机上查看公钥

        gpg --list-keys

      在hostA主机上导出公钥到wang.pubkey

        gpg -a --export -o wang.pubkey

      从hostA主机上复制公钥文件到需加密的B主机上

        scp wang.pubkey hostB:

      在需加密数据的hostB主机上生成公钥/私钥对   

        gpg --list-keys
        gpg --gen-key

      在hostB主机上导入公钥

        gpg --import wang.pubkey

        gpg --list-keys

      用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg

        gpg -e -r wangxiaochun file

        file file.gpg

      复制加密文件到hostA主机

        scp fstab.gpg hostA:

      在hostA主机解密文件

        gpg -d file.gpg 

        gpg -o file -d file.gpg

      删除公钥和私钥

        gpg --delete-keys wangxiaochun

        gpg --delete-secret-keys wangxiaochun

    https工作原理:

      1、客户端向服务器发起请求

      2、服务器向客户端发送自己的证书(CA私钥签名的服务器证书)Sca(Pserver)

      3、客户端用CA的公钥解开私钥获取服务器公钥Pca[Sca(Psever)]=Pserver

      4、客户端随机生成一个对称密钥key

      5、用服务器的公钥加密对称密钥Pserver(key)并发送给服务器

      6、服务器用私钥解密收到的密钥获得对称密钥Sserver[Pserver(key)]=key

      7、客户端和服务器利用对称密钥(key)进行加密通信

    OpenSSL

      OpenSSL:开源项目

        三个组件:

          openssl: 多用途的命令行工具,包openssl

           libcrypto: 加密算法库,包openssl-libs

          libssl:加密模块应用库,实现了ssl及tls,包nss

      openssl命令:

        两种运行模式:交互模式和批处理模式

        openssl version:程序版本号

        标准命令、消息摘要命令、加密命令

        标准命令:

          enc, ca, req, ...

        对称加密:

          工具:openssl enc, gpg

          算法:3des, aes, blowfish, twofish

        enc命令:        

          帮助:man enc

          加密:openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher             对称加密

          解密:openssl enc -d -des3 -a -salt –in testfile.cipher  -out testfile   对称解密    

      单向加密:

        工具:md5sum, sha1sum, sha224sum,sha256sum…

      dgst命令:

        帮助:man dgst

        openssl dgst -md5 [-hex默认] /PATH/SOMEFILE  生成文件的md5值

        openssl dgst -sha1 testfile              生成文件的sha1值

        md5sum /PATH/TO/SOMEFILE   生成文件的md5值

      生成用户密码:

        passwd命令:

        帮助:man sslpasswd

        openssl passwd -1 -salt SALT(最多8位)

        openssl passwd -1 –salt centos

      生成随机数:

        帮助:man sslrand

        openssl rand -base64|-hex NUM

        NUM: 表示字节数;-hex时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2

      公钥加密:

        算法:RSA, ELGamal

        工具:gpg, openssl rsautl(man rsautl)

      数字签名:

        算法:RSA, DSA, ELGamal

      密钥交换:

        算法:dh

        DSA: Digital Signature Algorithm

        DSS:Digital Signature Standard

        RSA:

      生成密钥对儿:man genrsa

      生成私钥

        openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS 

        (umask 077; openssl genrsa –out test.key –des 2048)   生成私钥,直接在子shell里面设置了umask码并进行对称密钥加密,一步到位

        openssl rsa -in test.key –out test2.key   对上一步加密的私钥进行解密

      从私钥中提取出公钥

        openssl rsa –in test.key –pubout –out test.key.pub

      随机数生成器:伪随机数字

        键盘和鼠标,块设备中断

        /dev/random:仅从熵池返回随机数;随机数用尽,阻塞    

        /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞

    创建CA和申请证书

    PKI:Public Key Infrastructure

      CA

      RA

      CRL

      证书存取库

    建立私有CA:

      OpenCA

      openssl

    证书申请及签署步骤:

      1、生成申请请求

      2、RA核验 

      3、CA签署 

      4、获取证书

    创建私有CA:

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

        CA文件路径都在/etc/pki/CA/

    dir             = /etc/pki/CA            # Where everything is kept
    certs           = $dir/certs             # Where the issued certs are kept
    crl_dir         = $dir/crl               # Where the issued crl are kept
    database        = $dir/index.txt         # database index file.
    #unique_subject = no                     # Set to 'no' to allow creation of
                                             # several ctificates with same subject.
    new_certs_dir   = $dir/newcerts          # default place for new certs.
    
    certificate     = $dir/cacert.pem         # The CA certificate    CA自签名证书
    serial          = $dir/serial             # The current serial number
    crlnumber       = $dir/crlnumber          # the current crl number
                                              # must be commented out to leave a V1 CRL
    crl             = $dir/crl.pem            # The current CRL
    private_key     = $dir/private/cakey.pem  # The private key   CA私钥
    RANDFILE        = $dir/private/.rand      # private random number file

      三种策略:匹配、支持和可选

        匹配指要求申请填写的信息跟CA设置信息必须一致

        支持指必须填写这项申请信息

        可选指可有可无

      1、创建所需要的文件

        touch /etc/pki/CA/index.txt 生成证书索引数据库文件

        echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号

      2、 CA自签证书

        生成私钥

        cd /etc/pki/CA/

        (umask 066; openssl genrsa -out  /etc/pki/CA/private/cakey.pem 2048)

        生成自签名证书

        openssl req -new -x509 –key

        /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem

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

          -x509: 专用于CA生成自签证书

          -key: 生成请求时用到的私钥文件

          -days n:证书的有效期限

          -out /PATH/TO/SOMECERTFILE: 证书的保存路径

       3、颁发证书

        A 在需要使用证书的主机生成证书请求

          给web服务器生成私钥

            (umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)

          生成证书申请文件

            openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out etc/pki/tls/test.csr

        B 将证书请求文件传输给CA

        C CA签署证书,并将证书颁发给请求者

          openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 365

        注意:默认国家,省,公司名称三项必须和CA一致

        D 查看证书中的信息:

          openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates

          openssl ca -status SERIAL  查看指定编号的证书状态

       4、吊销证书

        A 在客户端获取要吊销的证书的serial

          openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

        B 在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致

          吊销证书:

            openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

        C 指定第一个吊销证书的编号

          注意:第一次更新证书吊销列表前,才需要执行

            echo 01 > /etc/pki/CA/crlnumber

        D 更新证书吊销列表

          openssl ca -gencrl -out /etc/pki/CA/crl.pem

          查看crl文件:

            openssl crl -in /etc/pki/CA/crl.pem -noout -text

      重复申请证书需要更改index.txt.attr里的值改为no,即可     

    unique_subject = yes     改为no即可申请重复证书

      在配置文件/etc/pki/tls/openssl.cnf里的文件更改policy类型

    policy          = policy_match     此处可改为anything放宽限制
    
    # For the CA policy
    [ policy_match ]                match更改为optional可放宽限制
    countryName             = match             
    stateOrProvinceName     = match
    organizationName        = match
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    # For the 'anything' policy
    # At this point in time, you must list all acceptable 'object'
    # types.
    [ policy_anything ]
    countryName             = optional
    stateOrProvinceName     = optional
    localityName            = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
  • 相关阅读:
    控制台布局编程小结
    代码健壮、测试的必要性
    《Scott Mitchell 的ASP.NET 2.0数据教程》之二 BLL层 学习过程中的问题
    阅读张孝祥的《大胆尝试随需消费的软件培训模式》后感触良多
    Northwind 数据库相关练习
    学习Membership
    WEB标准化参考资料
    商学院实验班I期 5月 教学计划
    怎样设计和创建数据库?
    PathMatchingResourcePatternResolver
  • 原文地址:https://www.cnblogs.com/tony3154/p/10113575.html
Copyright © 2020-2023  润新知