在互联网中数据被非法窃取、篡改经常发生,那么我们该如何来防范这些安全问题呢。下面我将介绍几种在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
[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) 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] #有效期
- 查看密钥
[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 ~]#
- 发布公钥
[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Ѥbq+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Ѥbq+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 #申请者的信息
- 给客户端颁发证书
[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:
- 吊销证书
[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