浅谈CA与证书以及Openssl管理证书


CA和证书

一、PKI(Public Key Infrastructure) 公钥基础设施

  • 定义:支持公开密钥管理并能支持认证、加密、完整性和可追究性服务的基础设施
  • 主要组成部分:
    签证机构:CA (Certificate Authority)
    注册机构:RA (Registration Authority)
    证书吊销列表:CRL (Certificate Revocation List)
    证书存取库
  • X.509:定义了证书的结构以及认证协议标准
    内容:版本号、序列号、签名算法、颁发者、有效期限、主体名称、主体公钥、CRL分发点、扩展信息、发行者签名

二、证书获取的方法:

  • 证书授权机构签发的证书:由CA签发申请者的公钥
    第1步:生成签名请求(csr)
    第2步:将csr发送给CA
    第3步:从CA处接受签名
  • 自签名的证书:自己签发自己的公钥

安全协议(SSL/TLS)

一、协议历史、功能

  • 发展历程:
    • SSL(Secure Socket Layer):安全套接字,由Netscape公司于1995年发布SSL 2.0
    • TLS(Transport Layer Security) 安全传输层协议1.1:
    • TLS 1.1:IETF(Internet工程任务组) 于2006年将其定义为国际标准RFC 4346
    • TLS 1.2:当前使用最广泛的标准,2008年发布
    • TLS 1.3:最新标准,2015年发布
  • 提供功能:机密性、认证、完整性、重放保护
  • 位于TCP/IP模型传输层之上,应用层之下

二、协议工作原理

  • SSL/TLS协议是两阶段协议,分为握手阶段和应用阶段
    • 握手阶段(协商阶段)客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。
    • 应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
  • 相关协议:
    • 握手阶段:Handshake, ChangeCipherSpec, Alert协议
    • 应用阶段:Record协议
  • HTTPS协议:就是“HTTP” 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输

OpenSSL

  • 开源项目:可以实现对称加密、公钥加密、秘钥管理等丰富功能
    • 三个组件:
    • openssl:多用途的命令行工具,包openssl
    • libcrypto:加密算法库,包openssl-libs
    • libssl:加密模块应用库,实现了ssl及tls,包nss
  • 对称加密:
    • 工具: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
#加密
[root@Centos7 data]# openssl enc -e -des3 -a -salt -in fstab -out fstab.cipher
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@Centos7 data]# ls
fstab  fstab.cipher
#解密
[root@Centos7 data]# openssl enc -d -des3 -a -salt -in fstab.cipher -out fstab.b
enter des-ede3-cbc decryption password:
[root@Centos7 data]# cat fstab.
fstab.b       fstab.cipher  
[root@Centos7 data]# cat fstab.b
#
# /etc/fstab
# Created by anaconda on Tue Nov  5 16:56:33 2019
  • 单向加密:
    工具:md5sum, sha1sum, sha224sum,sha256sum…
    openssl dgst
  • dgst命令:
    帮助:man dgst
  • 语法:
    openssl dgst -md5 [-hex默认] /PATH/SOMEFILE //-hex 默认设置为16进制显示
    openssl dgst -md5 testfile
    md5sum /PATH/TO/SOMEFILE
[root@Centos7 data]# openssl dgst -md5 fstab
MD5(fstab)= dec527a553b1dbd9c9518d966a81e30e
  • 生成密码:openssl sslpasswd工具实现
    帮助:man sslpasswd
    语法:
    openssl passwd -1 -salt SALT(最多8位) //-1指MD5加密
    openssl passwd -1 –salt centos
    在这里插入图片描述
  • 生成随机数:
    帮助:man sslrand
    语法:openssl rand -base64|-hex NUM
    NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,
    出现的字符数为NUM*2
[root@Centos7 data]# openssl rand -base64 10
rtuQQOqy5VwHtA==
[root@Centos7 data]# openssl rand -hex 10
5748b46e3bdf5419dbaa
  • 公钥加密:openssl genrsa工具实现
  • 帮助:man genrsa
//生成私钥
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
// 私钥需要谨慎保管,权限应设置为600
// 执行umask 066,为避免umask设置影响今后操作,将umask和后续生成私钥命令用小括号括起
// 例如以下命令(-des: 私钥添加口令)
(umask077; openssl genrsa -out test.key -des 2048) 
//将加密key解密
openssl rsa -in test.key –out test2.key 
//从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE
//例如以下命令
openssl rsa -in test.key -pubout -out test.key.pub
[root@Centos7 data]# (umask 066; openssl genrsa -out fstab -des 2048)
Generating RSA private key, 2048 bit long modulus
............................................................................................+++
...+++
e is 65537 (0x10001)
Enter pass phrase for fstab:
[root@Centos7 data]# openssl rsa -in fstab -out fstab.b
Enter pass phrase for fstab:
writing RSA key

OpenSSL实现创建CA并申请、管理证书

  • 配置文件
    • openssl的配置文件:/etc/pki/tls/openssl.cnf
      配置文件关键信息:
dir             = /etc/pki/CA          //存储目录
certs           = $dir/certs           //颁发的证书存储路径
crl_dir         = $dir/crl             //证书吊销列表存储路径
database        = $dir/index.txt       //数据库文件存储路径

new_certs_dir   = $dir/newcerts        //新证书存放路径,与证书存储路径中的内容相同,但名称不同

certificate     = $dir/cacert.pem      //CA自签发或由上级签发的证书路径,名称必须为"cacert.pem"
serial          = $dir/serial          //下一个签发证书的序号,一般从16位数字00开始
crlnumber       = $dir/crlnumber       //下一个证书吊销列表的序号,一般从16位数字00开始
                                  
crl             = $dir/crl.pem         //证书吊销列表的存放路径
private_key     = $dir/private/cakey.pem      //私钥的存放路径

countryName             = match        //国家信息必须匹配
stateOrProvinceName     = match        //州或省信息必须匹配
organizationName        = match        //域名信息必须匹配
organizationalUnitName  = optional     //部门名称
commonName              = supplied     //申请证书的主机名称
emailAddress            = optional     //邮箱
  • 申请信息的三种策略:匹配、支持和可选
    • 匹配:申请填写的信息跟CA设置信息必须一致
    • 支持:必须填写这项申请信息
    • 可选:可有可无
  • 第1步,创建私有CA,生成私钥
// 创建所需要的文件
touch /etc/pki/CA/index.txt      //生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial     //指定第一个颁发证书的序列号

// CA生成私钥,注意名称必须为cakey.pem
(umask066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
  • 第2步,生成自签名证书
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步,颁发证书,一般将私钥和CA签发的证书保存在应用的目录中
// 1. 生成证书请求csr
// 生成私钥
(umask066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)
生成证书申请文件
openssl req -new -key /etc/pki/tls/private/test.key -out etc/pki/tls/test.csr

// 2. 将证书请求文件传输给CA

// 3. CA签署证书,并将证书颁发给请求者
openssl ca -in /tmp/test.csr -out /etc/pki/CA/certs/test.crt -days 365
注意:默认国家,省,公司名称三项必须和CA一致

// 4. 查看证书中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
// 查看指定编号的证书状态
openssl ca -status SERIAL
  • 第4步,吊销证书
// 1. 在客户端获取要吊销的证书的serial
openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

// 2. 在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致,吊销证书
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
// 指定第一个吊销证书的编号
注意:第一次更新证书吊销列表前,才需要执行
echo 01 > /etc/pki/CA/crlnumber

// 3. 更新证书吊销列表
openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
// 查看crl文件:
openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
  • 实验: 建立根CA,子CA,并实现根CA签发自身证书、根CA给子CA签发证书、子CA给申请者签发证书,最后吊销子CA签发给申请者的证书,并生成证书吊销列表

  • 环境设置:
    根CA的ip地址:172.20.54.1,命令提示符颜色:黄色
    子CA的ip地址:172.20.54.2,命令提示符颜色:绿色
    申请主机的ip地址:172.20.54.3,命令提示符颜色:蓝色
    密钥、证书申请、签发的证书存储位置,如下图:
    在这里插入图片描述

  • 第1步:建立根CA,根CA签发自身证书(根CA上操作)

    • 建立证书索引库文件index.txt,指定证书序列号
      touch /etc/pki/CA/index.txt
      echo 01 > /etc/pki/CA/serial
      在这里插入图片描述
    • 生成私钥文件cakey.pem,存储在/etc/pki/CA/private目录下
      (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048)
      在这里插入图片描述
    • 自已签发自己的证书cacert.pem,存储在/etc/pki/CA目录下,过程中设置:countryName, stateOrProvinceName, organizationName, organizationalUnitName, commonName, emailAddress等信息,前三项一定要注意,之后签发的证书信息务必要与本次设置的信息相同
      在这里插入图片描述
  • 第2步,建立子CA,子CA向根CA申请证书,根CA签发证书(子CA上操作)

    • 建立证书索引库文件index.txt,指定证书序列号
      touch /etc/pki/CA/index.txt
      echo 01 > /etc/pki/CA/serial
      在这里插入图片描述

    • 生成私钥
      (umak 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048)
      在这里插入图片描述

    • 生成证书申请文件
      openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.csr
      在这里插入图片描述

    • 将证书申请文件传送给根CA,根CA签发证书并将证书传送回子CA,存储至子CA的/etc/pki/CA目录下
      scp /etc/pki/CA/cacert.csr 172.20.54.1:/data 发送证书申请文件至根CA

    • 根CA签发证书 (此命令在根CA上操作)
      openssl ca -in /tmp/cacert.csr -out /etc/pki/CA/certs/cacert.pem -days 3650
      在这里插入图片描述

    • 查看签发的证书内容,可以看到证书序列号按照/etc/pki/CA/serial文件中的01编号,根CA和子CA的关键信息相同 (此命令在根CA上操作)
      在这里插入图片描述

    • 使用openssl x509 -in /etc/pki/CA/certs/cacert.pem -noout -text|issuer|suject|serial|dates命令查看证书信息,红框中可以看到时间期限确实为签发证书指定的约10年(-days 3650) (此命令在根CA上操作)
      在这里插入图片描述

    • 使用openssl ca -status 01命令,查看指定编号的证书状态 (此命令在根CA上操作)
      在这里插入图片描述

    • 发送签发的证书至子CA (此命令在根CA上操作)
      scp /etc/pki/CA/certs/cacert.pem 172.20.54.2:/etc/pki/CA/

  • 第3步,申请主机向子CA发起证书签发申请,子CA签发证书(申请主机上操作)

    • 生成密钥
      (umask 066; openssl genrsa -out /etc/pki/tls/private/hello.key -des3 2048)
      在这里插入图片描述
    • 生成证书申请文件
      openssl req -new -key /etc/pki/tls/private/hello.key -out /etc/pki/tls/hello.csr
      在这里插入图片描述
    • 将证书申请文件传送给子CA,子CA签发证书并将证书传送回申请主机,存储至申请主机的/etc/pki/tls目录下
      scp /etc/pki/tls/hello.csr 172.20.54.2:/data 发送证书申请文件至子CA
    • openssl ca -in /tmp/hello.csr -out /etc/pki/CA/certs/hello.crt -days 730
      子CA签发证书 (此命令在子CA上操作)
      在这里插入图片描述
    • scp /etc/pki/CA/certs/hello.crt 172.20.54.3:/etc/pki/tls/
      发送签发的证书至申请主机 (此命令在子CA上操作)
    • 将根CA证书、子CA证书、申请主机证书都传至windows,可以在证书页面看到清晰的证书继承关系
      在这里插入图片描述
  • 第4步,吊销子CA给申请主机的证书,创建证书吊销列表(子CA上操作)

    • 环境设置:在子CA上再签发两个证书
      修改/etc/pki/CA/index.txt.attr文件,内容改为"unique_subject = no",这样可以为相同证书申请签发多次证书
      openssl ca -in /tmp/hello.csr -out /etc/pki/CA/certs/hello1.crt -days 300
      openssl ca -in /tmp/hello.csr -out /etc/pki/CA/certs/hello2.crt -days 500

    • 查看想要吊销证书的序列号,查看目前所有证书的状态,V表示可用状态
      openssl x509 -in /etc/pki/CA/certs/hello1.crt -noout -serial -subject
      openssl x509 -in /etc/pki/CA/certs/hello2.crt -noout -serial -subject
      cat /etc/pki/CA/index.txt
      在这里插入图片描述

    • 吊销序列号为02和03的两个证书:
      openssl ca -revoke /etc/pki/CA/newcerts/02.pem
      openssl ca -revoke /etc/pki/CA/newcerts/03.pem
      cat /etc/pki/CA/index.txt查看索引数据库,发现被吊销的证书状态为R
      在这里插入图片描述

    • 生成证书吊销列表
      echo 01 > /etc/pki/CA/crlnumber 指定首个证书吊销列表的序列号
      openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem 生成证书吊销列表
      在这里插入图片描述

    • 查看证书吊销列表内容
      openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text
      在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值