openssl 常用命令

    1. openssl version 查看版本
    2. openssl help 查看帮助命令
    3. 查看enc 命令
    4. symmetric cipher routines
    5. whatis enc
    6. man enc
    7. enc命令:
    8. 加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
    9. 解密:~]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab
    10. 生产公钥和秘钥
    11. openssl genrsa -out rsakeyprivate 2048
    12. openssl ras -in rsakey.private -pubout

    httpd ssl的 证书生产与配置
    cd /etc/pki/CA/certs/ #没有文件夹 就创建
    1.服务器端
    创建私钥 cakey.pem
    (umask 077;openssl genrsa -out private/cakey.pem 2048)
    touch index.txt
    echo 01 > serial

      创建自签证书 cacert.pem    
          openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300
          填入下面数据 :
              CN
              wuhu
              wuhu
              uxun
              uxun
              ca.uxun.com
              1228857713@qq.com
    
          去客户端 (安装有apache的服务器)
              cd /home/appuser/tool/apache24/ssl   (这台服务器是这样的)
              生产httpd.key
              (umask 077; openssl genrsa -out httpd.key 1024)
    
              生成 httpd.csr
              openssl req -new -key httpd.key -out httpd.csr 
              填入下面数据 :
              CN
              wuhu
              wuhu
              uxun
              uxun
              ca.uxun.com
              1228857713@qq.com
              回车
              回车
    
    
              将 httpd.csr 复制到 服务器端
              scp httpdcsr root@170.101.101.9:/tmp
    
    
          3. 到服务器端 签署证书
    

    加解密的原理

    我们一般的加密是用一个密码加密文件,然后解密也用同样的密码.这很好理解,这个是对称加密.而有些加密时,加密用的一个密码,而解密用另外一组密码,这个叫非对称加密,意思就是加密解密的密码不一样.初次接触的人恐怕无论如何都理解不了.其实这是数学上的一个素数积求因子的原理的应用,如果你一定要搞懂,百度有大把大把的资料可以看,其结果就是用这一组密钥中的一个来加密数据,可以用另一个解开.是的没错,公钥和私钥都可以用来加密数据,相反用另一个解开,公钥加密数据,然后私钥解密的情况被称为加密解密,私钥加密数据,公钥解密一般被称为签名和验证签名.

    openssl 常用命令

    基本概念

    信息摘要算法和数字签名

    1.对要签名的原始文件file做信息摘要操作得到摘要信息 Mf

    2.使用私钥对Mf进行加密得到 Sf

    3.Sf 就是原始文件的签名信息,可以和文件一起 保存或者发送给接送人

    对数字签名的验证流程如下:

    1. 验证者接收到file和Sf 后,首先对文件file采用相同的信息摘要算法得到摘要信息 Mf
      2.使用公钥对S F 解密得到 Mf2
      3.比较 Mf 和 MF2 ,如果相同,则验证成功,证书文件 File 没有更改,并且数字签名SF 有效。

    使用信息摘要指令进行数字签名和验证

    1.生成一个rsa秘钥
    openssl genrsa -out rsaprivatekey.pem -passout pass:111111 -des3 1024
    2.从私钥中导出一个相应的rsa公钥并保存
    openssl rsa -in rsaprivatekey.pem -passin pass:111111 -out rsapublickey.pem -pubout
    3.信息摘要和私钥加密操作
    openssl dgst -sha1 -sign rsaprivatekey.pem -out sgn.txt openssl.txt

    验证rsa 数字签名

    openssl dgst -sha1 -verify rsapublickey.pem -signature sgn.txt openssl.txt

    OpenSSL:

    NIST:
    保密性:
    数据保密性
    隐私性
    完整性:
    数据完整性
    系统完整性
    可用性

    安全攻击:
    被动攻击:窃听
    主动攻击:伪装、重放、消息篡改、拒绝服务

    安全机制:
    加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证

    安全服务:
    认证
    访问控制
    数据保密性
    连接保密性
    无连接保密性
    选择域保密性
    流量保密性
    数据完整性
    不可否认性

    密码算法和协议:
    对称加密
    公钥加密
    单向加密
    认证协议

    Linux系统:OpenSSL, gpg(pgp)

    加密算法和协议:
    对称加密:加密和解密使用同一个密钥;
    DES:Data Encryption Standard
    3DES:
    AES:Advanced (128bits, 192bits, 258, 384, 512bits)
    Blowfish
    Twofish
    IDEA
    RC6
    CAST5

         特性:
            1、加密、解密使用同一个密钥;
            2、将原始数据分割成固定大小的块,逐个进行加密;
    
         缺陷:
            1、密钥过多;
            2、密钥分发;
    
      公钥加密:密钥是成对儿出现
         公钥:公开给所有人;pubkey
         私钥:自己留存,必须保证其私密性;secret key
         特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
    
         数字签名:主要在于让接收方确认发送方身份;
         密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;
         数据加密:
    
         算法:RSA, DSA, ELGamal
    
      单向加密:只能解密,不能解密;提取数据指纹;
         特性:定长输出、雪崩效应;
         算法:
            md5: 128bits
            sha1: 160bits
            sha224   
            sha256
            sha384
            sha512
    
         功能:
            完整性;
    
      密钥交换:IKE
         公钥加密:
         DH (Deffie-Hellman)
            A: p, g
            B: p, g
    
            A: x
               --> p^x%g
    
               p^y%g^x = p^xy%g
            B: y
               --> p^y%g
    
               p^x%g^y = p^xy%g
    

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

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

    SSL: Secure Socket Layer
    TLS: Transport Layer Security
    1995:SSL 2.0, Netscape
    1996: SSL 3.0
    1999: TLS 1.0
    2006: TLS 1.1 RFC 4346
    2008:TLS 1.2
    2015: TLS 1.3

      分层设计:
         1、最低层:基础算法原语的实现,aes, rsa, md5
         2、向上一层:各种算法的实现
         3、再向上一层:组合算法实现的半成品
         4、用各种组件拼装而成的种种成品密码学协议/软件:
            tls, ssh,
    

    OpenSSL:开源项目
    三个组件:
    openssl: 多用途的命令行工具;
    libcrypto: 公共加密库;
    libssl: 库,实现了ssl及tls;

      openssl命令:
    
         openssl version:程序版本号
    
         标准命令、消息摘要命令、加密命令
    
         标准命令:
            enc, ca, req, ...
    
         对称加密:
            工具:openssl enc, gpg
            算法:3des, aes, blowfish, twofish
    
            enc命令:
               加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
               解密:~]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab
                  -des3
                  openssl ?
    
         单向加密:
            工具:md5sum, sha1sum, sha224sum, sha256sum,..., openssl dgst
    
            dgst命令:
               openssl dgst -md5 /PATH/TO/SOMEFILE
    
    
            MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性;
    
               机制:
                  CBC-MAC
                  HMAC:使用md5或sha1算法
    
         生成用户密码:
            passwd命令
    
               openssl passwd -1 -salt SALT
    
         生成随机数:
            openssl rand -base64|-hex NUM
               NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2; 
    
         公钥加密:
            加密:
               算法:RSA, ELGamal
               工具:gpg, openssl rsautl
            数字签名:
               算法:RSA, DSA, ELGamal
    
            密钥交换:
               算法:dh
    
            DSA: Digital Signature Algorithm
            DSS:Digital Signature Standard
            RSA:
    
            生成密钥对儿:
               openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
    
               # (umask 077; openssl genrsa -out key.pri 2048)
    
               提取出公钥:
               # openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout
    
    
            随机数生成器:
               /dev/random:仅从熵池返回随机数;随机数用尽,阻塞;
               /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数;非阻塞;
    

    OpenSSL:
    三个组件:
    openssl: 多用途的命令行工具;
    libcrypto: 加密解密库;
    libssl:ssl协议的实现;

    PKI:Public Key Infrastructure
    CA
    RA
    CRL
    证书存取库

    建立私有CA:
    OpenCA
    openssl

    证书申请及签署步骤:
    1、生成申请请求;
    2、RA核验;
    3、CA签署;
    4、获取证书;

    创建私有CA:
    openssl的配置文件:/etc/pki/tls/openssl.cnf

      (1) 创建所需要的文件
         # touch index.txt
         # echo 01 > serial
         # 
      (2) CA自签证书
         # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
         # openssl req -new -x509 -key /etc/pki/CA/private/cakey.epm -days 7300 -out /etc/pki/CA/cacert.pem
            -new: 生成新证书签署请求;
            -x509: 专用于CA生成自签证书;
            -key: 生成请求时用到的私钥文件;
            -days n:证书的有效期限;
            -out /PATH/TO/SOMECERTFILE: 证书的保存路径;
    
      (3) 发证
         (a) 用到证书的主机生成证书请求;
            # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
            # openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
         (b) 把请求文件传输给CA;
         (c) CA签署证书,并将证书发还给请求者;
            # openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
    
            查看证书中的信息:
               openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-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 thisca.crl
    
            查看crl文件:
               # openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
    

    博客作业:加密解密基础、PKI及SSL、创建私有CA;