数字证书介绍

一. 什么是数字证书

        在数字签名一节我们提到,使用数字签名存在的问题是公钥接收者无法确认公钥是否真的由发送者发送,如果公钥被中间人掉包,接收者也无从得知,数字证书就是为了解决这个问题的,所以数字证书又称为公钥证书,简称证书。它记录了公钥,并且有公钥对应的组织,签发证书的机构,证书序列号,密钥长度等,它由权威的认证机构颁发,接收者接收到证书之后,只要认证该证书确实是由权威机构颁发的,即可认为该证书对应的信息都是可信任的。

        权威的证书颁发机构称为 CA(Cerificate Autority),也叫证书授权中心,它负责管理和签发证书,比较著名的 CA 机构有美国的 verisign 公司,以及加拿大的 ENTRUST 公司等。

二. 证书使用的场景

        如上所示,Bob 想要对自己的公钥进行认证,生成数字证书以便 Alice 可以拿到 Bob 的公钥,不被中间人拦截掉包,流程如下。

1. Bob 使用非对称加密算法生成密钥对(公钥和私钥),然后将公钥发送给权威的证书颁发机构,证书颁发机构使用自己的私钥对 Bob 的公钥进行数字签名,生成对应的公钥证书

2. 当 Alice 想要给 Bob 发送消息时,首先获取 Bob 的公钥证书,然后使用权威认证机构的公钥验证证书的数字签名,确认接收到的公钥证书确实是可信任,拿出 Alice 的公钥(权威认证机构的公钥证书一般预装在操作系统中,我们也可以自己添加信任的公钥证书)

3. Alice 拿到 Bob 的公钥后,就可以给 Bob 发送消息,消息使用 Bob 公钥加密,只有 Bob 有私钥解密消息

三. 证书格式以及证书包含的信息

        X.509 是一种通用的证书格式,该证书结构使用 ASN.1 描述数据结构并进行编码,我们可以从 myssl 查看某些网站对应的证书,我们以 bilibili.com 的证书为例说明证书格式和包含的信息。

         如上是证书内容,证书包含的主要信息如下。

版本号 Version:证书规范的版本号,目前的版本号为 3,其值为 0x02

序列号 Serial Number:由证书颁发机构为每一个证书分配的序列号,可以唯一标识一个证书,可以追踪,撤销证书等

签名算法 Signature Algorithm:对公钥证书进行数字签名的方式

颁发者 Issuer:证书的颁发者,如 GlobalSign nv-sa

有效期 Validity:证书的有效期,包括起始和失效时间

主体 Subject:证书拥有者的标识信息,如组织名称,国家省份城市信息

主体的公钥信息 Subject Public Key Info:包括生成公钥的非对称加密算法,公钥长度

        我们还可以看到证书的信任链,*.bilibili.com 证书是由 GlobalSign RSA OV SSL CA 2018 机构办法的,而 GlobalSign RSA OV SSL CA 2018 是由 GlobalSign 机构信任的子机构。

四. 使用openssl生成自签名证书

        如果我们需要一个受信任的证书,我们可以向 CA 机构申请,如果只是需要做一些测试,我们可以使用 openssl 生成一个自签名的证书,使用之前你需要确保你已经安装了 openssl。

1. 在终端输入 openssl 进入命令交互界面

2. 使用 genrsa 生成一个 RSA 私钥,注意需要提供一个至少 4 位长度的密码

OpenSSL> genrsa -des3 -out server.key 2048

2048 表示密钥长度,-des3 表示使用对称加密算法 3DES 加密私钥文件,密钥为输入的密码

3. 去除私钥的密码(可选)

OpenSSL> rsa -in server.key -out server.key

4. 生成证书签名请求中间文件

OpenSSL> req -new -key server.key -out server.csr

输入该命令后会询问证书的信息

5. 生成自签名证书

OpenSSL> x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

数字证书生成doc命令 1.1生成服务端证书 开始-运行-CMD-在dos窗口执行下执行命令: keytool -genkey -v -alias tomcat -keyalg RSA -keystore C:/self-file/server/tomcat.keystore -dname "CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" -validity 3650 -storepass zljzlj -keypass zljzlj 说明: keytool 是JDK提供的证书生成工具,所有参数的用法参见keytool –help -genkey 创建新证书 -v 详细信息 -alias tomcat 以”tomcat”作为该证书的别名。这里可以根据需要修改 -keyalg RSA 指定算法 -keystore D:/self-file/server/tomcat.keystore 保存路径及文件名 -dname "CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" 证书发行者身份,这里的CN要与发布后的访问域名一致。但由于我们是自己发行的证书,如果在浏览器访问,仍然会有警告提示。 -validity 3650证书有效期,单位为天 -storepass zljzlj 证书的存取密码 -keypass zljzlj 证书的私钥 1.2 生成客户端证书 执行命令: keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore C:/self-file/client/client.p12 -dname "CN=client,OU=zlj,O=zlj,L=bj,ST=bj,C=CN" -validity 3650 -storepass client -keypass client 说明: 参数说明同上。这里的-dname 证书发行者身份可以和前面不同,到目前为止,这2个证书可以没有任何关系。下面要做的工作才是建立2者之间的信任关系。 1.3 导出客户端证书 执行命令: keytool ‐export ‐alias client ‐keystore D:/self-file/client/client.p12 ‐storetype PKCS12 ‐storepass client ‐rfc ‐file D:/self-file/client/client.cer 说明: -export 执行导出 -file 导出文件的文件路径 1.4 把客户端证书加入服务端证书信任列表 执行命令: keytool ‐import ‐alias client ‐v ‐file D:/self-file/client/client.cer ‐keystore D:/self-file/server/tomcat.keystore ‐storepass zljzl 说明: 参数说明同前。这里提供的密码是服务端证书的存取密码。 1.5 导出服务端证书 执行命令: keytool -export -alias tomcat -keystore D:/self-file/server/tomcat.keystore -storepass zljzlj -rfc -file D:/self-file/server/tomcat.cer 说明: 把服务端证书导出。这里提供的密码也是服务端证书的密码。 1.6 生成客户端信任列表 执行命令: keytool -import -file D:/self-file/server/tomcat.cer -storepass zljzlj -keystore D:/self-file/client/client.truststore -alias tomcat –noprompt 说明: 让客户端信任服务端证书 2. 配置服务端为只允许HTTPS连接 2.1 配置Tomcat 目录下的/conf/server.xml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椛茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值