美文网首页
openssl, 建立私有CA

openssl, 建立私有CA

作者: epiiplus1equal0 | 来源:发表于2019-04-05 00:44 被阅读0次

    [TOC]

    openssl version # 版本号
    # 标准命令
        enc, ca, req, ...
    # 对称加密
        工具: openssl enc, gpg
        算法: 3des, aes, blowfish, twofish
    
        # enc命令:
        # 实例: 加密/root/fstab
        openssl enc -e -des3 -a -salt -in /root/fstab -out /root/fstab.ciphertxt
            -e    加密
            -d    解密
            -des3 使用哪种算法, 此处为使用des3这种算法
            -a    基于文本进行编码
            -salt 自动加杂质
            -in   需要加密的文件
            -out  加密后输出的文件
    
        # 实例: 解密对应文件
        openssl enc -d -des3 -a -salt -in /root/fstab.ciphertxt -out /root/fstab
    
    # 单向加密:
        工具: md5sum, sha1sum, sha224sum, sha256sum, ..., openssl dgst (消息摘要)
        openssl dgst -md5 -hex -out /PATH/TO/RESULT_FILE /PATH/TO/FILE
        MAC: message authentication code, 单向加密的一种延伸应用, 
                     用于实现保证网络通信中所传输数据的完整性
            机制:
                CBC-MAC
                HMAC: 使用md5或sha1算法 (集群会使用)
    
    # 生成用户密码:
        openssl passwd -1 -salt 'SALT' # 回车后输入密码, 即可显示加密后的密码
        -1    md5加密
        -salt 指明杂质
        
    # 生成随机数:
        openssl rand [ -base64 | -hex ] [-out file] num
        -base64 | -hex 指明编码格式
        num            指明输出的位数(字节数), -hex时, 每个字符4位, 出现的字符数为num*2;
    
    # 公钥加密
        DSA: digital signature algorithm (数字签名算法, 功能薄弱)
        RSA: 算法统称, 公司名 (一般使用RSA)
        加密:
            算法: RSA, ELGamal
            工具: gpg, openssl rsautl, openssl dsa
        数字签名: 
            算法: RSA, DSA, ELGamal
            工具: openssl rsa, openssl dsa
        密钥交换:
            算法: dh
        生成密钥对儿:
            openssl genrsa  [ -des | -des3 ] -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
                -des | -des3 将密钥文件加密, 每次访问时需要输入密码
                -out       指明生成的密钥文件路径
                NUM_BITS   指明生成密钥的位数
                # 先生成的是私钥文件, 公钥可从私钥中提取出来
                openssl rsa -in /root/rsakey.private -pubout
                    -pubout 输出公钥信息
            (umask 077; openssl genrsa -out rsa.pri 2048)
                # bash shell的括号有特殊用法: 
                # 所有放在括号中的命令是在子shell中运行
                # 子shell中设置的umask值对当前shell无影响
        随机数生成器:
            熵池: 位于内存空间
            /dev/random: 仅从熵池返回随机数, 随机数用尽会阻塞
            /dev/urandom: 从熵池返回随机数, 随机数用尽, 会利用软件生成伪随机数, 不会阻塞
        
    

    三个组件

    • openssl 多用途的命令行工具

    • libcrypt 加密解密库

    • libssl ssl协议的实现

    PKI

    public key infrastructure (公钥基础设施)

    • CA 发证机构
    • RA 注册机构
    • CRL 吊销列表
    • 证书存取库

    建立私有CA

    两种方式:

    • openCA (是openssl的二次封装)
    • openssl

    证书申请及签署步骤

    • 1.生成申请请求
    • 2.RA核验
    • 3.CA签署
    • 4.获取证书

    创建私有CA

    /etc/pki/tls/openssl.cnf
    作为CA时经常用到的默认配置文件, 内部的设置要与存放的相关内容一致

    0. 配置好各个文件的存放路径

    [CA_default]
    dir         = /etc/pki/CA     # CA真正的工作目录
    certs       = $dir/certs      # 已签发的证书存放位置
    crl_dir     = $dir/crl        # 放被吊销后的证书
    database    = $dir/index.txt  # 证书目录
    certificate = $dir/cacert.pem # CA自己的证书
    serial      = $dir/serial     # 新发证书的序列号
    crlnumber   =                 # 吊销证书的序列号
    crl         =                 # 当前正在使用的crl文件
    private_key =                 # CA自己的私钥
    RANDFILE    =                 
    
    default_days     = 365        # 证书的有效期
    default_crl_days = 30         # 吊销列表的有效期
    default_md       = default
    preserve         = 
    

    (1) 创建所需文件

    cd /etc/pki/CA
    touch index.txt
    echo 01 > serial
    

    (2) CA自签证书

    # (1) 先创建CA自己的私钥
    (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
    # (2) 再根据私钥创建公钥
    openssl req  -key /etc/pki/CA/private/cakey.pem -new -x509 \
    -days 7300 -out /etc/pki/CA/cacert.pem
        # -key    生成请求时用到的私钥文件
        # -new    生成新证书签署请求
        # -x509   专用于CA生成自签证书 
        # -days N 证书的有效期限
        # -out    证书的保存路径
    

    (3) 发证

        # (3.1) 用到证书的主机生成证书请求
    (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
    openssl req -key /etc/httpd/ssl/httpd.key -new -days 365 \ 
    -out /etc/httpd/ssl/httpd.csr
        # (3.2) 把请求文件传输给CA
    scp /etc/httpd/ssl/httpd.csr root@192.168.235.140:/tmp
        # (3.3) CA验证证书, 并将签署后的证书还给请求者
    openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 365
    scp /tmp/httpd.crt root@192.168.235.130:/tmp
    
    # 查看证书中的信息
    openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-serial
    
    https_服务器证书.png

    (4) 吊销证书

    # (4.1) 客户端获取要吊销的证书的serial
    opessl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
    # (4.2) CA
    # 先根据客户提交的serial和subject信息, 对比检验是否与index.txt文件中的信息一致
    # 吊销证书:
    openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
    # (4.3) 生成吊销证书的编号(仅第一次吊销一个证书时执行)
    echo 01 > /etc/pki/crlnumber
    # (4.4) 更新证书吊销列表
    openssl ca -gencrl -out thisca.crl
    
    # 查看crl文件:
    openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
    

    相关文章

      网友评论

          本文标题:openssl, 建立私有CA

          本文链接:https://www.haomeiwen.com/subject/ijociqtx.html