数字证书


前言

本文主要介绍什么是数字证书和如何使用keytool工具常用命令的使用。最后构建自签名证书。


一、什么是数字证书

数字证书(Digital Certificate )也称电子证书,用于识别网络中用户(计算机)身份,该凭据需要由数字证书颁发机构(Certificate Authority,CA)签发。只有经过CA签发的证书在网络中才具备可认证性。
VeriSignGerTrustThawte是国际权威数字证书颁发认证机构的三巨头。
我国在每个省,直辖市设置有国家权威的数字证书签发机构,如北京北京市数字证书认证中心。
在这里插入图片描述通过使用CA颁发的数字证书,我们可以对网络上传输的数据进行加密、解密、签名、验签操作。确保数据的完整性,机密性,和抗否认性。
数字证书有多种文件编码格式:

  • CER(Canonical Encoding Rules,规范编码格式),它是BER(Basic Encoding Rules,基本编码格式)的一个变种,比BER规定更加严格。
  • DER(Distinguished Encoding Rule,卓越编码格式)同样是BER的一个变种,与CER的不同之处在于:DER使用定长模式,而CER使用变长模式。

二、数字证书申请和验证

1.证书申请流程

在这里插入图片描述
这里的证书机构如果是证书申请者本身,将获得自签名证书

2.浏览器如何验证证书

在浏览器和服务器建立 HTTPS 链接的过程中,服务器向浏览器返回其证书。浏览器此时会验证证书的有效期,证书是否被CA吊销,证书是否是合法的CA机构颁发。

  • 证书中包含证书的有效期,浏览器只需判断当前时间是否在证书的有效范围内
  • 验证证书是否被吊销,一种方法是下载吊销证书列表,第二种方法是在线验证。

接下来是验证证书是否由合法的CA机构颁发。以访问CSDN服务器为例进行解释:

  • 首先,浏览器利用证书的原始信息计算出信息摘要;
  • 然后,利用 CA 的公钥来解密数字证书中的数字签名,解密出来的数据也是信息摘要;
  • 最后,判断这两个信息摘要是否相等。
    在这里插入图片描述

问题:浏览器如何获取CA的公钥
大部分情况下,CA 机构的数字证书都内置在操作系统中,这样当需要使用某 CA 机构的公钥时,我们只需要依据 CA 机构名称,就能查询到对应的数字证书了,然后再从数字证书中取出公钥。浏览器默认信任操作系统内置的证书为合法证书

在这里插入图片描述
存在问题,在实际情况下,CA 机构众多,操作系统不可能将每家 CA 的数字证书都内置进操作系统。
颁发证书的机构划分为两种类型,根 CA(Root CAs)和中间 CA(Intermediates CAs),通常申请者都是向中间 CA 去申请证书的,而根 CA 作用就是给中间 CA 做认证,一个根 CA 会认证很多中间的 CA,而这些中间 CA 又可以去认证其他的中间 CA,这样就形成了证书链
只有通过 WebTrust 国际安全审计认证,根证书才能预装到主流的操作系统,并成为一个可信的认证机构。
在这里插入图片描述
所以只要判断证书的根证书是可信的,那么该证书就是可信证书。

三、KeyTool自签名证书

KeyTool是java的数字证书管理工具,用于数字证书的申请,导入、导出和撤销操作。
KeyTool与本地密钥库相关联,将私钥存于密钥库,公钥则以数字证书输出。

1.生成自签名证书

申请数字证书之前,需要在密钥库中以别名的方式生成本地数字证书
keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 360 -alias theme -keystore theme.keystore
参数含义:

参数含义
-genkeypair表示生成密钥
-keyalg执定密钥算法,这里使用RSA
-keysize执定密钥长度,默认1024,这里指定2048
-sigalg指定数字签名算法,这里指定SHA256withRSA
-validity指定证书有效期,360天
-alias指定别名
-keystore指定密钥库存储位置

执行以上命令,输入密钥库口令及其他相关信息,会创建一个密钥库,同时这个密钥库中包含了一个数字证书
在这里插入图片描述

2.导出证书

这时的数字证书并没有经过CA的认证。不过依然可以使用。下面将证书导出
keytool -exportcert -alias theme -keystore theme.keystore -file theme.cer -rfc
参数含义:

参数含义
-exportcert表示导出证书操作
-alias指定导出别名
-keystore指定密钥库文件
-file指定导出文件路径
-rfc指定以base64编码格式输出

在这里插入图片描述

3.查看证书

可通过以下两种方式查看证书
查看单个证书
keytool -printcert -file theme.cer

在这里插入图片描述
查看密钥库中所有证书:
keytool -list -v -keystore theme.keystore
在这里插入图片描述

4.构建CA签名证书

keeytool -certreq -alias theme -keystore theme.keystore -file theme.csr -v
参数说明:

参数含义
-certreq表示数字证书申请操作
-alias指定别名
-keystore指定密钥库文件
-file指定导出文件
-v详细信息

输出密码和相关参数后,得到一个数字证书签发申请theme.csr文件。接着去CA机构进行签发。获得签发后的数字证书(如:theme.cer文件),需要将其导入信任库。导入证书操作如下:
keytool -importcert -trustcacerts -alias theme -file theme.cer -keystore theme.keystore

参数含义
-importcert表示导入数字证书
-trustcacerts表示将数字证书导入信任库
-alias指定导入别名
-file指定数字证书文件路径
-keystore指定密钥库文件

可以使用以上提到的方式查看导入的证书信息


总结

数字证书常常与传输层SSL/TLS协议共同构建应用层HTTPS协议,确保网络交互安全。下一篇通过java代码实现https请求,如何做到绕过证书认证,单向认证和双向认证。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值