安全和加密

信息安全防护的目标
  保密性 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
原文地址:https://www.cnblogs.com/tony3154/p/10113575.html