Linux数据加密和数字证书认证

  在互联网中数据被非法窃取、篡改经常发生,那么我们该如何来防范这些安全问题呢。下面我将介绍几种在Linux中常用的数据加密以及传输过程中的身份认证的方法。

1. 对称加密

1. 特性:

1. 加密、解密使用同一个密钥,效率高
2. 将原始数据分割成固定大小的块,逐个进行加密

2.功能

1. 加密数据

3. 缺陷:

1. 密钥过多
2. 密钥分发
3. 数据来源无法确认

4. 算法

1. DES     : 是一种使用密钥加密的块算法,采用56位加密算法。
2. 3DES    : 三重数据加密算法,进行三次DES加密。
3. AES     : 高级加密标准目前对称加密中最常用的算法之一,采用128、192、256、512位算法。
4. Blowfish: 是一个64位分组及可变密钥长度的对称密钥分组密码算法。
6. IDEA    : 国际数据加密算法,采用128位加密算法。
7. CAST-128: 是类似于DES的置换组合网路加密系统,是一种12或16循环的Feistel密码,块长度是64位,密码长度最大128位。

5. 示例,在Linux使用gpg软件

1. GPG是一个由GNU(自由软件基金会)发布的一款加密和数字签名的免费工具。软件包名gnupg2 。
2. 常用选项
命令 注释
-b, --detach-sign 生成一份分离的签名
-e, --encrypt 加密数据
-c, --symmetric 使用对称加密
-d, --decrypt 解密数据
--verify 验证签名
-k, --list-keys 列出密钥和签名
--check-sigs 列出并检查密钥签名
--fingerprint 列出密钥和指纹
-K, --list-secret-keys 列出私钥
--gen-key 生成一副新的密钥对
--delete-keys 从公钥钥匙环里删除密钥
--delete-secret-keys 从私钥钥匙环里删除密钥
--sign-key 为某把密钥添加签名
--lsign-key 为某把密钥添加本地签名
--edit-key 编辑某把密钥或为其添加签名
--gen-revoke 生成一份吊销证书
--export 导出密钥
--import 导入/合并密钥
-o, --output FILE 将输出写入到FILE
-v, --verbose 详细模式
[root@CentOS7.3 ~]#echo "Symmetric encryption" > file        #创建一个文件
[root@CentOS7.3 ~]#ll file                                   #查看文件的属性
-rw-r--r--. 1 root root 21 Jul 16 23:50 file
[root@CentOS7.3 ~]#gpg -c file                               #gpg -c使用对称加密,会创建一个file.gpg的文件。需要输入两次密码,如图1.
[root@CentOS7.3 ~]#ll file*                                  #查看所有以file开头的文件
-rw-r--r--. 1 root root 21 Jul 16 23:50 file            
-rw-r--r--. 1 root root 64 Jul 16 23:50 file.gpg             #加密生成的文件,文件大小比原文件大了3倍  
[root@CentOS7.3 ~]#cat file.gpg                              #查看加密文件的内容
Ro+@q!ŝP|${<½zÿ٨ob\$靰`X%PaqJjp[root@CentOS7.3 ~]#           #可以看到加密过的文件内容是一堆乱码
[root@CentOS7.3 ~]#scp file.gpg root@192.168.166.129:/root/  #把文件传到另外的一台计算机

图1


image.png
[root@CentOS6.9 ~]#ls                                                       #查看当前目录下的文件
anaconda-ks.cfg  bin  -d  file.gpg  install.log  install.log.syslog  
[root@CentOS6.9 ~]#cat file.gpg                                             #查看file.gpg文件的内容
Ro+@q!?P|${<?z??ob\$?`X%PaqJjp[root@CentOS6.9 ~]#
[root@CentOS6.9 ~]#gpg -o file -d file.gpg                                  #使用密码解密文件,通过file.gpg文件生成file文件
gpg: CAST5 加密过的数据                                                     #gpg默认采用的是CAST-128算法
can't connect to `/root/.gnupg/S.gpg-agent': 拒绝连接
gpg: 以 1 个密码加密
gpg: 警告:报文未受到完整的保护
[root@CentOS6.9 ~]#ls                                                       #再次查看当前目录下的文件
anaconda-ks.cfg  bin  -d  file  file.gpg  install.log  install.log.syslog   #file文件已经生成
[root@CentOS6.9 ~]#cat file                                                 #查看file文件的内容
Symmetric encryption                                                        #解密成功

2. 非对称加密

1. 特点,采用公钥和私钥加密和解密

1. 公钥:公开给所有人
2. 私钥:自己留存,必须保证其私密性
3. 用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

2. 功能:

1. 数字签名:主要在于让接收方确认发送方身份
2. 对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
3. 数据加密:适合加密较小数据

3. 缺点:密钥长, 加密解密效率低下

4. 算法:

1. RSA     :RSA是目前最有影响力的公钥加密算法,安全性依赖于大数分解。(数据加密,数字签名) 
2. DSA     :是Schnorr和ElGamal签名算法的变种,基于整数有限域离散对数难题,一个重要特点是两个素数
             公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是
             作了手脚,RSA算法却做不到。(数字签名)
3. ELGamal : 公钥密码体制和椭圆曲线加密体,其安全性依赖于计算有限域上离散对数。(数据加密,数字签)

5. 示例,使用gpg工具

  1. 创建密钥
请选择您要使用的密钥种类:                                   #选择算法
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择? 1                                                 #选择默认的RSA算法
RSA 密钥长度应在 1024 位与 4096 位之间。                     #提示密钥的长度
您想要用多大的密钥尺寸?(2048)1024                           #为了实验快速生成,这里选择最短的1024
您所要求的密钥尺寸是 1024 位
请设定这把密钥的有效期限。                                   #选择密钥有效期
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 1w                                     #这里选择了1周
密钥于 2017年07月24日 星期一 19时32分25秒 CST 过期           #提示密钥过期时间
以上正确吗?(y/n)y                                           #Y确定设置
 
真实姓名:admin                                              #设置密钥的名称为admin
电子邮件地址:
注释:
您选定了这个用户标识:                                     
    “admin”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o  #选择“O”确定
您需要一个密码来保护您的私钥。                             #提示设置密钥的密码,可以不设置。

can't connect to `/root/.gnupg/S.gpg-agent': 拒绝连接
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动     #提示做一些动作来生成随机字节。
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。

我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动                            
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 FAEEA205 被标记为绝对信任
公钥和私钥已经生成并经签名。

gpg: 正在检查信任度数据库                                                 
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已签名:  0 信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2017-07-24 进行
pub   1024R/FAEEA205 2017-07-17 [有效至:2017-07-24]               
密钥指纹 = 81D0 2DB4 CEF7 CCCF 15FD  0743 FA42 CDF3 FAEE A205         #密钥指纹
uid                  admin                                            #密钥ID
sub   1024R/9486732F 2017-07-17 [有效至:2017-07-24]                  #有效期
  1. 查看密钥
[root@CentOS6.9 ~]#gpg --list-keys                              #查看密钥            
/root/.gnupg/pubring.gpg
------------------------
pub   1024R/FAEEA205 2017-07-17 [有效至:2017-07-24]            #公钥
uid                  admin                                     #密钥名
sub   1024R/9486732F 2017-07-17 [有效至:2017-07-24]            #私钥
[root@CentOS6.9 ~]#ls .gnupg/         #生成的公钥和是私钥都存放在用户家目录的隐藏目录.gnupg下。
gpg.conf           pubring.gpg   random_seed  S.gpg-agent           #公钥文件pubring.gpg
private-keys-v1.d  pubring.gpg~  secring.gpg  trustdb.gpg           #私钥文件secring.gpg
[root@CentOS6.9 ~]#
  1. 发布公钥
[root@CentOS6.9 ~]#gpg --export -a -o admin.pubkey                  #导出公钥到admin.pubkey文件中
[root@CentOS6.9 ~]#cat admin.pubkey                                 #查看导出的公钥
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.14 (GNU/Linux)

mI0EWWe1EwEEAL1zIy9aO6RL0q8IoxAOWPyjYsX3Kjwj2eVM6RlBmyhuUt+pKp+D
tFW+LWO4EcfvVzqwowkzZNykZBLHAR+2jS5R7AZjH6K8KordEGfeOiY2gfL/4+yA
D2bJXtjNj3/eS+0Z8RVjnKraxCe4Md3nMV0TjcrF37/EuRC13R07U6fpABEBAAG0
BWFkbWluiL4EEwECACgFAllntRMCGwMFCQAJOoAGCwkIBwMCBhUIAgkKCwQWAgMB
Ah4BAheAAAoJEKcVxo/ZTeqPyMcEAJlDJbMVnp+nIBSancDWLwvnsnF6uCouAfOs
6p7TcI+YATIVeRnIagNl+Uj7AasIDvnlxf9dnG3I78lTCjUC66rvG8a4TB7FTwSE
FSJc5G0WfgRRps/dK+JsLsDSC7BV3UTuxMVDXoiOXrPjEQzNcgCNxD6JFlVL2hS+
kM0B9oJjuI0EWWe1EwEEAN0CB8+nhSjbel+vdDz/ivWbIE3PhWKJddA0iPaFhE85
Rm5KrHBv+pe9nYnQ9vjP7c0p/wt+zU6gD2uw11ZQuTPIhJDCnI0Wyat41AY8lidI
DBkOGHf6mFynG0b15X38EcHxcitv4KNjEW0M2BXNvX6hgOJGC4Ojy9p0bIJj+Z95
ABEBAAGIpQQYAQIADwUCWWe1EwIbDAUJAAk6gAAKCRCnFcaP2U3qj+WpA/4qFXi3
rHGEIVATq7lOYdOyVm2+IL+Cb0eWZ+Nyohrim/KEVVsBo41wZpzSSIf61AMTyQAm
Be7MKPi7837rZsVuyITXcaZjcPKGqyAO1SnPhSpfButdF2wGcZVZjVpBH3/SOI4d
zl3MxSuSCTsPWOm36AkDOut39SB1g8BccMXL5Q==
=DFw4
-----END PGP PUBLIC KEY BLOCK-----
[root@CentOS6.9 ~]#scp admin.pubkey root@“主机ip地址”:/root  #把导出的公钥文件发送到另外的一个主机上

[root@CentOS7.3 ~]#gpg --import admin.pubkey                 #在另外一台主机上导入公钥文件
gpg: key D94DEA8F: public key "admin" imported
gpg: Total number processed: 1 
gpg:               imported: 1  (RSA: 1)
[root@CentOS7.3 ~]#gpg -k                                    #查看主机上所有的密钥
/root/.gnupg/pubring.gpg
------------------------
pub   1024R/8E5F9DE1 2017-07-17 [expires: 2017-07-24]
uid                  Centos
sub   1024R/55B15E4F 2017-07-17 [expires: 2017-07-24]

pub   1024R/D94DEA8F 2017-07-13 [expires: 2017-07-20]
uid                  admin                                   #导入完成
sub   1024R/3C424201 2017-07-13 [expires: 2017-07-20]

[root@CentOS7.3 ~]#echo "Encryption test" > test             #创建一个test文件
[root@CentOS7.3 ~]#gpg -r admin -e test   #使用admin的公钥加密test文件,会生成一个后缀为.gpg同名文件
gpg: 3C424201: There is no assurance this key belongs to the named user      

pub  1024R/3C424201 2017-07-13 admin
 Primary key fingerprint: F44F 56A3 E401 F49E C7AB  1ECD A715 C68F D94D EA8F
      Subkey fingerprint: 38C2 6698 2632 E244 903F  4F7C 0122 D29F 3C42 4201
[root@CentOS7.3 ~]#cat test.gpg                           #查看test.gpg文件的内容
:©>?£ᨒXQ࠳𿖣«^-3R+½5亳Gs$ʹBtX9Ѥb󚃅q+y|ӵ¢u*B<jRů򉤂<.®þnr£b&嬜+ꘃⁿV¥¿A¹𷷢𥧒]^tkљn¯v^㼊œL«W/ֵъN{³Ҷ*QkN¬`*Eַ[root@CentOS7.3 ~]#gpg -r admin -d test.gpg                     #用admin的公钥解密文件
gpg: encrypted with 1024-bit RSA key, ID 3C424201, created 2017-07-13
      "admin"
gpg: decryption failed: No secret key                     #无法解密,提示没有密码
  
  #把文件从另一台主机上发送回来
[root@CentOS6.9 ~]#cat test.gpg                          #来查看test.gpg文件的内容
:©>?£ᨒXQ࠳𿖣«^-3R+½5亳Gs$ʹBtX9Ѥb󚃅q+y|ӵ¢u*B<jRů򉤂<.®þnr£b&嬜+ꘃⁿV¥¿A¹𷷢𥧒]^tkљn¯v^㼊œL«W/ֵъN{³Ҷ*QkN¬`*E
[root@CentOS6.9 ~]#gpg -o test -d test.gpg               #解密test.gpg文件,并把输出写入test文件中
您需要输入密码,才能解开这个用户的私钥:“admin”
1024 位的 RSA 密钥,钥匙号 3C424201,建立于 2017-07-13 (主钥匙号 D94DEA8F)
can't connect to `/root/.gnupg/S.gpg-agent': 没有那个文件或目录
gpg: 由 1024 位的 RSA 密钥加密,钥匙号为 3C424201、生成于 2017-07-13
      “admin”
[root@CentOS6.9 ~]#ls                                   #解密完成
admin.pubkey  anaconda-ks.cfg  bin  install.log  install.log.syslog  test  test.gpg
[root@CentOS6.9 ~]#cat test                             #查看一下内容
Encryption test

3. 单向散列Hash

1. 特性

1. 将任意数据缩小成固定大小的数值
2. 任意输入长度的数据。
3. 输出固定长度是加密数值。
4. 若修改数据,生成的数值也会改变,不会和原来的数值产生冲突。
5. 无法从数值中推算生成数据,不可逆。

2. 功能

1. 验证数据完整性
2. 提高数字签名的有效性

3. 常见算法

1. md5    : 把不同长度的数据块进行暗码运算成一个128位的数值
2. sha1   : 对任意长度的数据运算生成一个160位的数值
3. sha224 : 对任意长度的数据运算生成一个224位的数值
4. sha256 : 对任意长度的数据运算生成一个256位的数值
5. sha384 : 对任意长度的数据运算生成一个384位的数值
6. sha512 : 对任意长度的数据运算生成一个512位的数值
7. MAC    :是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息,
            常见的是HMAC(用于消息认证的密钥散列)。

4. Linux中的常用工具

1. md5sum 
2. sha1sum  file、sha1sum --check file 
3. openssl
4. gpg

5. 示例

[root@CentOS6.9 ~]#echo "test" > hash              #生成一个文件
[root@CentOS6.9 ~]#ls                              #查看
admin.pubkey  anaconda-ks.cfg  bin  hash  install.log  install.log.syslog  test  test.gpg
[root@CentOS6.9 ~]#md5sum hash                     #md5运算产生hash值
d8e8fca2dc0f896fd7cb4cb0031ba249  hash             #hash值
[root@CentOS6.9 ~]#echo "123" >> hash              #在文件的中加一行123
[root@CentOS6.9 ~]#md5sum hash                     #再用md5运算产生hash值
4145c486d60a3d078fc57ac0e7de44bd  hash             #hash值和原来的已经不同了
[root@CentOS6.9 ~]#echo "test" > hash              #把文件重置
[root@CentOS6.9 ~]#md5sum hash                     #再次运算
d8e8fca2dc0f896fd7cb4cb0031ba249  hash             #hash值和原来的相同
[root@CentOS6.9 ~]#md5sum hash > hash.key          #hash运算并把hash值写入hash.key文件中
[root@CentOS6.9 ~]#md5sum -c hash.key              #用这个文件判断原文件的数据有没有改变
hash: 确定                                          
[root@CentOS6.9 ~]#echo "123" >> hash              #把123追加到hash文件
[root@CentOS6.9 ~]#md5sum -c hash.key              #再次判断
hash: 失败
md5sum: 警告:1/1 生成的校验和不匹配
[root@CentOS6.9 ~]#

4. 安全认证之数字证书

数字证书为实现双方安全通信提供了电子认证。在因特网、公司内部网或外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。目前,证书的格式和验证方法普遍遵循X.509国际标准。

1. 签发机构和证书的内容

1. 签证机构 :CA
2. 注册机构 :RA
3. 证书吊销列表 :CRL
4. X.509:定义了证书的结构以及认证协议标准
    - 版本号
    - 序列号
    - 签名算法
    - 颁发者
    - 有效期限
    - 主体名称
    - 主体公钥
    - CRL分发点
    - 扩展信息
    - 发行者签名

2. 功能

1. 保密性     : 只有收件人才能阅读信息。
2. 认证性     : 确认信息发送者的身份。
3. 完整性     : 信息在传递过程中不会被篡改。
4. 不可抵赖性 : 发送者不能否认已发送的信息。
5. 保证请求者与服务者的数据交换的安全性

3. 示例,使用openssl

OpenSSL是一个开源项目,为传输层安全(TLS)和安全套接字层(SSL)协议提供了强大的商业级和全功能工具包
1. OpenSSL的配置文件etc/pki/tls/openssl.cnf,下面有一些重要的配置,里面的一下目录和文件需要手动创建

name_opt        = ca_default            # Subject Name options      主题名称选项默认ca_default               
cert_opt        = ca_default            # Certificate field options 证书字段选项默认ca_default 
[ CA_default ]                                                      #默认配置

dir             = /etc/pki/CA           # Where everything is kept  #默认文件存放的目录,定义的一个dir变量
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       #伪随机数文件

x509_extensions = usr_cert              # The extentions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
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   #证书的默认有效期
default_crl_days= 30                    # how long before next CRL  # 吊销证书默认声明有效期
default_md      = sha256                # use SHA-256 by default    #默认的生成算法
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属性

# For the CA policy  
[ policy_match ]
countryName             = match     #证书申请时填写的国家,参数match必须CA同一个国家
stateOrProvinceName     = match     #客户机申请时填写省份
organizationName        = match     #机构名称
organizationalUnitName  = optional  #部门,参数optional可以和CA不同
commonName              = supplied  #通用名称
emailAddress            = optional  #邮箱

# For the 'anything' policy                           #另外一套CA属性,规则比较宽松
# 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

[ req ]                                                    #向CA证书签署发起注册请求相关属性
default_bits            = 2048
default_md              = sha256
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert

2. 创建自签证书
   1. 创建私钥
[root@CentOS7.3 ~]#(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem )
Generating RSA private key, 1024 bit long modulus          #密钥默认是1024位加密,也可以在命令尾部指定
.............++++++
........++++++
e is 65537 (0x10001)
[root@CentOS7.3 ~]#touch /etc/pki/CA/index.txt       #创建证书索引文件
[root@CentOS7.3 ~]#echo 01 > /etc/pki/CA/serial      #指定证书颁发的序号,序号必须是两位16进制数
[root@CentOS7.3 ~]#echo 01 > /etc/pki/CA/crlnumber   #指定证书吊销的序号
[root@CentOS7.3 ~]#touch /etc/pki/CA/private/.rand   #创建伪随机数文件
[root@CentOS7.3 ~]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem       
#创建自签证书 -new:生成新证书签署请求;-x509:生成自签格式证书,专用于创建私有CA时;-key:生成请求时用到的私有文件路径
# -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;-days:证书的有效时长,单位是day;
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN                         #填写CA所在的国家,格式为国家代码
State or Province Name (full name) []:xxxxxx                 #填写所在的州或省
Locality Name (eg, city) [Default City]:xxxxxx               #填写所在的城市
Organization Name (eg, company) [Default Company Ltd]:CentOS #机构名称
Organizational Unit Name (eg, section) []:CA                 #部门名称
Common Name (eg, your name or your server's hostname) []:    #通用名称,服务器的主机名
Email Address []:                                            #邮箱地址

[root@CentOS7.3 ~]#openssl x509 -in /etc/pki/CA/cacert.pem -noout -text     #查看生成的证书,信息有省略
Certificate:  
    Data: 
        Version: 3 (0x2)
        Serial Number: 11088094993200996766 (0x99e0d3a62988619e)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=HeNan, L=ZhengZhou, O=CAServer, OU=CA, CN=www.CAServer.com    #颁发机构的信息
        Validity
            Not Before: Jul 17 14:50:30 2017 GMT
            Not After : Jul 12 14:50:30 2037 GMT
        Subject: C=CN, ST=HeNan, L=ZhengZhou, O=CAServer, OU=CA, CN=www.CAServer.com   #申请者的信息
  1. 给客户端颁发证书
[root@CentOS6.9 ~]#(umask 077;openssl genrsa -out /etc/pki/tls/private/test.key)    #在客户端生成私钥
Generating RSA private key, 1024 bit long modulus
..............................++++++
.......++++++
e is 65537 (0x10001)
[root@CentOS6.9 ~]#openssl req -new -key /etc/pki/tls/private/test.key   -out /etc/pki/tls/test.pem   #生成证书申请文件
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN                            #国家,必须和CA相同
State or Province Name (full name) []:HeNan                     #州或者省份,必须和CA相同
Locality Name (eg, city) [Default City]:zz                      #城市,可以自定义
Organization Name (eg, company) [Default Company Ltd]:CAServer  #机构名必须和CA相同
Organizational Unit Name (eg, section) []:test                  #部门名称,可以自定义
Common Name (eg, your name or your server's hostname) []:test.com     #服务器名称
Email Address []:                                                  #邮箱地址可以忽略
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:admin                                   #设置密码加密
An optional company name []:admin
[root@CentOS6.9 ~]#scp /etc/pki/tls/test.pem root@192.168.166.130:/etc/pki/CA   #把他发送到CA服务器上
  
[root@CentOS7.3 CA]#openssl ca -in test.pem -out certs/test.crt -days 365
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: Jul 17 16:14:46 2017 GMT
            Not After : Jul 17 16:14:46 2018 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HeNan
            organizationName          = CAServer
            organizationalUnitName    = test
            commonName                = test.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                3B:F1:1B:6B:88:C2:17:35:19:2E:35:90:C6:22:6E:69:10:FF:B4:02
            X509v3 Authority Key Identifier: 
                keyid:60:3C:95:CB:A1:63:DC:0C:FC:1B:85:22:B3:4D:FD:FB:3B:5E:A4:B8

Certificate is to be certified until Jul 17 16:14:46 2018 GMT (365 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@CentOS7.3 CA]#cat serial
02
[root@CentOS7.3 CA]#cat index.txt
V   180717161446Z       01  unknown /C=CN/ST=HeNan/O=CAServer/OU=test/CN=test.com
[root@CentOS7.3 CA]#scp certs/test.crt root@192.168.166.129:/etc/pki/tls/certs/
[root@CentOS6.9 certs]#openssl x509 -in test.crt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=HeNan, L=ZhengZhou, O=CAServer, OU=CA, CN=www.CAServer.com
        Validity
            Not Before: Jul 17 16:14:46 2017 GMT
            Not After : Jul 17 16:14:46 2018 GMT
        Subject: C=CN, ST=HeNan, O=CAServer, OU=test, CN=test.com
        Subject Public Key Info:
  1. 吊销证书
[root@CentOS6.9 certs]#openssl x509 -in /etc/pki/tls/certs/test.crt -noout -serial -subject     #在客户主机上面查询证书的编号和信息,提供给CA
serial=01
subject= /C=CN/ST=HeNan/O=CAServer/OU=test/CN=test.com 

[root@CentOS7.3 CA]#cat index.txt                           #CA查看索引文件确认
R   180717161446Z   170717162332Z   01  unknown /C=CN/ST=HeNan/O=CAServer/OU=test/CN=test.com
[root@CentOS7.3 CA]#ll /etc/pki/CA/newcerts/01.pem                      #
-rw-r--r--. 1 root root 3077 Jul 18 00:14 /etc/pki/CA/newcerts/01.pem     #在签发证书之后会在/newcerts生成一个证书编号.pem文件
[root@CentOS7.3 CA]#cat /etc/pki/CA/newcerts/01.pem      #里面是证书的信息和申请者的公钥,下面的信息有省略
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=HeNan, L=ZhengZhou, O=CAServer, OU=CA, CN=www.CAServer.com
        Validity
            Not Before: Jul 17 16:14:46 2017 GMT
            Not After : Jul 17 16:14:46 2018 GMT
        Subject: C=CN, ST=HeNan, O=CAServer, OU=test, CN=test.com
[root@CentOS7.3 CA]#openssl -revoke /etc/pki/CA/newcerts/01.pem 
openssl:Error: '-revoke' is an invalid command.

[root@CentOS7.3 CA]#openssl ca -revoke /etc/pki/CA/newcerts/01.pem          #吊销证书
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated
[root@CentOS7.3 CA]#openssl ca -gencrl -out crl/test.crl                      #更新证书吊销列表
Using configuration from /etc/pki/tls/openssl.cnf
[root@CentOS7.3 CA]#openssl crl -in crl/test.crl -noout -text                  #查看证书吊销列表
Certificate Revocation List (CRL):
        Version 2 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: /C=CN/ST=HeNan/L=ZhengZhou/O=CAServer/OU=CA/CN=www.CAServer.com   #CA的信息
        Last Update: Jul 17 16:24:37 2017 GMT
        Next Update: Aug 16 16:24:37 2017 GMT
        CRL extensions:
            X509v3 CRL Number: 
                2                                                         
Revoked Certificates:
    Serial Number: 01                                                  #证书编号
        Revocation Date: Jul 17 16:23:32 2017 GMT

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容