安全和加密CA证书

一、介绍

1、为什么要加密

※ 不加密流量的易受攻击性
        ●  密码/数据嗅探
        ●  数据操作
        ●  验证操作
        ●  相当于邮寄明信片
※ 不安全的传统协议 --明文
        ●  telnet、FTP、POP3等等;不安全密码
        ●  http.smtp、NFS等等;不安全信息
        ●  Ldap、NIS,rsh等等;不案舍验证


2、安全机制

※ NIST(美国国家标准与技术研究院)定义的安全属性:
       ➢保密性:
          ●  数据保密性
          ●  隐私性
       ➢完整性:不可篡改
          ●  数据完整性
          ●  系统完整性
       ➢可用性
※ 安全攻击:STRIDE
        Spoofing (假冒(假冒一个主机))、Tampering (篡改,数据篡改)、Repudiation (否认(干了的事情不承认))、Inforration Disclosure (信息泄漏)、Denial of Service (拒绝服务(ping -f形式一样大量数据包,占用大量的带宽、cpu资源等))和Elevation of Privilege (提升权限(把普通用户的权限提升到管理员))

解释:什么是ping -f 
在数据包中发送“不要分段”标志。
在一般你所发送的数zhi据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理。
可以理解为 -f 极限检测,快速连续ping一台主机,ping的速度达到100次每秒;

3、安全

※ 安全机制:
       ➢加密(明文加密)、数字签名(如信用卡交易签名,计算机里说明是你操作的)、访问控制(acl 控制权限,限制哪些写用户的访问)、数据完整性(数据不要被篡改)、认证交换(互相双方认证)、流量填充(流量故意填充随机数,保证安全数据隐藏在里面)、路由控制(互联网通过为了安全稳定,进行多条链路冗余)、公证(结婚公证)
※ 心安全服务:
       ➢认证
       ➢访问控制
       ➢数据保密性
           ●  连接保密性      TCP/UDP
           ●  无连接保密性
           ●  选择域保密性    挑选域
           ●  流量保密性       有些企业的流量也很重要
       ➢数据完整性
       ➢不可否认性

4、设计基本原则

    ※ 使用成熟的安全系统
    ※ 以小人之心度输入数据
    ※ 外部系统是不安全的
    ※ 最小授权    企业内部授权,最小的权限
    ※ 减少外部接口
    ※ 缺省使用安全模式   selinux 默认启用
    ※ 安全不是似是而非   
    ※ 从STRIDE思考    STRIDE:身份假冒、篡改、抵赖、信息泄露、拒绝服务、特权提升
    ※ 在入口处检查
    ※ 从管理上保护好你的系统
    ※ 防水墙    企业内部设置,可以监控企业内部的IT行为 如是否插入U盘,拷贝文件

 

二、 安全和加密:

1、安全算法

    ※ 常用安全技术  
         ➢认证
         ➢授权
         ➢安全通信
         ➢审计
    ※ 密码算法和协议:
         ➢对称加密
         ➢公钥加密
         ➢单向加密
         ➢认证协议
    ※Linux系统: OpenSSL,gpg (pgp协议的实现)

2、对称加密: 

    ※ 加密和解密使用同一个密钥,如:
         ➢DES: Data Ercryption Standard,56bits    数据加密标准  
         ➢3DES:    3倍强度
         ➢AES: Advanced (128,192,256bits)       高级加密算法,加密长度可以选择
         ➢Blowfish,Twofish                                     商业
         ➢IDEA,RC6,CAST5                                 
    ※ 例子:A 发送数据data→使用key加密→加密的data→使用key解密→B接受数据data
                  其中key是相同的key称之为对称加密
    ※ 特性:
       1、加密、解密使用同一个密钥,效率高
       2、将原始数据分割成面定大不的块,逐个进行加密
    ※ 缺陷:
        1、密钥过多   A跟B用一把,A跟C有的换一把
        2、密钥分发   密钥怎么传给对方
        3、数据来源无法确认   B解密后的数据无法确认到底是不是A传过来的

3、非对称加密算法:

加密key 跟 解密key 不相等
    ※ 公钥加密:密钥是成对出现
         ➢公钥:公开给所有人; public key
         ➢私钥:自己留存,必须保证其私密性; secret key
    ※ 特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
    ※ 功能:
         ➢数字签名:主要在于让接收方确认发送方身份
         ➢对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
         ➢数据加密:适合加密较小数据育
    ※ 缺点:密钥长,效率低
    ※ 算法:
         ➢RSA(加密,数字签名),DSA(数字签名),ELGamal

原理:通信的双方都各自有一对钥匙,也就是有4把钥匙
A :phblic(P(a)) private(S(a))     B:phblic (P(b))     private (S(b))
公钥就是可以随便给,私钥只能留给自己。私钥解对应的公钥,公钥解对应的私钥。私钥不能解私钥,公钥不能解公钥
需求:对称加密不知道是谁给你发送的数据,非对称加密如何实现
A的私钥加密,由于任何机器(B机器)有A的公钥,B机器拿A的公钥解密了,说明是A发送的数据,此过程为数字签名
缺点: 
DES :加密前1G,加密后2G,加密时间4m,解密8m
RSA: 加密前1G,加密后1G,加密时间1m,解密64hour
需求:数据安全,确认数据隐私,也就是来源
Pb {Sa(data)}   两次加密,确保了数据从A发送后,只能在B解密,确保了数据安全,而B能拿A公钥公钥解密,确保来源
缺点: 代价太大。时间效率

-rw-r-----. 1 root ssh_keys   1675 9月   8 10:28 ssh_host_rsa_key     私钥只有root跟特定的组,读取
-rw-r--r--. 1 root root        382 9月   8 10:28 ssh_host_rsa_key.pub    

4、单向散列: 也叫hash算法 

  ※ 将任意数据缩小成固定大小的“指纹”
         ➢任意长度输入
         ➢固定长度输出
         ➢若修改数据,指纹也会改变(“不会产生冲突”)
         ➢无法从指纹中重新生成数据(“单向”)
    ※ 必功能:数据完整性
    ※ 常见算式
         ➢md5: 128bits、 shal; 160bits、sha224
         ➢sha256、sha384、sha512
    ※ 常用工具www.magedu.com
         ➢md5sum | sha1sum [ --check ] file
         ➢openssl、9P9
         ➢rpm -V

常用于:web缓存常用
hash算法工具:md5、Linux(sha1sum 160bit )
理解:当我用hash算法给数据做过处理后,结果叫digset (摘要)
特性:1、任何的数据,不管多大,得出的摘要长度一致。 如md5加密后的数据,都是128bit 字符串,2、数据不同,摘要数值不同  3  hash算法不可逆,得到摘要,推不出原来是什么

[root@hdss7-11 ssh]# sha1sum /dev/sda
90635d6665a1641002e3ee1c42982cb326b720d9  /dev/sda

优化:Pb {Sa(data)}    代价太大。时间效率,配置hash
Pb {data +Sa(hash(data))}    得到的结果:实现只有B才能解密,得到 {data +hash(Sa(data))} ,确保了安全。
然后得到了数据data,通过用Pa 解密得到(hash(data),确保来源,并且B通过hash+data 跟(hash(data)确保数据没有坏
优化:对称+非对称+hash
key{data +Sa(hash (data))} +Pb(key)   得到的结果:实现数据可以传给任何人,在只有B拿到数据,才能解密Pb(key)得到 key ,才能实现对称加密的key{data +Sa(hash (data))} 解密。得到data +Sa(hash (data)),也就得到了数据data,通过用Pa 解密得到hash (data),确保来源,并且B通过hash+data 跟(hash(data)确保数据没有坏
hash算法工具介绍:
[root@hdss7-11 ssh]# sha
sha1sum    sha224sum  sha256sum  sha384sum  sha512sum  
[root@hdss7-11 ~]# vi f1
1111
[root@hdss7-11 ~]# sha512sum f1 
5d685b8ed7ea3abe9903d630c8448e5823cb80f923c9c56f60faa49a14e9159027a4af2f38d9556dfca82f5271098fe463bf9e31b30cf6c9eb6879f139e3db06  f1
[root@hdss7-11 ~]# sha512sum f1 >f1.sha512
[root@hdss7-11 ~]# vi f1
1111222
[root@hdss7-11 ~]# sha512sum --check f1.sha512 
f1: 失败
sha512sum: 警告:1 个校验和不匹配
[root@hdss7-11 ~]# sha512sum host.com.zone >> f1.sha512 
[root@hdss7-11 ~]# sha512sum od.com.zone >> f1.sha512 
[root@hdss7-11 ~]# sha512sum --check f1.sha512 
f1: 失败
host.com.zone: 确定
od.com.zone: 确定
sha512sum: 警告:1 个校验和不匹配

检查某个包里面的文件是否发生变化,在rpm 安装后,系统自动把这种文件的各种属性,权限等 hash,存储数据库中,rpm -V 会查到

5、密钥交换: IKE ( Internet Key Exchange )

主要解决对称加密key如何实现传递,对称秘钥进场更换
    ※密钥交换
         ➢公钥加密:
            DH (Deffie-Hellman):生成会话密钥,参看:https://en. wikipedia. org/wiki/Diffie%E2%80%93HelIman_ key_ exchange
    ※DH:
         ➢1、A: a,p协商生成公开的整数a,大素数p
                   B: a,p
         ➢2、A:生成隐私数据: x(x                   B:生成隐私数据:y 计算得出a ^y%p,发送给A
         ➢3、A:计算得出[(a^ y%p)^x] %p = a^ xy%p,生成为密钥
                  B:计算得出[(a^ x%p)^y] %p = a ^xy%p,生成为密钥

  原理:A机器随机生成a(整数),p(素数:只能被自己或者1 整除)。发送给B机器,然后
        A:随机生成一个隐私数据x,计算 a^x%p,发送给B
        B:随机生成一个隐私数据y,计算得出a ^y%p,发送给A
        A:计算得出[(a^ y%p)^x] %p = a^ xy%p,生成为密钥
        B:计算得出[(a^ x%p)^y] %p = a ^xy%p,生成为密钥
           发现数值相同
  a=2, p=11 ,x=3      A:a^x%p =8
  a=2, p=11 ,y=4     B:a ^y%p=5
  A:  5   [(a^ y%p)^x] %p = a^ xy%p
  B:  8   [(a^ x%p)^y] %p = a ^xy%p

5.1对称工具:

[root@hdss7-11 ~]# gpg -c f1   对文件加密
[root@hdss7-11 ~]# ll
-rw-r--r--  1 root root   13 9月  25 19:08 f1
-rw-r--r--  1 root root   54 9月  25 19:36 f1.gpg
[root@hdss7-11 ~]# cat f1.gpg 
°v؉%{ +I²¢G
             Ϗ¥邨oˑQH8¶(M

[root@hdss7-11 ~]# gpg -o f11 -d f1.gpg   解密
[root@hdss7-11 ~]# ll
-rw-r--r--  1 root root   13 9月  25 19:37 f11
-rw-r--r--  1 root root   54 9月  25 19:36 f1.gpg

5.2使用gpg工具实现公钥加密:

    ※在hostB主机上用公钥加密,在hostA主机.上解密
    ※在hostA主机上生成公钥/私钥对
         ➢gpg --gen-key
    ※在hostA主机上查看公钥
         ➢gpg --list-keys
    ※在hostA主机上导出公钥wang. pubkey
         ➢gpg -a --export -0 wang. pubkey       a不可读
    ※从hostA主机上复制公钥文件到需加密的B主机上
         ➢scp wang.pubkey~ hostB;
[root@hdss7-11 .gnupg]# gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: 已创建目录‘/root/.gnupg’
gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/root/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/root/.gnupg/pubring.gpg’已建立
请选择您要使用的密钥种类:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择? 1
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)1024
您所要求的密钥尺寸是 1024 位
请设定这把密钥的有效期限。
         0 = 密钥永不过期
       = 密钥在 n 天后过期
      w = 密钥在 n 周后过期
      m = 密钥在 n 月后过期
      y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
以上正确吗?(y/n)y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) "

真实姓名:Jerr
姓名至少要有五个字符长
真实姓名:jerry
电子邮件地址:
注释:
您选定了这个用户标识:
    “jerry”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O
您需要一个密码来保护您的私钥。

安全和加密CA证书_第1张图片

我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。

[root@hdss7-11 .gnupg]# cd /root/.gnupg/
[root@hdss7-11 .gnupg]# ll
-rw------- 1 root root 7680 9月  25 20:07 gpg.conf
drwx------ 2 root root    6 9月  25 20:09 private-keys-v1.d
-rw------- 1 root root  661 9月  25 20:23 pubring.gpg    公钥
-rw------- 1 root root  661 9月  25 20:23 pubring.gpg~
-rw------- 1 root root  600 9月  25 20:23 random_seed
-rw------- 1 root root 1325 9月  25 20:23 secring.gpg    私钥
srwxr-xr-x 1 root root    0 9月  25 20:23 S.gpg-agent
-rw------- 1 root root 1280 9月  25 20:23 trustdb.gpg
 

[root@hdss7-11 .gnupg]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   1024R/2C31F4D2 2020-09-25 [有效至:2020-09-28]
uid                  jerry
sub   1024R/A1B32077 2020-09-25 [有效至:2020-09-28]

[root@hdss7-11 .gnupg]# gpg -a --export -o wang.pubkey
[root@hdss7-11 .gnupg]# ll
-rw------- 1 root root 7680 9月  25 20:07 gpg.conf
drwx------ 2 root root    6 9月  25 20:09 private-keys-v1.d
-rw------- 1 root root  661 9月  25 20:23 pubring.gpg
-rw------- 1 root root  661 9月  25 20:23 pubring.gpg~
-rw------- 1 root root  600 9月  25 20:23 random_seed
-rw------- 1 root root 1325 9月  25 20:23 secring.gpg
srwxr-xr-x 1 root root    0 9月  25 20:23 S.gpg-agent
-rw------- 1 root root 1280 9月  25 20:23 trustdb.gpg
-rw-r--r-- 1 root root 1000 9月  25 20:27 wang.pubkey
[root@hdss7-11 .gnupg]# cat wang.pubkey 
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

mI0EX23hJwEEAOzxCR2keHy3Rgofi5TD6CgMX5hzdQJbA0CBtSq0R57gSzga6g3C
qenbJW/nAUJID78sV+L5jUieyZsfzkavIm8xV1xWk0bM9Trb2SNkDI9x90gDKkIx
pGTDFeK6ZQYRCU12FG5rIv4Lvt1rlqQMbPvNbkbi7lAQQPxUMck1r5gDABEBAAG0
BWplcnJ5iL8EEwECACkFAl9t4ScCGwMFCQAD9IAHCwkIBwMCAQYVCAIJCgsEFgID
AQIeAQIXgAAKCRBIJyyuLDH00tkjBADFPB7T3iCrqpjlNwh6TnulF8bYTYRHCOIF
QumGjc0jMAu7O3/x7nyBNsw4hYo/lonyCIijTZfa5o9KdGNxHd4fCaSwDGxvVLOS
J2Qc9m7Rqp/LbltxP7PgntYtrjJ9H36NKhyxUzU7P2iaMoyVgcA6CZVB/H6igpqe
j9LtqTPOnriNBF9t4ScBBADsf+fASDLF6EdktTHhZ5jPgrMpI53egGMOv/PshLmY
E6jxyHkaRobZTo386B6s3CZ3peUDH7z7BG1A28Xe/rt/SDgX9SXhkbtwqR9blhMg
yhnJQoVQiW3QhcUchZqtukt3GVXp58ihc6KT9c/8Y+oxPxyzhyce7BreJvalxIXf
4QARAQABiKUEGAECAA8FAl9t4ScCGwwFCQAD9IAACgkQSCcsriwx9NLiwwP/enZk
s4m5jhucoqbL7y8CJkm7Wy7XzDOSYmW4SpyiF6mVE3YT+umoccyXNlIFnkVsump+
9+xzTtUmHbppjbByZWdAmHfCNxh1AY/Ay5NmhGU4h1I2nb3TmWylLqUPovWiApfq
TKM2dAN0zUkFPBxS2Msa/KXRY0QeGhui96hw2wE=
=XFuK
-----END PGP PUBLIC KEY BLOCK-----

5.3使用gpg工具实现公钥加密:

※在需加密数据的hostB主机上生成公钥/私钥对
         ➢gpg --list-keys
         ➢gpg --gen-key
    ※在hostB主机上导入公钥
         ➢gpg --import wang. pubkey
         ➢gpg --list-keys
    ※用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg
         ➢gpg -e -r wang file
            file file.gpg

在B机器:
导入这个公钥 gpg --import wang. pubkey
用从hostA主机导入的公钥wang.pub,加密hostB主机的文件file,生成file.gpg
gpg -e -r wang file

5.4使用gpg工具实现公钥加密:

    ※复制加密文件到hostA主机
         ➢scp fstab .gpg hostA:
    ※在hostA主机解密文件
         ➢gpg -d file.gpg
         ➢gpg -ofile -d file.gpg
    ※删除公钥和私钥
         ➢gpg --delete-keys wangxiaochun
         ➢gpg --delete-secret-keys wangxiaochun
删除gpg --list-keys公钥钥匙:gpg --list-keys: gpg --delete-keys laowang
删除私钥:gpg --delete-secret-keys 文件

 

三、CA和证书:

1、CA和证书介绍:

    ※ PKI: Public Key Infrastructure    
         ➢签证机构: CA (Certificate Authority)
         ➢注册机构: RA
         ➢证书吊销列表: CRL
         ➢证书存取库:
    ※ X.509:定义了证书的结构以及认证协议标准
         ➢版本号          主体公钥
         ➢序列号          CRL分发点
         ➢签名算法      扩展信息
         ➢颁发者          发行者签名
         ➢有效期限.
         ➢主体名称

问题:用对称跟非对称的加密的机密方式:key{data +Sa(hash (data))} +Pb(key),可以实现安全认证加密,但是秘钥传输没有保障,如下,黑客C模拟B告诉A,我的Pc.pub就是Pb.pub,这时候,A(data)通过Pc.pub加密后,B接受后解密不了,但是C可以

安全和加密CA证书_第2张图片

如何确保A跟B公钥互换是否是正确的:制作身份证,CA(证书颁发机构)

A向CA申请证书,提交A的信息+A的公钥。CA也有自己公钥跟私有,CA拿到后检查确认此信息不是伪造的,CA就会拿自己的私钥给A的公钥加密(签名)(加密后,里面会带有CA自己的信息,确认那个CA颁发,还有加密算法,有效期,A 的描述信息,版本)这就是证书,这个证书不可伪造,芯片检查等,然后这个证书会返回给A,A拿到证书后,把证书穿给给B,B拿到证书后,由于B信任CA,也就是B拿到了CA公钥,进而获取Pa.pub 。对应的反向A获取B的pub。这一过程由CA来保证各自发给我的公钥是真实可靠的。

安全和加密CA证书_第3张图片

问题:A 如何拿到Pca 公钥,B如何拿到Pca 公钥

两种情况:1、A跟B装系统,天生系统就自带公钥,win跟ca有合作。而且A跟B都有相同CA的公钥

                  2、如果没有相同CA的公钥,比如A的是上海颁发CA,B是杭州的CA。假如两个地市平级,这个时候,A对应的子CA就会去请求ROOT根(ca),这个时候,根CA去签(子CA公钥+Rca+有效期)  。对应的反向B获取根(ca)。并且win内置跟多的根证书

安全和加密CA证书_第4张图片

2、创建CA和证书管理

    ※ 查看证书中的信息:
         ➢openssI x509 -in /PATH/FROM/CERT_ FILE -noout
            -text | issuer | subject | serial | dates
            openssl ca -status SERIAL查看指定编号的证 书状态
    ※ 吊销证书
         ➢A  在客户端获取要吊销的证书的serial
            openssI x509 -in /PATH/FROM/CERT_ FILE -noout
            -serial -subject 
         ➢B  在CA上,根据客户提交的serial与subject信息, 对比检验是否与index. txt文件中的信息一致,吊销证书:
            openssI ca -revoke /etc/pki/CA/newcerts/SERIAL. pem

查看证书中的信息:

1、

安全和加密CA证书_第5张图片

2、

安全和加密CA证书_第6张图片

 

3、

安全和加密CA证书_第7张图片

4、

[root@hdss7-22 ~]# openssl x509 -in baidu.cer -noout -text

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            72:58:78:36:6e:9f:56:e8:1d:41:88:48  (证书编号)
    Signature Algorithm: sha256WithRSAEncryption (算法)
        Issuer: C=BE, O(发布者)=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2
        Validity
            Not Before: Apr  2 07:04:58 2020 GMT
            Not After : Jul 26 05:31:02 2021 GMT
        Subject(颁发给谁): C=CN, ST=beijing, L=beijing, OU=service operation department, O=Beijing Baidu Netcom Science Technology Co., Ltd, CN=baidu.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption

问题:没有有效票的根证书,证书是自己搭建的。导出证书在导入
安全和加密CA证书_第8张图片

 

泛域名证书:如*jd.com 

3、证书获取

    ※ 证书类型:
         ➢证书授权机构的证书
         ➢服务器
         ➢用户证书
    ※ 获取证书两种方法: 
         ➢使用证书授权机构
               ● 生成签名请求(csr)
               ● 将csr发送给CAs
               ● 从CA处接收签名
         ➢自签名的证书   一台机器
               ●自已签发自己的公钥

自己搭建证书:本机生成一个证书申请csr ,然后传递给ca, 考到ca 机器上,ca就会对其私钥签名,然后在拷回去

4、安全协议

    ※ 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 IETF(Internet工程任务组) RFC 4346
               ● 2008: TLS 1.2当前使用      目前的使用不是ssl。而是tls.
               ● 2015: TLS 1.3 
         ➢功能:机密性,认证,完整性,重放保护(重放:一个数据包理论发一次生命期就结束了。如果黑客讲发送名户名密码信息截获,冒充这台机器,原封不动再次发一下,服务器校验后正确,又可以登录):解决:时间戳
    ※ 两阶段协议,分为握手阶段和应用阶度
         ➢握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。
         ➢应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
 应用层数据为数据加报头→tls数据加密→传输层封装tcp /udp报头→封装ip报头→封装以太层针头

安全和加密CA证书_第9张图片


SSL/TLS  

    ※ Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
    ※ ChangeCipherSpec协议:一条 消息表明握手协议已经完成
    ※ 必Alert协议:对握手协议中- -些异常的错误提醒,分为fatal(断开网络)和warning(报警继续连接)两个级别,fatal类型              错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
    ※ Record协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
    ※ HTTPS协议:就是“HTTP协议”和“SSL/TLS协议”的组合。HTTP over SSL"或“HTTP over TLS",对http协议的文本数据进行加          密处理后,成为二进制形式传输

HTTP协议”和“SSL/TLS协议”的组合:
应用层数据为数据加报头→tls数据加密→传输层封装tcp /udp报头→封装ip报头→封装以太层针头
Ethernet(ip(tcp(tls(http(data)))))    
通讯图:

\安全和加密CA证书_第10张图片

安全和加密CA证书_第11张图片

加密过的应用程序数据,传输层上面封装一个ssl层,应用层数据被封装在里面

安全和加密CA证书_第12张图片

http 未加密协议,明文

安全和加密CA证书_第13张图片

5、OpenSSL

    ※ OpenSSL:开源项目
         ➢三个组件:
               ● openssl:多用途的命令行工具,包openssI
               ● libcrypto:加密算法库,包openssl-libs
               ● libssl:加密模块应用库,实现了ssI及tls,包nss ;
    ※ openssI命令: .
         ➢两种运行模式:交互模式和批处理模式
         ➢openssl version:程序版本号
         ➢标准命令、消息摘要命令、加密命令
         ➢标准命令:
               ● enc, Ca, req, ...

openssI:工具

[root@localhost ~]# rpm -qi openssl
Name        : openssl
Epoch       : 1
Version     : 1.0.2k
Release     : 16.el7
Summary     : Utilities from the general purpose cryptography library with TLS implementation
Description :
The OpenSSL toolkit provides support for secure communications between
machines. OpenSSL includes a certificate management tool and shared
libraries which provide various cryptographic algorithms and
protocols.
OpenSSL工具包支持机器。OpenSSL包括一个证书管理工具和共享的提供各种密码算法和协议
[root@localhost ~]# rpm -ql openssl
/usr/bin/openssl

libcrypto:加密算法库,包openssI- libs:
提供的加密算法,来自openssl-libs
[root@localhost ~]# rpm -ql openssl-libs
/etc/pki/tls
/etc/pki/tls/certs
/etc/pki/tls/private
/usr/lib64/.libcrypto.so.1.0.2k.hmac

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

怎么实现加密算法的应用库、模块

5.1、openssl使用:

交互式:
[root@localhost ~]# openssl \

非交互式:
[root@hdss7-22 ~]# openssl x509 -in baidu.cer -noout -text

帮助:
[root@localhost ~]# openssl ?

openssl:Error: '?' is an invalid command.

Standard commands 
asn1parse         ca  证书           ciphers           cms               
crl 证书表达列表    crl2pkcs7         dgst              dh                
dhparam           dsa               dsaparam          ec                
ecparam           enc               engine            errstr            
gendh             gendsa            genpkey           genrsa            
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              req               
rsa               rsautl            s_client          s_server          
s_time            sess_id           smime             speed             
spkac             ts                verify            version           
x509              

Message Digest commands (see the `dgst' command for more details)  hash
md2               md4               md5               rmd160            
sha               sha1              

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       base64            bf                
bf-cbc            bf-cfb            bf-ecb            bf-ofb            
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc          
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb         
des               des-cbc           des-cfb           des-ecb           
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb       
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb      
des-ofb           des3              desx              idea              
idea-cbc          idea-cfb          idea-ecb          idea-ofb          
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc           
rc2-cfb           rc2-ecb           rc2-ofb           rc4               
rc4-40            rc5               rc5-cbc           rc5-cfb           
rc5-ecb           rc5-ofb           seed              seed-cbc          
seed-cfb          seed-ecb          seed-ofb          zlib              

[root@localhost ~]# 

[root@localhost ~]# man openssl 
[root@localhost ~]# man dgst
[root@localhost ~]# man enc
 

5.2、openssl命令

    ※ 对称加密:
         ➢工具: openssI enc, gpg
         ➢算法: 3des, aes, blowfish, twofish
    ※ enc命令:
         ➢帮助:man enc
         ➢加密:
             openssI enc -e -des3 -a -salt -in testfile  -out testfiler.ciipher
             enc代表加密方式,-e代表加密    -a 不可读    -salt  自动插入一个随机数作为文件内容加密,默认选项 
         ➢解密:
            openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile
            openssl ?
加密:   openssl enc -e -des3 -a -salt -in a.txt -out a.enc

[root@localhost ~]# cat a.txt 
4ec2ebd38264
[root@localhost ~]# openssl enc -e -des3 -a -salt -in a.txt -out a.enc
enter des-ede3-cbc encryption password:            加密的输入口令
Verifying - enter des-ede3-cbc encryption password:
[root@localhost ~]# cat a.enc 
U2FsdGVkX19bV05HPME09dc51Pzs+5VPuXYpm+ba+22ICtaBi3Kd10MBXMAGrNHE
DLHl/QTC70BjvzAD/Ec3fMhd4PxW4UqhE6G9RV3dSuRxPn3dWejGJy2QNcvRdoq0
0+4WHxWBelBZkqUXRlVaYqm7/DfChE09e78oF1ocFIKfOA4ZTVA2zg==
[root@localhost ~]# ll
-rw-r--r--  1 root root      187 9月  29 20:29 a.enc
-rw-r--r--  1 root root      114 8月  23 20:06 a.txt
解密:openssl enc -d -des3 -a -salt -in a.enc -out a.txt1

[root@localhost ~]# openssl enc -d -des3 -a -salt -in a.enc -out a.txt1
enter des-ede3-cbc decryption password:          输入口令
[root@localhost ~]# ll
-rw-r--r--  1 root root      187 9月  29 20:29 a.enc
-rw-r--r--  1 root root      114 8月  23 20:06 a.txt
-rw-r--r--  1 root root      114 9月  29 20:33 a.txt1
[root@localhost ~]# cat a.txt1 
4ec2ebd38264

5.2、openssl命令

    ※ 单向加密:
         ➢工具: md5sum, sha1 sum, sha224sum, sha256sum...   openssI dgst
    ※ dgst命令:
         ➢帮助: man dgst
         ➢openssI dgst -md5 [-hex默认] /PATH/SOMEFILE
         ➢openssI dgst -md5 testfile
         ➢md5sum /PATH/TGHSOMEFILE
    ※ MAC: Message. Authenttication Code, 单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制
         ➢CBC-MAC
         ➢HMAC 使用md5或sha1算法

单向、dgst加密:

[root@localhost ~]# man dgst
dgst, sha, sha1, mdc2, ripemd160, sha224, sha256, sha384, sha512, md2, md4, md5, dss1 - 
[root@localhost ~]# openssl dgst -md5 b.txt 
MD5(b.txt)= 311a9f57b81679a421ab972c562d5d50
[root@localhost ~]# md5sum b.txt 
311a9f57b81679a421ab972c562d5d50  b.txt

5.2、openssl命令

    ※ 生成用户密码:
         ➢passwd命令:
         ➢帮助: man sslpasswd
         ➢openssI 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@localhost ~]# openssl passwd -1 
Password: 
Verifying - Password: 
$1$r9/JP8Mj$Yt3yPCgUxvrRnG3SLctUO1
[root@localhost ~]# openssl passwd -1 
Password: 
Verifying - Password: 
$1$UXZ4weIz$4SG/tYr8RZVtB8UtE5o/m1
[root@localhost ~]# openssl passwd -1 -salt UXZ4weIz
Password: 
$1$UXZ4weIz$4SG/tYr8RZVtB8UtE5o/m1

生成随机数:

[root@ ~]# openssl rand -base64 10
sFO4Eoi6raNu1A==
[root@ ~]# openssl rand -base64 10
vtMMqaksdnEdag==
[root@ ~]# openssl rand -base64 10
9PmEbaa5UOLlkw==
[root@ ~]# openssl rand -hex 2    一个16进制占4位,2个就是8位,一个8位就是一个字节  2是字节  (2个16进制等于一个字节)
1e41
[root@~]# openssl rand -hex 3
228f49

5.2、openssl命令    重要

    ※ 生成密钥对儿: man genrsa
    ※ 生成私钥
          ➢openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
              (umask 077; openssI genrsa -out test.key -des 2048)
          genrsa :gen 代表生成,rsa算发    -out:指定私钥文件   -des 算法    位数
    ※ 从私钥中提取出公钥
          ➢openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE
             OpenssI rsa -in test .key -pubout -out test .key. pub
    ※ 随机数生成器:伪随机数字.
          ➢键盘和鼠标
          ➢块设备中断
          ➢/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
          ➢/dev/urandom:从熵池返回随机数;随机数用尽,会利
     用软件生成伪随机数,非阻塞

※ 生成私钥:

[root@localhost ceshi]# openssl genrsa -out wang.key    私钥未加密(未用算法,默认是1024位)
Generating RSA private key, 1024 bit long modulus
..........+++
......................................+++
e is 65537 (0x10001)
[root@localhost ceshi]# ll
-rw-r--r-- 1 root root 1675 9月  29 21:08 wang.key    权限是都可以读
[root@localhost ceshi]# cat wang.key 
-----BEGIN RSA PRIVATE KEY-----
QIZEwY0dwuX+s7MsuTBaoFO32NJcznQ2I6saCuQ1TCcHpDSsHr9mcwaa6QycNH57
5Ajecb/cGCPzTJZi/4Me+vgLpAxRzp3DjB8dKqL7ya11jCB/4mV5u7tg54Di/IMl
-----END RSA PRIVATE KEY-----

[root@localhost ceshi]# openssl genrsa -out wang2.key -des 2048    私钥des加密,指定2048位数
Generating RSA private key, 2048 bit long modulus
.............................................................+++
.+++
Enter pass phrase for wang2.key:  数据密码口令
Verifying - Enter pass phrase for wang2.key:
[root@localhost ceshi]# cat wang2.key 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED     加密 ,说明想要将用必须要口令
DEK-Info: DES-CBC,6E69E270B484AAA2

cujMj5sbQNd1vs1TaFmYGeuYZmyQwaeXuLAdEb20Di2cy/Gb0iwkpTogmagpPM50
UDDIuPbiEXxa5b45sigd570olTE3e3evIXhC0lqewnlhNzumQEaklWOq1fe+bszC
122RJ7Im1TOf5Z6FcZ3zwO0mZaoRseTrstPwLhXppBlvbG1rHz+w84yxmr6K/PBm
-----END RSA PRIVATE KEY-----

[root@localhost ceshi]# ll
-rw-r--r-- 1 root root 1738 9月  29 21:09 wang2.key        权限是都可以读
-rw-r--r-- 1 root root 1675 9月  29 21:08 wang.key

实现只能root读,数据密码口令指定2048位数
[root@localhost ceshi]# (umask 066;openssl genrsa -out wang4.key -des 2048)
Generating RSA private key, 2048 bit long modulus
........................+++
..................................+++
e is 65537 (0x10001)
Enter pass phrase for wang4.key:
Verifying - Enter pass phrase for wang4.key:
140231341225872:error:0906906F:PEM routines:PEM_ASN1_write_bio:read key:pem_lib.c:385:

[root@hdss7-11 ~]# cat wang4.key 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-CBC,33B0CDADB91DBFFA

Q09iUg8FoRRQ4lTES9KXOLqBtxTT2//n7jPUyYrsbFjwN+cLXRS87+8TRghEu5iw
iOyL7y6xq4Df8x7JJkaPPDvom3HgAl1ae9a+LA7xvG7+IF1+5vmdza+WOJAVEuP8
+GGgJZlnFhyknAMnvYNN3xKygytI3EHCa29dBNuskPEwx3mDumsl0Pnx+vgCTzew
+C2pSXz1lKVgpMsZJDBHTmQS2NFrbm6v69YCuJe/WoQ1DI9+tA9O7lUXbM+8TikF
IK+Z9cdIyVeJW4RtNmnXRwHuBr/CH8KZfUIWAEneFPjNrfMzTHPJYO1tj/otlfvi
m/ls5aAyxPUhfcoa9P/Vp4PJEqzI86eJlWUwQWjDtAzRwZL93+IjafxxH6hJUUUS
hLHN4k0f0v2LdAzcT1UqtHYoQxvs3hNL8e2r5c34D7NDh1A61KzT/PcWIPMiU/0O
c/4iccIGRBb39TyXDXgedFAb55pRFQf6g9XBX44Nma2H7ekc+hBUudAqNwCKvcOI
sS+S9IFw1QH4/eP8gz7S998yHfThUlGaP052qrFyi/78seUJP8yNp+6hgr/257d3
dh2id6Yrw45kyoDdTstp2FV66/7+kpOh5RtenTGM7Wg+CwLMiUgmw/rzPeuc77gM
b++D8DCqOfqC1y1GlB9zMktoErs2pKz/6UnRrtwDARI6a/VmaycPHAPGoPpHQE8u
Qv1SJX7wJetJW+4D8F3XuiyvElSbneY6MPzTqoMdk0/Luv+U2dt6qg6OfCZ8DxHu
FlKEm4fx5PLxVDyUz+YutWejNdXg+Qww3c1/7Y0J1sBQzqXkW0R9oDwuNE/3R35j
o7zbv+Fh+IWOGaX+ulbl8tmkgaTdY6XdmKJ5adaRLzJaALPzFjcK108Kc4vQ7ExP
DtwZtcj85OjU6r2f7lR30qSInRwXBegmgYvMw9gEfvIMB/auXl3xyWf4t5pdiWxD
Gi4moad4A2yvosV5SUPtdE4BrQJByAkIGZWHPl3tUl4Qr3+IlMLKx7b5rgyCId/2
6TymEjgZvzqS+TV99Pygm6ElZTFEHv+WwWw7/tYXpNZBoi+QO3eZB32y/5y+5IAY
7N2n8m+VWh/SONTY0FLnFiuznX+I4V3TTTTAkrTfO7QI6HdRJRYxVoc/Q2rAreTM
dzD0u2QXNF/BTVyVYp/li1scYzlmDmlzq13r1cvmXCf882eFpud4A4oLAudx1EFx
vO4Ojzwe0YEx0bx77ukEqrhN/7h+BiwDrAPK1wtMJ6VUIY/ZNDcer8QtDNBAR0uQ
jwkssdAGbuRvrZrGzA99RAy04O6sYeRimksQq2tC1ChmGUatOpEd1YpaOEmgE5KS
bcW7sckJN7sr5iB6B+HjQukNQYSSJcgXwIHckNnVsnft3dYRMkAIn7ZQ3lo7bfFN
4o5SHixgOm5PtKyGACJc5qWXnkXm+oxJFwEi14NhhB3XuOhKtcNis89xq188Ocgi
AwrQIyszqDqGQHhVKVCdveM1qst5J9x8W7Xn+02yAU51rcGRcKazMdqQttZaAvUR
mRVzM1mFvIna3ur707MzAo+etmQm+vIAbkfdcgbEH/ootLDGugSqHg==
-----END RSA PRIVATE KEY-----

解释:umask命令用得相对不多, 而umask函数则用得相对较多。 umask命令, 它主要用来设置权限屏蔽, 说白了, 就是间接地设置权限。他说是一个全局设置,在当前shell生效

打开一个linux shell终端:
[root@localhost ~]# umask
0022
[root@localhost ~]# touch umask.txt
[root@localhost ~]# mkdir umask
[root@localhost ~]# ll
drwxr-xr-x  2 root root        6 10月  8 09:01 umask
-rw-r--r--  1 root root        0 10月  8 09:00 umask.txt

在系统中, 输入umask提示此系统umask的默认值是022。 022是个什么意思呢? 意思是说, 
1、如果创建文件, 那么它的默认权限是644 ( 由于是文件,正常情况下只有 r 跟w ,没有x权限,所以默认最高权限rw- 42- 也就是6。umask=022 所以,6-0 6-2 6-2 ,644)
2、 如果是创建目录, 那么它的权限是755 ( 由于是目录,有 r 跟w 跟x权限,所以默认最高权限777。umask=022 所以,7-0 7-2 7-2 ,755)
3、修改umask=002
[root@localhost ~]# umask 002
[root@localhost ~]# touch umask002.txt
[root@localhost ~]# mkdir umask002
[root@localhost ~]# ll
drwxrwxr-x  2 root root        6 10月  8 09:15 umask002
-rw-rw-r--  1 root root        0 10月  8 09:15 umask002.txt
由此可见, umask就是为控制默认权限而生的。
4、再打开另一个终端, 进行操作, 结果为:
[root@localhost ~]# umask 
022 
在另外一个shell终端中, umask的值仍然是022,   可见, 一个shell进程中的umask值仅在当前shell进程中才有效。

umask函数, 它常用来控制进程创建文件/目录的默认权限, 代码如下:

#include 
 
int main()
{
	system("touch test0.txt");
	system("mkdir folder0");
	
	umask(022);
	system("touch test1.txt");
	system("mkdir folder1");
	
	umask(066);
	system("touch test2.txt");
	system("mkdir folder2");
	
	system("ls -l");
	
	return 0;
}

结果为:
[jerry@localhost root]$ umask 000 
[jerry@localhost root]$ gcc test.c  
[jerry@localhost root]$./a.out  
-rwxrwxrwx 1 jerry jerry4925 May  5 07:43 a.out 
drwxrwxrwx 2 jerry jerry4096 May  5 07:43 folder0 
drwxr-xr-x 2 jerry jerry4096 May  5 07:43 folder1 
drwx--x--x 2 jerry jerry 4096 May  5 07:43 folder2 
-rw-rw-rw- 1 jerry jerry 0 May  5 07:43 test0.txt 
-rw-r--r-- 1 jerry jerry 0 May  5 07:43 test1.txt 
-rw------- 1 jerry jerry 0 May  5 07:43 test2.txt 
-rwxrw-rw- 1 jerry jerry 279 May  5 07:42 test.c 
[jerry@localhost root]$umask 
0000 

shell是父进程, ./a.out进程是子进程.  下面来分析一下:
     1. 根据test0.txt可知, 父进程可以影响子进程的默认屏蔽字。
     2. 根据test1.txt可知, 子进程可以改变自己的默认屏蔽字。
     3. 根据最后shell进程的屏蔽字为000可知, 子进程不会改变父进程的屏蔽字。 
实际上, umask命令与函数的用法是一致的。 

※ 从私钥中提取出公钥:
[root@hdss7-11 ~]# openssl rsa -in wang4.key -pubout -out wang4.pubkey
Enter pass phrase for wang4.key:    
writing RSA key
[root@hdss7-11 ~]# ll
-rw-------  1 root root 1738 10月  9 09:28 wang4.key
-rw-r--r--  1 root root  451 10月  9 09:34 wang4.pubkey

在上面的基础,通话双方需要CA才能公证。正常:生成私钥 →私钥申请CA  → 证书颁发带公钥

※ 随机数生成器: 随机数字.
➢/dev/random:仅从熵池返回随机数;随机数用尽,阻塞。
意思是:调取的块设备,磁盘中断等,也就是鼠标移动等位置操作会计算出来放进/dev/random熵池,然后做成随机数,一但随机数用光了,等鼠标键盘移动录入熵池
➢/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞

生成随机数:取十个随机数
[root@hdss7-11 ~]#cat /dev/urandom |tr -dc '0-9a-zA-Z' |head -c 10
BIN0rVL0Q9[root@hdss7-11 ~]# cat /dev/urandom |tr -dc '0-9a-zA-Z' |head -c 10
Pejo2jIGAr[root@hdss7-11 ~]# cat /dev/urandom |tr -dc '0-9a-zA-Z' |head -c 10
此处每一位可为A-Za-z0-9,共26+26+10=62种可能,取长度为22即可满足要求)
1、head -n 80 /dev/urandom 取/dev/urandom文件的前80行 (/dev/urandom是linux下一个生成随机数的文件)
2、tr -dc A-Za-z0-9  即,用空格替换文本中除A-Za-z0-9之外的所有字符,并删除空格
备注:tr命令是替换或者删除字符的命令.-d的意思是删除后面集合中的字符,-c的意思是取反,就是说,除了后面的字符集合其他的都删除掉.我们可以通过后面的字符的集合来指定自己的密码复杂度.
3、 head -c 22  读取头22个字符

5.3、openssl 操作

   ※ PKI: Public Key Infrastructure
      ➢ CA
      ➢ RA
      ➢ CRL
      ➢证书存取库
   ※ 建立私有CA:
      ➢OpenCA    win简单
      ➢openssl     
   ※ 证书申请及签署步骤:
      ➢1、生成申请请求
      ➢2、RA核验
      ➢3、CA签署
      ➢4、获取证书

openssl 搭建私有CA:

过程: 生成私钥→申请提交个人信息公司,省市    CA收到请求(拷贝到CA) CA给签发生成证书文件 使用服务(https)

5.4、创建CA和申请证书

  ※ 创建私有CA:
      ➢ openssl的配置文件: /etc/pki/tls/openssl.cnf
      ➢ 三种策略:匹配、支持和可选
      ➢ 匹配指要求申请填写的信息跟CA设置信息必须-致,支持指必须填写这项申请信息,可选指可有可无
   ※ 1.创建所需要的文件
      ➢ touch /etc/pki/CA/index. txt生成证书索引数据库文件
      ➢ echo 01 > /etc/pki/CA/serial 指定第- - 个颁发证书的序列号
   ※ 2、 CA自签证书
      ➢ 生成私钥
      ➢ cd /etc/pki/CA/
      ➢ (umask 066; openssI genrsa -out /etc/pki/CA/private/cakey.pem 2048)
   ※ 生成自签名证书
      ➢ openssI 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; openssI 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签署证书,,并将证书颁发给请求者
            openssI ca -in /tmp/test.csr -out  /etc/pki/CA/certs/test.cnt -days 365
            注意:默认国家,省,公司名称三项必须和CA一致
      ➢ D 查看证书中的信息:
             openssI x509 - in /PATH/FROM/CERT_ FILE -noout -text |issuer| subject| serial| dates
             openssI ca -status SERIAL查看指定编号的证书状态
   ※ 4、吊销证书
      ➢ A 在客户端获取要吊销的证书的serial
          openssl x509 -in /PATH/FROM/CERT_ FILE -noout -serial -subject
      ➢ B 在CA上,根据客户提交的serial与subject信息,对比检验是
          否与index.txt文件中的信息致,吊销证书: .
          openssI ca -revoke /etc/ pki/CA/ newcerts/ SERIAL.pem
      ➢ C 指定第一个吊销证书的编号
           注意:第一次更新证书吊销列表前,才需要执行
           echo 01 > /etc/pki/CA/crlnumber
      ➢ D 更新证书吊销列表
           openssl ca -gencrI -out /etc/ pki/CA/crl/crl. pem
           查看crl文件:
           openssI crl -in /etc/ pki/CA/crl/crl.pem -noout -text

openssl 搭建私有CA:

10.4.7.11 作为web外部服务器,提供https       10.4.7.12 作为CA服务器 

一、10.4.7.12 搭建CA服务器 :

1、 配置ca搭建必要的配置: vim /etc/pki/tls/openssl.cnf   。文件内容可以不用改,但是必须懂,ca通过这个文件创建ca

           [root@hdss7-12 ~]# rpm -qf /etc/pki/tls/openssl.cnf     查看谁生成了openssl.cnf 
           openssl-libs-1.0.2k-19.el7.x86_64

这个文件并不是ca特有的文件,而是openssl 配置文件

####################################################################
[ ca ]
default_ca      = CA_default            # The default ca section   他允许在这个机器上创建多个CA机构配置,其中CA_default是默认

####################################################################
[ CA_default ]        默认CA

dir             = /etc/pki/CA           # Where everything is kept   dir             变量赋值

[root@hdss7-12 ~]# tree /etc/pki/CA/
/etc/pki/CA/
├── certs
├── crl
├── newcerts
└── private

[root@hdss7-12 ~]# rpm -ql openssl
/etc/pki/CA
/etc/pki/CA/certs
/etc/pki/CA/crl
/etc/pki/CA/newcerts
/etc/pki/CA/private

certs           = $dir/certs            # Where the issued certs are kept           放发布的证书,存档,跟原证书内容一致存放在哪里
crl_dir         = $dir/crl                # Where the issued crl are kept               证书签发crl列表目录存放在哪里

证书吊销列表 (Certificate Revocation List ,简称: CRL) 是 PKI 系统中的一个结构化数据文件,该文件包含了证书颁发机构 (CA) 已经吊销的证书的序列号及其吊销日期。 CRL 文件中还包含证书颁发机构信息、吊销列表失效时间和下一次更新时间,以及采用的签名算法等。证书吊销列表最短的有效期为一个小时,一般为 1 天,甚至一个月不等,由各个证书颁发机构在设置其证书颁发系统时设置。如下图所示:

安全和加密CA证书_第14张图片

database        = $dir/index.txt        # database index file.     数据库文本文件,颁发的证书的,每个证书的编号索引描述等信息
#unique_subject = no                    # Set to 'no' to allow creation of
                                                      # several ctificates with same subject.  是否允多个证书使用相同的subject。

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    随机数  

x509_extensions = usr_cert              # The extentions to add to the cert  x509后缀的扩展

name_opt      = ca_default              # Subject Name options    颁发者默认配置
cert_opt        = ca_default               # Certificate field options

# Extension copying option: use with caution.
# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions        = crl_ext

default_days    = 365                   # how long to certify for   有效期,默认365天,比如百度

安全和加密CA证书_第15张图片
default_crl_days= 30                   # how long before next CRL   多长时间颁发发布一次证书调查列表,哪些证书被吊销了
default_md      = sha256              # use SHA-256 by default     hash算法
preserve        = no                        # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy          = policy_match         策略匹配,可以写多个。说明我现在的ca使用的是policy_match。

# For the CA policy
[ policy_match ]      匹配policy_match ,私有的内部使用

CA :作为一个ca,提交必要信息,你是哪个国家、哪个城市、哪个公司等等的ca,对应的申请ca认证的必须要提交对应的一样的信息。  match 是必须ca 服务器跟申请ca的客户端信息一致, optional非必须

countryName                    = match    国家名字
stateOrProvinceName      = match  州或省名称名字
organizationName            = match   组织名字
organizationalUnitName   = optional    组织单位名称名字
commonName                  = supplied    给哪个主机或者域名搭建ca
emailAddress                    = optional   给哪个email搭建ca

[ policy_anything ]   给所有人用的
countryName                   = optional
stateOrProvinceName     = optional
localityName                    = optional
organizationName           = optional
organizationalUnitName  = optional
commonName                 = supplied
 

2、搭建CA认证

dir               = /etc/pki/CA                     # Where everything is kept
certs           = $dir/certs                        # Where the issued certs are kept
database           = $dir/index.txt           # database index file.
new_certs_dir   = $dir/newcerts           # default place for new certs.

certificate     = $dir/cacert.pem       # The CA certificate
serial            = $dir/serial                # The current serial number
private_key     = $dir/private/cakey.pem     # The private key

※ 2、 CA自签证书  生成私钥

[root@hdss7-12 ~]# (umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048 )
Generating RSA private key, 2048 bit long modulus
.................................................................+++
....................................................................................................................................................................................+++
e is 65537 (0x10001)
[root@hdss7-12 ~]# tree /etc/pki/CA/
/etc/pki/CA/
├── certs
├── crl
├── newcerts
└── private
    └── cakey.pem

 ※ 生成自签名证书      自己给自己颁发证书,自签名:

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
      ➢ req 请求    
      ➢ -new 生成新证书签署请求
      ➢ -x509 专用于CA生成自签证书
      ➢ -key 生成请求时用到的私钥文件
      ➢  /etc/pki/CA/private/cakey.pem  提供私钥证书路径
      ➢ -days n  证书的有效期限音,自己签名,所以有效期给7300天
      ➢ -out /PATH/TO/SOMECERTFILE:证书的保存路径

[root@hdss7-12 ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
Country Name (2 letter code) [XX]:CN                     国家名字
State or Province Name (full name) []:liaoning        州或省名称名字
Locality Name (eg, city) [Default City]:shenyang     组织名字
Organization Name (eg, company) [Default Company Ltd]:jerry.com     组织单位名称名字
Organizational Unit Name (eg, section) []:it     给哪个主机或者域名搭建ca
Common Name (eg, your name or your server's hostname) []:hdss7-12     通用名,一般为服务器的主机名,这个名字会出现在颁发者
Email Address []:                                给哪个email搭建ca,允许不写  
[root@hdss7-12 ~]# ll /etc/pki/CA/cacert.pem 
-rw-r--r-- 1 root root 1318 10月  9 14:19 /etc/pki/CA/cacert.pem
[root@hdss7-12 ~]# cat !$
cat /etc/pki/CA/cacert.pem
-----BEGIN CERTIFICATE-----
MIIDoTCCAomgAwIBAgIJAMJYX80ueYHMMA0GCSqGSIb3DQEBCwUAMGcxCzAJBgNV
BAYTAkNOMREwDwYDVQQIDAhsaWFvbmluZzERMA8GA1UEBwwIc2hlbnlhbmcxEjAQ
BgNVBAoMCWplcnJ5LmNvbTELMAkGA1UECwwCaXQxETAPBgNVBAMMCGhkc3M3LTEy
MB4XDTIwMTAwOTA2MTkyNloXDTQwMTAwNDA2MTkyNlowZzELMAkGA1UEBhMCQ04x
ETAPBgNVBAgMCGxpYW9uaW5nMREwDwYDVQQHDAhzaGVueWFuZzESMBAGA1UECgwJ
amVycnkuY29tMQswCQYDVQQLDAJpdDERMA8GA1UEAwwIaGRzczctMTIwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCyV08G+MSNmpS8lRZVr71xFsEeTbTe
P1DEs0Emm9O/8zctzg0QvZiwGJfJ9Xj3/TsP57XxjExkYoYt+QFBkhnbLL9DRylk
DL1C3OAhjomaU6KuAEvRqd3MEYcF48aM3Ytj/6wLJN2qjH9lozrQQIFqxrUO/ftt
yZTfE2C9bCvhrGi3hWYehnPfZsjzuaKxCK1JVR7MAMaZ3aVQglODmQHPnCJXanti
fSberjZja6nPt769xqJEatqLWp4sk6QW/ASRP9SlJg/KhbgmZWOi8Znw485lzP9T
S6w5zAvZK/qnDtwK4AAOs/AnbB521niKHp89OUXbQShay1DRqMVvUt4BAgMBAAGj
UDBOMB0GA1UdDgQWBBQMbrRHEfIdIHxXUDaMEKo/vQj7EjAfBgNVHSMEGDAWgBQM
brRHEfIdIHxXUDaMEKo/vQj7EjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
A4IBAQBtRTQZDz8WNTEPIQKjeX8ewmwzSZCHFDyNXM5nOz7hhQx94DFc1mE3eKYr
PSufygliQOd6y349uSONOkPPuSOD4LgxOYuGX2UbkmllotIk+xkvQbrnAnxouDUS
WU9zBoswcnoXPnOF1pA25el2zxNrlcHPz3XuaLXlgQjSt+m63kSFhGmo/wgOFgIv
IKd3OBbnQyPjARM4nB30d9J0QQGelHSDSEoz6lwYeL/BOwfG++sHn1J65pZ3ui1K
lxwQ0FoO4zPB0TfILear5lcB8YaloHHUpWb4WhIYzu7MZ3mVNx7aUiNOqpUmrT80
PRJ+D5smwx6I9VXsWvrriilS8bXa
-----END CERTIFICATE-----
[root@hdss7-12 ~]# file !$
file /etc/pki/CA/cacert.pem
/etc/pki/CA/cacert.pem: PEM certificate   PEM 证书文件

用x509 查看证书内容:

[root@hdss7-12 ~]# openssl x509 -in /etc/pki/CA/cacert.pem -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            c2:58:5f:cd:2e:79:81:cc
    Signature Algorithm: sha256WithRSAEncryption
        Issuer颁发者: C=CN, ST=liaoning, L=shenyang, O=jerry.com, OU=it, CN=hdss7-12
        Validity
            Not Before: Oct  9 06:19:26 2020 GMT    有效期
            Not After : Oct  4 06:19:26 2040 GMT      有效期
        Subject 给谁颁发,颁发给自己: C=CN, ST=liaoning, L=shenyang, O=jerry.com, OU=it, CN=hdss7-12   
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)

win查看:

  该后缀

安全和加密CA证书_第16张图片   安全和加密CA证书_第17张图片

二、 客户端申请证书:

10.4.7.11 作为web外部服务器,提供https  

1、客户端申请私钥:

作为客户端私钥放在那,CA配置文件写必须在哪,客户端不需要,在生产中:根据你做的什么服务放在什么位置

[root@hdss7-11 ~]# cd /home/
[root@hdss7-11 home]# (umask 066;openssl genrsa -out /home/service.key 2048)
Generating RSA private key, 2048 bit long modulus
...........................................................+++
.............................+++
e is 65537 (0x10001)
[root@hdss7-11 home]# ll service.key 
-rw------- 1 root root 1675 10月  9 14:39 service.key
[root@hdss7-11 home]# cat service.key 
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEArv2ZAS0AeCKqP4Cv4Mqv9PBpF73uNIObsuzT7Jq9vIYGuSzm
N/WAPDPS11gFlFKQcmW6BHG/l1lWSbpi871O3qWX2L5w0CcKXVe4B7xDis/MHw2t
M5cPpW5LvZkmA4cRmPnoh+sz65yfpwoFS6idP0n5hjIAcluOgpKOM6oadCREkw3m
a0LNofycJY85motd1pnVNGyIacaIkUJbhLRkqXDJTRTnidywj+FzNJVOnHPfV533
n8rEwshktC2ypeav9Z/DgyaEqMg89UhC/xCgnOtZkLx2xwsbR4IUqDUeJHczS2Xr
tVE508j0cxTFGz5OV66CPZJIIYNn0Be4MaMl7wIDAQABAoIBAFy88VV6MAF6/Zbh
8FPFlzLMJiX69j7GcMGGWVnPODatIOsKLIgDh45gOKD/eRV+HCdEWiz4y3y+T8iL
Ct35uc6tG6g2ZTsrNYb6cgFHeNQcBCWA7gWlTRlzNpiojUjZUC4uY1mFAOMhAktY
Cf4RAoGACGQ4FcW07HT9texN7DhnF2qnzhVK5S6UaekeoCwPveIhkmKpJlXgYSj1
TELHFUyOmGesaR76lkwMdbEevBwPOAZcC8r+yNwoze1OGz2xJu7sYAw41H0XGZH7
b/vDd7vYZ7awoWqPHNrh41lSg7up5NGbqg/9/WmvEPknhcsX3mo=
-----END RSA PRIVATE KEY-----

2、利用私钥生成证书请求文件,发给CA。
   openssl req -new -key /home/service.key -days 365 -out /home/service.csr
   相比CA生成自签名证书 ,少了x509 
   天数-days 这写不写不生效,是根据CA天数决定的
   .csr  是请求文件后缀名

[root@hdss7-11 home]# openssl req -new -key /home/service.key -days 365 -out /home/service.csr
Country Name (2 letter code) [XX]:CN   
State or Province Name (full name) []:liaoning
Locality Name (eg, city) [Default City]:luoyang    设置了不需要一致
Organization Name (eg, company) [Default Company Ltd]:jerry.com
Organizational Unit Name (eg, section) []:bumen   
Common Name (eg, your name or your server's hostname) []:www.jerry.com     必须写对外提供服务的网站名,如果不一致,报错   Common Name (eg, your name or your server's hostname) []:*.jerry.com     或者写泛域名
Email Address []:
A challenge password []:   口令加密可以不写
An optional company name []:   可选的公司名,可以不写
[root@hdss7-11 home]# ll /home/service.csr 
-rw-r--r-- 1 root root 1013 10月  9 14:52 /home/service.csr
[root@hdss7-11 home]# cat !$   明文
cat /home/service.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICszCCAZsCAQAwbjELMAkGA1UEBhMCQ04xETAPBgNVBAgMCGxpYW9uaW5nMRAw
DgYDVQQHDAdsdW95YW5nMRIwEAYDVQQKDAlqZXJyeS5jb20xDjAMBgNVBAsMBWJ1
bWVuMRYwFAYDVQQDDA13d3cuamVycnkuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEArv2ZAS0AeCKqP4Cv4Mqv9PBpF73uNIObsuzT7Jq9vIYGuSzm
N/WAPDPS11gFlFKQcmW6BHG/l1lWSbpi871O3qWX2L5w0CcKXVe4B7xDis/MHw2t
M5cPpW5LvZkmA4cRmPnoh+sz65yfpwoFS6idP0n5hjIAcluOgpKOM6oadCREkw3m
a0LNofycJY85motd1pnVNGyIacaIkUJbhLRkqXDJTRTnidywj+FzNJVOnHPfV533
n8rEwshktC2ypeav9Z/DgyaEqMg89UhC/xCgnOtZkLx2xwsbR4IUqDUeJHczS2Xr
tVE508j0cxTFGz5OV66CPZJIIYNn0Be4MaMl7wIDAQABoAAwDQYJKoZIhvcNAQEL
BQADggEBABADsmGUU9nmr6Cscy7q/SlEHx9MTb/REVPtAerEg7nTI0eWaNlkrv3W
pdsdfdl/IR1+uo6Exsql1TgO6Jwd3QnfVd3MqOERqkyn9f0H13OvFfCary7VgKtV
GTQXblCMZsRDtQG2lk+17NVDC/k6wyPRkXG1MfcbwKS1Wj+pyoE/bUeRjEA8A/28
SfhIGQmALFJsQZjxyWKiGD3whGJGyTpSYH+RoyJ/H1gkJu4k+WhKTw6WIHDtNn6W
5ogkOlaViolFREX5or3UKULN9O2MGwuzEkwLABqKgJZzcnpCh0WGJfWOWNMpircy
S8PcsUHATz6HAPCOG9tFjmu05WXNp4E=
-----END CERTIFICATE REQUEST-----
[root@hdss7-11 home]# openssl x509 -in /home/service.csr -noout -text    
unable to load certificate
140296693258128:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:707:Expecting: TRUSTED CERTIFICATE

、把申请证书发送给CA服务器

[root@hdss7-12 CA]# mkdir csr
[root@hdss7-11 home]# scp /home/service.csr 10.4.7.12:/etc/pki/CA/csr

四、颁发证书

hdss7-12 中:
openssl ca -in /etc/pki/CA/csr/service.csr -out /etc/pki/CA/certs/service.crt -days 100
由于openssl.conf     certs  = $dir/certs  # Where the issued certs are kept  放发布的证书,存档,跟原证书内容一致
-days 100 给他颁发100天。所以这个天数是CA颁发的,不是申请的

[root@hdss7-12 csr]# openssl ca -in /etc/pki/CA/csr/service.csr -out /etc/pki/CA/certs/service.crt -days 100
Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/index.txt: No such file or directory
unable to open '/etc/pki/CA/index.txt'
140354823894928:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('/etc/pki/CA/index.txt','r')
140354823894928:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:

报错:因为databases = /etc/pki/CA/index.txt  没有创建:

[root@hdss7-12 csr]# touch /etc/pki/CA/index.txt
[root@hdss7-12 csr]# openssl ca -in /etc/pki/CA/csr/service.csr -out /etc/pki/CA/certs/service.crt -days 100
Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/serial: No such file or directory
error while loading serial number
140199906129808:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('/etc/pki/CA/serial','r')
140199906129808:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:

报错:因为serial  = /etc/pki/CA/serial   没有创建,还的创建那个索引开始:
[root@hdss7-12 csr]# echo 01 > /etc/pki/CA/serial           必须是两位数,00~99,而且一个数字,比如1要写01。

一般开头都是00 或者01 

[root@hdss7-12 csr]# openssl ca -in /etc/pki/CA/csr/service.csr -out /etc/pki/CA/certs/service.crt -days 100
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Oct  9 08:09:35 2020 GMT
            Not After : Jan 17 08:09:35 2021 GMT
        Subject:
            countryName               = CN                    检查申请私钥跟CA是否有差异
            stateOrProvinceName       = liaoning       检查申请私钥跟CA是否有差异
            organizationName          = jerry.com        检查申请私钥跟CA是否有差异
            organizationalUnitName    = bumen      
            commonName                = www.jerry.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                E0:D7:E2:3D:D9:08:81:11:65:54:7A:15:76:BF:2E:26:E6:E4:A3:AA
            X509v3 Authority Key Identifier: 
                keyid:0C:6E:B4:47:11:F2:1D:20:7C:57:50:36:8C:10:AA:3F:BD:08:FB:12

Certificate is to be certified until Jan 17 08:09:35 2021 GMT (100 days)
Sign the certificate? [y/n]:y    是否签发证书
1 out of 1 certificate requests certified, commit? [y/n]y  确认不
Write out database with 1 new entries
Data Base Updated    数据库更新
[root@hdss7-12 csr]# tree /etc/pki/CA/
/etc/pki/CA/
├── cacert.pem
├── certs
│   └── service.crt    生成的颁发证书
├── crl
├── csr
│   └── service.csr  
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│   └── 01.pem    自动生成的颁发证书,名字为创建的时候01
├── private
│   └── cakey.pem
├── serial
└── serial.old

[root@hdss7-12 CA]# ll ./certs/service.crt ./newcerts/01.pem 
-rw-r--r-- 1 root root 4466 10月  9 16:20 ./certs/service.crt
-rw-r--r-- 1 root root 4466 10月  9 16:20 ./newcerts/01.pem
[root@hdss7-12 CA]# cat serial        serial  涨一位 , 如果serial =99,下一位9A(十六进制)。
02
[root@hdss7-12 CA]# cat serial.old 
01

[root@hdss7-12 CA]# cat index.txt
V    210117080935Z        01    unknown    /C=CN/ST=liaoning/O=jerry.com/OU=bumen/CN=www.jerry.com
V 代表当前是有效期正常状态 

查看证书:

[root@hdss7-12 CA]# openssl x509 -in /etc/pki/CA/certs/service.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer 颁发者hdss7-12(CA): C=CN, ST=liaoning, L=shenyang, O=jerry.com, OU=it, CN=hdss7-12
        Validity
            Not Before: Oct  9 08:09:35 2020 GMT    颁发证书是100天
            Not After : Jan 17 08:09:35 2021 GMT    
        Subject给谁颁发www.jerry.com: C=CN, ST=liaoning, O=jerry.com, OU=bumen, CN=www.jerry.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ae:fd:99:01:2d:00:78:22:aa:3f:80:af:e0:ca:
                    af:f4:f0:69:17:bd:ee:34:83:9b:b2:ec:d3:ec:9a:

sz /etc/pki/CA/certs/service.crt 

发现没有上级ca信息

安全和加密CA证书_第18张图片

导入上级ca

安全和加密CA证书_第19张图片

再看 /etc/pki/CA/certs/service.crt 

安全和加密CA证书_第20张图片

五、颁发证书拷贝回hdss7-11 

把生成的颁发证书 service.crt 拷贝回hdss7-11 ,就完事了

六、需求:多个服务,每个都有不同的证书

1、如果同一台客户端机器,可以不需要重新创建私钥

10.4.7.11 作为另一个服务对外部服务器,提供https ,顺便测试验证失败
[root@hdss7-11 home]# openssl req -new -key /home/service.key -out /home/service1.csr
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:newYork
Locality Name (eg, city) [Default City]:nhd
Organization Name (eg, company) [Default Company Ltd]:jerry.com
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's hostname) []:www.wang.com      
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@hdss7-11 home]# scp /home/service1.csr 10.4.7.12:/etc/pki/CA/csr
service1.csr                                                                               100% 1001   298.1KB/s   00:00    
[root@hdss7-11 home]# 

10.4.7.12:

[root@hdss7-12 CA]# openssl ca -in csr/service1.csr -out certs/service1.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
The countryName field needed to be the same in the
CA certificate (CN) and the request (US)   报错了提示检测失败,而且这个检测是一个一个检测的

修改后:颁发证书

[root@hdss7-12 CA]# cat index.txt
V    210117080935Z        01    unknown    /C=CN/ST=liaoning/O=jerry.com/OU=bumen/CN=www.jerry.com
V    211009090441Z        02    unknown    /C=CN/ST=liaoning/O=jerry.com/OU=as/CN=www.jerry1.com\xC3\x82\xC2\xA0
[root@hdss7-12 CA]# cat index.txt.old 
V    210117080935Z        01    unknown    /C=CN/ST=liaoning/O=jerry.com/OU=bumen/CN=www.jerry.com
[root@hdss7-12 CA]# cat index.txt.attr
unique_subject = yes 

唯一效果是:  Subject: C=CN, ST=liaoning, O=jerry.com, OU=bumen, CN=www.jerry.com  不能所有都相同

案例: openssl ca -in csr/service1.csr -out certs/service1.crt -days 365后,会出现error number 

[root@hdss7-12 CA]# openssl x509 -in ./newcerts/01.pem -noout -issuer
issuer= /C=CN/ST=liaoning/L=shenyang/O=jerry.com/OU=it/CN=hdss7-12
[root@hdss7-12 CA]# openssl x509 -in ./newcerts/01.pem -noout -subject
subject= /C=CN/ST=liaoning/O=jerry.com/OU=bumen/CN=www.jerry.com
[root@hdss7-12 CA]# openssl x509 -in ./newcerts/01.pem -noout -dates
notBefore=Oct  9 08:09:35 2020 GMT
notAfter=Jan 17 08:09:35 2021 GMT
[root@hdss7-12 CA]# openssl x509 -in ./newcerts/01.pem -noout -serial
serial=01

七、吊销证书:

1、吊销证书:[root@hdss7-12 CA]# openssl ca -revoke newcerts/02.pem     revoke 取消权限
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 02.
Data Base Updated
[root@hdss7-12 CA]# cat index.txt   R 就是吊销
V    210117080935Z        01    unknown    /C=CN/ST=liaoning/O=jerry.com/OU=bumen/CN=www.jerry.com
R    211009090441Z    201009092235Z    02    unknown    /C=CN/ST=liaoning/O=jerry.com/OU=as/CN=www.jerry1.com\xC3\x82\xC2\xA0

2、指定吊销证书的编号
[root@hdss7-12 CA]#cat /etc/pki/tls/openssl.cnf
crlnumber    = $dir/crlnumber    # the current crl number     这个还是需要创建,而且也是下一个编号
注意:第一次更新证书吊销列表前,才需要执行
[root@hdss7-12 CA]# echo 01 > /etc/pki/CA/crlnumber

3、 更新证书吊销列表:

生成证书调查列表:
[root@hdss7-12 CA]# openssl ca -gencrl -out /etc/ pki/CA/crl.pem    会默认查询 /etc/ pki/CA/crl.pem/index.txt == R  
查看crl文件:
[root@hdss7-12 CA]# openssl crl -in /etc/pki/CA/crl.pem -noout -text
Certificate Revocation List (CRL):
        Version 2 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: /C=CN/ST=liaoning/L=shenyang/O=jerry.com/OU=it/CN=hdss7-12
        Last Update: Oct  9 09:31:53 2020 GMT
        Next Update: Nov  8 09:31:53 2020 GMT
        CRL extensions:
            X509v3 CRL Number: 
                1
Revoked Certificates:
   Serial Number: 02

安全和加密CA证书_第21张图片

你可能感兴趣的:(Linux,ca证书)