0


数字证书简介

1、为什么

  1. 在说清楚数字证书是什么之前,先要搞清楚为什么要有数字证书,或者说数字证书的出现是为了解决什么问题。
  2. 请看以下通信流程:

1.1、使用数字签名技术防止信息伪造

1.1.1、发送明文信息

  1. 小灰灰给懒羊羊发了一条信息,约懒羊羊去玩。

1.1.2、黑客对明文信息的拦截篡改

  1. 但我们知道,网络通信是不安全。如果直接发送明文信息,很容易被黑客拦截篡改。

1.1.3、使用非对称加密算法对明文加密

  1. 因此,网络通信中,我们不能直接发送明文信息。而是使用非对称加密技术对明文进行加密后再发送。
  2. 懒羊羊生成一对密钥,将公钥发布出去(这里公钥任何人都可以拿到),私钥自己保留。 小灰灰用懒羊羊的公钥进行加密,将信息发送出去,由于私钥只有懒羊羊自己拥有,所以即使黑客拦截信息,也无法解密出信息内容。

1.1.4、黑客对信息的拦截和伪造

  1. 步骤3中存在一个问题。虽然黑客无法解密出小灰灰的信息内容,但由于黑客拥有懒羊羊的公钥,因此,黑客完全可以对小灰灰的信息拦截后,自己重新写份信息加密后,发给懒羊羊。

1.1.5、使用数字签名技术确认身份

  1. 步骤4中,懒羊羊是无法辨认信息到底是小灰灰发的还是黑客发的。因此接下来的问题就是如何确认信息确实是小灰灰发送的。
  2. 小灰灰生成一对密钥,将公钥发布出去(上面懒羊羊发布的公钥是为了对信息加密,而小灰灰发布的公钥是为了验证自己的身份)
  3. 首先小灰灰使用懒羊羊的公钥对信息加密,生成密文。然后使用摘要算法对原文作摘要,再使用自己的私钥对摘要作签名。把密文和摘要一起发送给懒羊羊。懒羊羊拿到信息后,先使用自己的私钥对密文解密,得到明文信息(这里已经拿到明文了,下面的操作是为了验证信息确实是小灰灰发送的)。
  4. 懒羊羊再对解密出来的明文作摘要,生成摘要A,再使用小灰灰的公钥,对签名进行解签,得到摘要B。最后只需要对摘要A和摘要B进行比对,如果相同,则证明信息确实是小灰灰发送的。

1.1.6、数字签名技术可以防止黑客伪造身份

  1. 如果黑客拦截信息并重新伪造一份信息,使用自己的私钥作了签名,将伪造的信息和签名值发送给懒羊羊,由于黑客是用自己的私钥进行签名,懒羊羊在验签时用小灰灰的公钥是解不出来的,因此可以防止黑客伪造身份。

1.2、使用数字证书防止公钥伪造

  1. 使用数字签名技术发送信息,似乎天衣无缝了。但我们忽略了一个很重要的问题,就是验证身份时,需要用到小灰灰的公钥。公钥在发布的时候是公开的,黑客如果在小灰灰发布公钥时,拦截下来,将自己的公钥发布出去,懒羊羊拿到黑客的公钥。反而会将黑客发送来的信息当成小灰灰的信息,而把小灰灰发送的信息当成黑客的信息。
  2. 小灰灰发布公钥本来是想来验证自己的身份,但发布公钥的时候,却无法确认公钥是自己发送的。问题到这似乎无解了。

1.2.1、数字证书防公钥伪造

  1. 接下来就需要数字证书登场了。至此,我们也搞清楚了数字证书的作用,就是为了防止小灰灰的公钥被伪造。

  1. 小灰灰需要找到一个CA机构(CA是负责签发证书、认证证书、管理已颁发证书的机关),CA将证书的颁布机构、有效期、小灰灰的公钥、持有者等信息用 CA 的私钥进行签名,将签名值和这些信息打包起来(这就是数字证书)颁发给小灰灰。如果需要通信,小灰灰将自己的证书交给懒羊羊。懒羊羊拿出数字证书中的签名值,用CA中心的公钥进行解签(CA中心的公钥是无法篡改的),得到摘要A,再对证书中的信息作摘要,得到摘要B。如果两者相等,说明证书未被篡改过,因此就可以确认公钥确实是小灰灰的。

1.2.2、黑客拦截数字证书

  1. 如果黑客拦截下小灰灰的数字证书,对证书中小灰灰的公钥信息进行篡改,并且使用自己的私钥对信息重新签名,把证书发送给懒羊羊,懒羊羊拿到证书后,使用CA的公钥对签名值进行解签,是解不出来的。因此可以判断,证书中的公钥信息已经被篡改,不能使用了,停止通信。

1.3、为什么要使用数字证书

  1. 通过以上通信过程,我们就可以很清楚的知道。数字证书的出现,就是为了解决公钥被篡改和伪造的问题。

2、是什么

2.1、数字证书是什么

  1. 接下来就说下,数字证书是什么。数字证书就是一个包含公钥,身份信息以及数字签名值的一个文件。
  2. 数字证书应用是非常广泛的,我们可以找一个证书看一下。
  3. 打开百度,可以看到这有一个钥匙图标

点开就可以打开百度的数字证书

在常规界面可以看到,证书的颁发机构,使用者,有效期。百度使用的证书是GlobalSign颁发的。

在详细信息界面就可以看到更多信息

  1. 可以看下,淘宝使用的证书也是GlobalSign颁发的。

2.2、CA机构是什么

  1. CA机构是负责签发和管理数字证书,且具有权威性和公正性的第三方信任机构,它的作用就像我们现实生活中颁发证件的公司。你把数字证书理解为你的毕业证书,那CA机构就是给你颁发毕业证的教育局。只有教育局给你颁发的毕业证,大家才是认可的,你从电线杆上的小广告办的毕业证,那大家肯定是不认可的。
  2. 百度使用的证书就是GlobalSign颁发的,它是全球主流的认证机构之一。
  3. 可以看下它的主页ssl数字证书,通配符证书,文档签名,代码签名购买-环玺信息科技(上海)有限公司 (globalsign.cn)https://www.globalsign.cn/
  4. ![](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、怎么做

  1. 那么我们自己如何去获取一个证书。自己测试肯定不能从CA机构去申请,这个是要花钱的,而且也不便宜。我们可以使用openssl工具,去模拟CA机构给自己颁发一个证书。

3.1、openssl简介

  1. OpenSSL 是一个开源且功能强大的包含丰富的密码算法和 SSL/TLS 协议的库,主要包括的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供了多用途的命令行工具。使用 c 语言编写,跨平台性能好,支持 LinuxWindowsBDSMacVMS 等平台。
  2. Openssl3部分组成
  3. - The Crypto library(密码学算法库)
  4. - The SSL library(SSL/TLS协议库)
  5. - Command line tool(命令行工具)
  6. Openssl源码地址 GitHub - openssl/openssl: TLS/SSL and crypto libraryhttps://github.com/openssl/openssl

3.2、安装openssl

  1. ubuntu下安装openssl比较简单,直接执行以下命令
  1. sudo apt-get install openssl
  2. sudo apt-get install libssl-dev
  1. windowslinux下都是可以安装的,你也可以使用源码安装。
  2. 其他安装方式可以自行百度,这里就不过多介绍了。
  3. 安装成功后,我们就可以使用openssl命令行工具去生成证书。

3.3、生成一个虚拟的CA证书

3.3.1、生成RSA私钥

  1. #-out指定私钥的输出文件, 数字1024指定私钥长度
  2. openssl genrsa -out ca.key 1024
  1. 执行命令后,就会在当前目录下生成一个ca.key文件,其中记录RSA私钥。
  1. lng@ubuntu:~/CSDN$ openssl genrsa -out ca.key 1024
  2. Generating RSA private key, 1024 bit long modulus (2 primes)
  3. ............+++++
  4. ................................................................................+++++
  5. e is 65537 (0x010001)
  6. lng@ubuntu:~/CSDN$ ls
  7. ca.key
  1. 私钥是base64编码的内容,我们可以直接查看
  1. lng@ubuntu:~/CSDN$ cat ca.key
  2. -----BEGIN RSA PRIVATE KEY-----
  3. MIICXAIBAAKBgQDDu6lkJcarc1lmBebpPmluRTf6awjDibqU/zTDBmQCBhwnQi3P
  4. LSZ12YFA8vo7DOKhABztZXNxEV08WFgqPB43GhJohYDeDybAwXukKSxmJab5ekvr
  5. rNr4szExWCNb2Id1ZOmkbjakHwZStwd54haOa395xVtl5xCZUn4t0K82uwIDAQAB
  6. AoGAFyAR6FoqOdF8C3jBCmesTzHwZi7FL00TdU0dr7kOkcqlAuJnxSWBeMUE52aN
  7. t/JSyFDaGhY1aHNzv5B0gjDuJMGErAdBaTIXTXc25AOTgMhW/RT1SUzLhZh2IfMN
  8. /wSTRlO3trU+mzumY2DbdFG5e4CYv9zRUpRqjnNT/w3Md3ECQQDqrk54+a3acZcC
  9. eXioouIVb4VZ3L6xuSM55jdFw+/XFDADpPIBMiLgy7xwIrwQEGfx5uCO5H5FJ+UN
  10. j2ccB4zJAkEA1YOXhac16Lblnv4Ygk4wyPmt/LcLUjDMUO7aKR8MLDkVvNlc/qVW
  11. FqqAWT+fmICjUJ+xEJorQM0RkwsybckdYwJASGJXBe1M+FGM2FCLLMiAn0f0g5EY
  12. qEyIVvVxGu2ibl5lqNoZYtEJ/PgaOSQdiX7l8LDblndXkxEJDzOqA/U4MQJBAMni
  13. HhAa1adP4HfgDC6RXiF5q6BrNwIk79uKrK77E1hxNXOWFw8UJ/1QhAFfXjklUMZ3
  14. 6EUpcMJZ5Ecj7C/QXL8CQFBpVXikMCE7WwAkNlyOO97cVrLOkDcopi5W1WdfGzt4
  15. uWF56WpDo9ZJb/eevGUqcIa304nxnV80g+myJlRVbHI=
  16. -----END RSA PRIVATE KEY-----

3.3.2、生成ca证书

  1. openssl req -new -x509 -key ca.key -out ca.crt -days 365

输入命令后,我们需要分别输入以下信息

  1. lng@ubuntu:~/CSDN$ openssl req -new -x509 -key ca.key -out ca.crt -days 365
  2. You are about to be asked to enter information that will be incorporated
  3. into your certificate request.
  4. What you are about to enter is what is called a Distinguished Name or a DN.
  5. There are quite a few fields but you can leave some blank
  6. For some fields there will be a default value,
  7. If you enter '.', the field will be left blank.
  8. -----
  9. Country Name (2 letter code) [AU]:CH #国家名
  10. State or Province Name (full name) [Some-State]:ShanXi #省份名
  11. Locality Name (eg, city) []:XiAn #城市名
  12. Organization Name (eg, company) [Internet Widgits Pty Ltd]:csdn #公司名
  13. Organizational Unit Name (eg, section) []:csdn #部门
  14. Common Name (e.g. server FQDN or YOUR name) []:CA
  15. Email Address []:
  16. lng@ubuntu:~/CSDN$ ls
  17. ca.crt ca.key
  18. lng@ubuntu:~/CSDN$

输入以上信息后,就会生成一个ca.crt的证书文件。

使用以下命令可以查看证书内容

  1. lng@ubuntu:~/CSDN$ openssl x509 -noout -text -in ca.crt
  2. Certificate:
  3. Data:
  4. Version: 3 (0x2)
  5. Serial Number:
  6. 17:55:d5:5e:1c:bb:92:cc:09:08:64:c7:1b:b0:e5:27:f6:76:e6:31
  7. Signature Algorithm: sha256WithRSAEncryption
  8. Issuer: C = CH, ST = ShanXi, L = XiAn, O = csdn, OU = csdn, CN = CA
  9. Validity
  10. Not Before: Jan 1 10:30:58 2022 GMT
  11. Not After : Jan 1 10:30:58 2023 GMT
  12. Subject: C = CH, ST = ShanXi, L = XiAn, O = csdn, OU = csdn, CN = CA
  13. Subject Public Key Info:
  14. Public Key Algorithm: rsaEncryption
  15. RSA Public-Key: (1024 bit)
  16. Modulus:
  17. 00:c3:bb:a9:64:25:c6:ab:73:59:66:05:e6:e9:3e:
  18. 69:6e:45:37:fa:6b:08:c3:89:ba:94:ff:34:c3:06:
  19. 64:02:06:1c:27:42:2d:cf:2d:26:75:d9:81:40:f2:
  20. fa:3b:0c:e2:a1:00:1c:ed:65:73:71:11:5d:3c:58:
  21. 58:2a:3c:1e:37:1a:12:68:85:80:de:0f:26:c0:c1:
  22. 7b:a4:29:2c:66:25:a6:f9:7a:4b:eb:ac:da:f8:b3:
  23. 31:31:58:23:5b:d8:87:75:64:e9:a4:6e:36:a4:1f:
  24. 06:52:b7:07:79:e2:16:8e:6b:7f:79:c5:5b:65:e7:
  25. 10:99:52:7e:2d:d0:af:36:bb
  26. Exponent: 65537 (0x10001)
  27. X509v3 extensions:
  28. X509v3 Subject Key Identifier:
  29. FB:C8:7A:FA:ED:91:C1:60:0A:54:A4:22:F4:6D:BC:9C:47:DE:76:AF
  30. X509v3 Authority Key Identifier:
  31. keyid:FB:C8:7A:FA:ED:91:C1:60:0A:54:A4:22:F4:6D:BC:9C:47:DE:76:AF
  32. X509v3 Basic Constraints: critical
  33. CA:TRUE
  34. Signature Algorithm: sha256WithRSAEncryption
  35. 0c:4c:be:50:27:dc:fe:b8:dc:cf:f6:9f:85:26:ec:25:34:d6:
  36. 3f:54:32:a7:16:78:11:ff:28:4a:c9:43:db:22:c0:ff:8f:fb:
  37. 54:1f:ab:8c:3d:a4:21:bc:a7:ea:88:32:c9:31:16:49:96:86:
  38. 7a:b2:c3:cf:50:25:ee:bd:dd:61:00:97:88:86:10:4a:93:e0:
  39. 16:eb:ce:89:77:c3:f0:fc:4e:73:9f:7f:82:fa:76:52:1f:4d:
  40. a7:a7:5c:fe:f6:b5:5a:a5:4b:2d:19:e1:80:b8:63:02:b2:2f:
  41. 83:5b:1b:8d:6a:9e:93:3e:70:9b:bc:4d:bd:24:ae:ed:f6:52:
  42. 2b:65
  43. lng@ubuntu:~/CSDN$

证书内容简介

  1. #数据段
  2. Data
  3. Version #版本
  4. Serial Number #序列号
  5. Signature Algorithm #签名算法
  6. Issuer #颁发者
  7. Subject #使用者
  8. Subject Public Key Info #公钥信息
  9. #数据段的签名算法和签名值
  10. Signature Algorithm

3.4、使用CA证书签发网站证书

3.4.1、生成密钥

  1. openssl genrsa -out server.key 1024

3.4.2、生成证书请求文件

  1. openssl req -new -key server.key -out server.csr

3.4.3、使用根证书签发网站证书

  1. openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -days 365
  1. 到这里,我们就成功构造出一张由模拟CA机构签发的一张数字证书server.crt
  2. 使用命令行查看证书内容
  1. openssl x509 -noout -text -in server.crt
  1. lng@ubuntu:~/CSDN$ openssl x509 -noout -text -in server.crt
  2. Certificate:
  3. Data:
  4. Version: 1 (0x0)
  5. Serial Number: 1 (0x1)
  6. Signature Algorithm: sha256WithRSAEncryption
  7. Issuer: C = CH, ST = ShanXi, L = XiAn, O = csdn, OU = csdn, CN = CA
  8. Validity
  9. Not Before: Jan 1 11:40:40 2022 GMT
  10. Not After : Jan 1 11:40:40 2023 GMT
  11. Subject: C = CH, ST = ShanXi, L = Xian, O = dacaoyuan, OU = dacaoyuan, CN = xll
  12. Subject Public Key Info:
  13. Public Key Algorithm: rsaEncryption
  14. RSA Public-Key: (1024 bit)
  15. Modulus:
  16. 00:c2:82:90:cd:dc:77:3a:10:d0:50:f0:f5:71:f3:
  17. bc:30:df:02:42:4d:21:cb:34:f1:7e:ca:c8:de:ed:
  18. 3e:49:36:3f:98:48:05:7f:3a:73:22:89:91:53:76:
  19. c1:3b:5f:48:a6:03:7c:15:04:01:16:ab:26:7e:3f:
  20. 17:a4:74:90:12:d2:3f:e0:84:d4:0b:d2:f0:3c:8e:
  21. a9:4c:e3:f4:74:1d:c0:71:3e:8b:85:4b:66:8f:bb:
  22. 1c:61:2e:40:2d:e8:05:ec:1f:ea:8d:d7:66:3a:2d:
  23. 83:5d:5a:69:1a:e7:69:9f:01:2a:a6:98:e3:53:eb:
  24. ef:19:33:df:33:9e:67:a6:df
  25. Exponent: 65537 (0x10001)
  26. Signature Algorithm: sha256WithRSAEncryption
  27. 71:c0:e7:13:63:2a:b7:44:15:d8:a2:7c:15:82:21:70:74:ae:
  28. 1f:93:24:d5:a1:6c:eb:ac:32:ed:ea:aa:d2:64:f4:5b:59:7f:
  29. 85:1f:1e:9f:a3:d9:b7:9d:80:80:44:5b:4b:fa:f3:b4:ae:ff:
  30. 11:c0:23:20:e2:60:58:c3:ba:d8:36:b7:6a:7d:97:f1:2b:50:
  31. 45:4d:c9:20:1b:01:34:88:5e:be:5c:ce:54:66:1f:72:e7:a9:
  32. 1b:96:41:48:14:f7:e1:2b:89:93:45:e3:a5:7a:5d:f1:43:d7:
  33. 8b:d5:90:07:d6:20:3b:bb:47:ff:92:20:36:8d:5e:16:89:17:
  34. e8:12
标签: 网络安全

本文转载自: https://blog.csdn.net/new9232/article/details/122251502
版权归原作者 大草原的小灰灰 所有, 如有侵权,请联系我们删除。

“数字证书简介”的评论:

还没有评论