1、为什么
在说清楚数字证书是什么之前,先要搞清楚为什么要有数字证书,或者说数字证书的出现是为了解决什么问题。
请看以下通信流程:
1.1、使用数字签名技术防止信息伪造
1.1.1、发送明文信息
小灰灰给懒羊羊发了一条信息,约懒羊羊去玩。
1.1.2、黑客对明文信息的拦截篡改
但我们知道,网络通信是不安全。如果直接发送明文信息,很容易被黑客拦截篡改。
1.1.3、使用非对称加密算法对明文加密
因此,网络通信中,我们不能直接发送明文信息。而是使用非对称加密技术对明文进行加密后再发送。
懒羊羊生成一对密钥,将公钥发布出去(这里公钥任何人都可以拿到),私钥自己保留。 小灰灰用懒羊羊的公钥进行加密,将信息发送出去,由于私钥只有懒羊羊自己拥有,所以即使黑客拦截信息,也无法解密出信息内容。
1.1.4、黑客对信息的拦截和伪造
步骤3中存在一个问题。虽然黑客无法解密出小灰灰的信息内容,但由于黑客拥有懒羊羊的公钥,因此,黑客完全可以对小灰灰的信息拦截后,自己重新写份信息加密后,发给懒羊羊。
1.1.5、使用数字签名技术确认身份
步骤4中,懒羊羊是无法辨认信息到底是小灰灰发的还是黑客发的。因此接下来的问题就是如何确认信息确实是小灰灰发送的。
小灰灰生成一对密钥,将公钥发布出去(上面懒羊羊发布的公钥是为了对信息加密,而小灰灰发布的公钥是为了验证自己的身份)
首先小灰灰使用懒羊羊的公钥对信息加密,生成密文。然后使用摘要算法对原文作摘要,再使用自己的私钥对摘要作签名。把密文和摘要一起发送给懒羊羊。懒羊羊拿到信息后,先使用自己的私钥对密文解密,得到明文信息(这里已经拿到明文了,下面的操作是为了验证信息确实是小灰灰发送的)。
懒羊羊再对解密出来的明文作摘要,生成摘要A,再使用小灰灰的公钥,对签名进行解签,得到摘要B。最后只需要对摘要A和摘要B进行比对,如果相同,则证明信息确实是小灰灰发送的。
1.1.6、数字签名技术可以防止黑客伪造身份
如果黑客拦截信息并重新伪造一份信息,使用自己的私钥作了签名,将伪造的信息和签名值发送给懒羊羊,由于黑客是用自己的私钥进行签名,懒羊羊在验签时用小灰灰的公钥是解不出来的,因此可以防止黑客伪造身份。
1.2、使用数字证书防止公钥伪造
使用数字签名技术发送信息,似乎天衣无缝了。但我们忽略了一个很重要的问题,就是验证身份时,需要用到小灰灰的公钥。公钥在发布的时候是公开的,黑客如果在小灰灰发布公钥时,拦截下来,将自己的公钥发布出去,懒羊羊拿到黑客的公钥。反而会将黑客发送来的信息当成小灰灰的信息,而把小灰灰发送的信息当成黑客的信息。
小灰灰发布公钥本来是想来验证自己的身份,但发布公钥的时候,却无法确认公钥是自己发送的。问题到这似乎无解了。
1.2.1、数字证书防公钥伪造
接下来就需要数字证书登场了。至此,我们也搞清楚了数字证书的作用,就是为了防止小灰灰的公钥被伪造。
小灰灰需要找到一个CA机构(CA是负责签发证书、认证证书、管理已颁发证书的机关),CA将证书的颁布机构、有效期、小灰灰的公钥、持有者等信息用 CA 的私钥进行签名,将签名值和这些信息打包起来(这就是数字证书)颁发给小灰灰。如果需要通信,小灰灰将自己的证书交给懒羊羊。懒羊羊拿出数字证书中的签名值,用CA中心的公钥进行解签(CA中心的公钥是无法篡改的),得到摘要A,再对证书中的信息作摘要,得到摘要B。如果两者相等,说明证书未被篡改过,因此就可以确认公钥确实是小灰灰的。
1.2.2、黑客拦截数字证书
如果黑客拦截下小灰灰的数字证书,对证书中小灰灰的公钥信息进行篡改,并且使用自己的私钥对信息重新签名,把证书发送给懒羊羊,懒羊羊拿到证书后,使用CA的公钥对签名值进行解签,是解不出来的。因此可以判断,证书中的公钥信息已经被篡改,不能使用了,停止通信。
1.3、为什么要使用数字证书
通过以上通信过程,我们就可以很清楚的知道。数字证书的出现,就是为了解决公钥被篡改和伪造的问题。
2、是什么
2.1、数字证书是什么
接下来就说下,数字证书是什么。数字证书就是一个包含公钥,身份信息以及数字签名值的一个文件。
数字证书应用是非常广泛的,我们可以找一个证书看一下。
打开百度,可以看到这有一个钥匙图标
点开就可以打开百度的数字证书
在常规界面可以看到,证书的颁发机构,使用者,有效期。百度使用的证书是GlobalSign颁发的。
在详细信息界面就可以看到更多信息
可以看下,淘宝使用的证书也是GlobalSign颁发的。
2.2、CA机构是什么
CA机构是负责签发和管理数字证书,且具有权威性和公正性的第三方信任机构,它的作用就像我们现实生活中颁发证件的公司。你把数字证书理解为你的毕业证书,那CA机构就是给你颁发毕业证的教育局。只有教育局给你颁发的毕业证,大家才是认可的,你从电线杆上的小广告办的毕业证,那大家肯定是不认可的。
百度使用的证书就是GlobalSign颁发的,它是全球主流的认证机构之一。
可以看下它的主页ssl数字证书,通配符证书,文档签名,代码签名购买-环玺信息科技(上海)有限公司 (globalsign.cn)https://www.globalsign.cn/
![](https://img-blog.csdnimg.cn/d2edba09e3404036aced609843c630f1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn6I2J5Y6f55qE5bCP54Gw54Gw,size_20,color_FFFFFF,t_70,g_se,x_16)
3、怎么做
那么我们自己如何去获取一个证书。自己测试肯定不能从CA机构去申请,这个是要花钱的,而且也不便宜。我们可以使用openssl工具,去模拟CA机构给自己颁发一个证书。
3.1、openssl简介
OpenSSL 是一个开源且功能强大的包含丰富的密码算法和 SSL/TLS 协议的库,主要包括的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供了多用途的命令行工具。使用 c 语言编写,跨平台性能好,支持 Linux、Windows、BDS、Mac、VMS 等平台。
Openssl由3部分组成
- The Crypto library(密码学算法库)
- The SSL library(SSL/TLS协议库)
- Command line tool(命令行工具)
Openssl源码地址 GitHub - openssl/openssl: TLS/SSL and crypto libraryhttps://github.com/openssl/openssl
3.2、安装openssl
ubuntu下安装openssl比较简单,直接执行以下命令
sudo apt-get install openssl
sudo apt-get install libssl-dev
windows和linux下都是可以安装的,你也可以使用源码安装。
其他安装方式可以自行百度,这里就不过多介绍了。
安装成功后,我们就可以使用openssl命令行工具去生成证书。
3.3、生成一个虚拟的CA证书
3.3.1、生成RSA私钥
#-out指定私钥的输出文件, 数字1024指定私钥长度
openssl genrsa -out ca.key 1024
执行命令后,就会在当前目录下生成一个ca.key文件,其中记录RSA私钥。
lng@ubuntu:~/CSDN$ openssl genrsa -out ca.key 1024
Generating RSA private key, 1024 bit long modulus (2 primes)
............+++++
................................................................................+++++
e is 65537 (0x010001)
lng@ubuntu:~/CSDN$ ls
ca.key
私钥是base64编码的内容,我们可以直接查看
lng@ubuntu:~/CSDN$ cat ca.key
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDDu6lkJcarc1lmBebpPmluRTf6awjDibqU/zTDBmQCBhwnQi3P
LSZ12YFA8vo7DOKhABztZXNxEV08WFgqPB43GhJohYDeDybAwXukKSxmJab5ekvr
rNr4szExWCNb2Id1ZOmkbjakHwZStwd54haOa395xVtl5xCZUn4t0K82uwIDAQAB
AoGAFyAR6FoqOdF8C3jBCmesTzHwZi7FL00TdU0dr7kOkcqlAuJnxSWBeMUE52aN
t/JSyFDaGhY1aHNzv5B0gjDuJMGErAdBaTIXTXc25AOTgMhW/RT1SUzLhZh2IfMN
/wSTRlO3trU+mzumY2DbdFG5e4CYv9zRUpRqjnNT/w3Md3ECQQDqrk54+a3acZcC
eXioouIVb4VZ3L6xuSM55jdFw+/XFDADpPIBMiLgy7xwIrwQEGfx5uCO5H5FJ+UN
j2ccB4zJAkEA1YOXhac16Lblnv4Ygk4wyPmt/LcLUjDMUO7aKR8MLDkVvNlc/qVW
FqqAWT+fmICjUJ+xEJorQM0RkwsybckdYwJASGJXBe1M+FGM2FCLLMiAn0f0g5EY
qEyIVvVxGu2ibl5lqNoZYtEJ/PgaOSQdiX7l8LDblndXkxEJDzOqA/U4MQJBAMni
HhAa1adP4HfgDC6RXiF5q6BrNwIk79uKrK77E1hxNXOWFw8UJ/1QhAFfXjklUMZ3
6EUpcMJZ5Ecj7C/QXL8CQFBpVXikMCE7WwAkNlyOO97cVrLOkDcopi5W1WdfGzt4
uWF56WpDo9ZJb/eevGUqcIa304nxnV80g+myJlRVbHI=
-----END RSA PRIVATE KEY-----
3.3.2、生成ca证书
openssl req -new -x509 -key ca.key -out ca.crt -days 365
输入命令后,我们需要分别输入以下信息
lng@ubuntu:~/CSDN$ openssl req -new -x509 -key ca.key -out ca.crt -days 365
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) [AU]:CH #国家名
State or Province Name (full name) [Some-State]:ShanXi #省份名
Locality Name (eg, city) []:XiAn #城市名
Organization Name (eg, company) [Internet Widgits Pty Ltd]:csdn #公司名
Organizational Unit Name (eg, section) []:csdn #部门
Common Name (e.g. server FQDN or YOUR name) []:CA
Email Address []:
lng@ubuntu:~/CSDN$ ls
ca.crt ca.key
lng@ubuntu:~/CSDN$
输入以上信息后,就会生成一个ca.crt的证书文件。
使用以下命令可以查看证书内容
lng@ubuntu:~/CSDN$ openssl x509 -noout -text -in ca.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
17:55:d5:5e:1c:bb:92:cc:09:08:64:c7:1b:b0:e5:27:f6:76:e6:31
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = CH, ST = ShanXi, L = XiAn, O = csdn, OU = csdn, CN = CA
Validity
Not Before: Jan 1 10:30:58 2022 GMT
Not After : Jan 1 10:30:58 2023 GMT
Subject: C = CH, ST = ShanXi, L = XiAn, O = csdn, OU = csdn, CN = CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (1024 bit)
Modulus:
00:c3:bb:a9:64:25:c6:ab:73:59:66:05:e6:e9:3e:
69:6e:45:37:fa:6b:08:c3:89:ba:94:ff:34:c3:06:
64:02:06:1c:27:42:2d:cf:2d:26:75:d9:81:40:f2:
fa:3b:0c:e2:a1:00:1c:ed:65:73:71:11:5d:3c:58:
58:2a:3c:1e:37:1a:12:68:85:80:de:0f:26:c0:c1:
7b:a4:29:2c:66:25:a6:f9:7a:4b:eb:ac:da:f8:b3:
31:31:58:23:5b:d8:87:75:64:e9:a4:6e:36:a4:1f:
06:52:b7:07:79:e2:16:8e:6b:7f:79:c5:5b:65:e7:
10:99:52:7e:2d:d0:af:36:bb
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
FB:C8:7A:FA:ED:91:C1:60:0A:54:A4:22:F4:6D:BC:9C:47:DE:76:AF
X509v3 Authority Key Identifier:
keyid:FB:C8:7A:FA:ED:91:C1:60:0A:54:A4:22:F4:6D:BC:9C:47:DE:76:AF
X509v3 Basic Constraints: critical
CA:TRUE
Signature Algorithm: sha256WithRSAEncryption
0c:4c:be:50:27:dc:fe:b8:dc:cf:f6:9f:85:26:ec:25:34:d6:
3f:54:32:a7:16:78:11:ff:28:4a:c9:43:db:22:c0:ff:8f:fb:
54:1f:ab:8c:3d:a4:21:bc:a7:ea:88:32:c9:31:16:49:96:86:
7a:b2:c3:cf:50:25:ee:bd:dd:61:00:97:88:86:10:4a:93:e0:
16:eb:ce:89:77:c3:f0:fc:4e:73:9f:7f:82:fa:76:52:1f:4d:
a7:a7:5c:fe:f6:b5:5a:a5:4b:2d:19:e1:80:b8:63:02:b2:2f:
83:5b:1b:8d:6a:9e:93:3e:70:9b:bc:4d:bd:24:ae:ed:f6:52:
2b:65
lng@ubuntu:~/CSDN$
证书内容简介
#数据段
Data
Version #版本
Serial Number #序列号
Signature Algorithm #签名算法
Issuer #颁发者
Subject #使用者
Subject Public Key Info #公钥信息
#数据段的签名算法和签名值
Signature Algorithm
3.4、使用CA证书签发网站证书
3.4.1、生成密钥
openssl genrsa -out server.key 1024
3.4.2、生成证书请求文件
openssl req -new -key server.key -out server.csr
3.4.3、使用根证书签发网站证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -days 365
到这里,我们就成功构造出一张由模拟CA机构签发的一张数字证书server.crt
使用命令行查看证书内容
openssl x509 -noout -text -in server.crt
lng@ubuntu:~/CSDN$ openssl x509 -noout -text -in server.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 1 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = CH, ST = ShanXi, L = XiAn, O = csdn, OU = csdn, CN = CA
Validity
Not Before: Jan 1 11:40:40 2022 GMT
Not After : Jan 1 11:40:40 2023 GMT
Subject: C = CH, ST = ShanXi, L = Xian, O = dacaoyuan, OU = dacaoyuan, CN = xll
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (1024 bit)
Modulus:
00:c2:82:90:cd:dc:77:3a:10:d0:50:f0:f5:71:f3:
bc:30:df:02:42:4d:21:cb:34:f1:7e:ca:c8:de:ed:
3e:49:36:3f:98:48:05:7f:3a:73:22:89:91:53:76:
c1:3b:5f:48:a6:03:7c:15:04:01:16:ab:26:7e:3f:
17:a4:74:90:12:d2:3f:e0:84:d4:0b:d2:f0:3c:8e:
a9:4c:e3:f4:74:1d:c0:71:3e:8b:85:4b:66:8f:bb:
1c:61:2e:40:2d:e8:05:ec:1f:ea:8d:d7:66:3a:2d:
83:5d:5a:69:1a:e7:69:9f:01:2a:a6:98:e3:53:eb:
ef:19:33:df:33:9e:67:a6:df
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
71:c0:e7:13:63:2a:b7:44:15:d8:a2:7c:15:82:21:70:74:ae:
1f:93:24:d5:a1:6c:eb:ac:32:ed:ea:aa:d2:64:f4:5b:59:7f:
85:1f:1e:9f:a3:d9:b7:9d:80:80:44:5b:4b:fa:f3:b4:ae:ff:
11:c0:23:20:e2:60:58:c3:ba:d8:36:b7:6a:7d:97:f1:2b:50:
45:4d:c9:20:1b:01:34:88:5e:be:5c:ce:54:66:1f:72:e7:a9:
1b:96:41:48:14:f7:e1:2b:89:93:45:e3:a5:7a:5d:f1:43:d7:
8b:d5:90:07:d6:20:3b:bb:47:ff:92:20:36:8d:5e:16:89:17:
e8:12
版权归原作者 大草原的小灰灰 所有, 如有侵权,请联系我们删除。