详解HTTPS中数字证书验证系统

原创 2016年03月28日 09:04:26

关于浏览器验证网站数字证书的流程网上的资料一般讲的都不是很清楚。在查阅了不少资料后终于搞清楚这部分。

CA下发给网站的证书都是一个证书链,也就是一层一层的证书,从根证书开始,到下级CA,一层一层,最后一层就是网站证书。

浏览器收到服务器发送的证书后,需要验证其真实性。而证书的签名是通过签名算法和上级CA的私钥生成的,并非很多文章里简单说的靠CA私钥生成。浏览器需要用上级CA的公钥才能解密签名,并与生成的指纹对比,那么问题来了,这个上级CA的公钥从哪来呢?

答案是此公钥来自于证书链该层的上级CA的证书明文内。单个X509v3证书由以下部分组成:

X.509v3证书由三部分组成:

  • tbsCertificate (to be signed certificate),待签名证书。
  • SignatureAlgorithm,签名算法。
  • SignatureValue,签名值。

tbsCertificate又包含10项内容,在HTTPS握手过程中以明文方式传输:

  • Version Number,版本号。
  • Serial Number,序列号。
  • Signature Algorithm ID,签名算法ID。
  • Issuer Name,发行者。
  • Validity period,有效时间。
  • Subject name ,证书主体名称。
  • Subject Public Key Info ,证书主体公钥信息,包含公钥算法和公钥值。
  • Issuer Unique Identifier (optional),发行商唯一ID。
  • Subject Unique Identifier (optional),主体唯一ID。
  • Extensions (optional),扩展。

证书链由多个证书一层一层组成的,除了最底层的网站证书的公钥是给用户加密报文外,其他层证书中的公钥均用于解密底层的证书指纹签名。最高层的根证书是自签名的,也就是自己颁发给自己,所以它的公钥不仅用来解密下层的签名,也用来给自己的签名解密。

验证证书是否真实的任务完成了,那么证书是否可靠如何验证呢?一句话,只要根证书可靠,整个证书链就可靠,而根证书是否可靠要看这个根证书是否在操作系统或浏览器内置的可信根证书内,在的话就可信。

版权声明:本文为博主原创文章,未经博主允许不得转载。

x509证书验证示例

openssl实现了标准的x509v3数字证书,其源码在crypto/x509和crypto/x509v3中。其中x509目录实现了数字证书以及证书申请相关的各种函数,包括了X509和X509_REQ...
  • chuicao4350
  • chuicao4350
  • 2016年10月20日 17:49
  • 1820

openssl证书链的校验过程

 X509_STORE_CTX这个结构主要是用来校验证书用,一般都会使用X509_STORE这个已经设置好的对象来初始化X509_STORE_CTX,初始化函数如下: int X509_STORE_C...
  • shareyao
  • shareyao
  • 2010年02月06日 16:23
  • 3282

cer证书签名验证

一个cer证书本身也是需要签名的,这是为了防止cer证书被篡改。 证书有两种类型: 1. 根证书 2. 根证书签发的子证书。 根证书比较特殊,它是自签名的。而其他子证书的签名公钥都保存...
  • zj510
  • zj510
  • 2014年10月15日 20:05
  • 10651

X509证书

1、原理   X.509 给出的鉴别框架是一种基于公开密钥体制的鉴别业务密钥管理。一个用户有两把密钥:一把是用户的专用密钥(简称为:私钥),另一把是其他用户都可得到和利用的公共密钥(简称为:公钥)。...
  • wyxhd2008
  • wyxhd2008
  • 2012年09月10日 11:03
  • 17965

数字证书的有效性验证

最近在做数字证书有效性验证的接口,主要是从数字证书的有效期、颁发根证书和CRL进行验证,下面我就从这几个方面来说数字证书的有效性验证。 一、有效期 证书的有效期验证这个比较简单,就是使用时间在必须...
  • sunboy2718
  • sunboy2718
  • 2014年08月05日 17:47
  • 1021

openssl的证书链验证

使用openssl验证证书链可以用以下命令: debian:/home/zhaoya/openssl#openssl verify -CAfile ROOT_CERT USER_CERT 其中的R...
  • hanghang121
  • hanghang121
  • 2016年06月30日 14:05
  • 3212

数字证书及其认证过程

众所周知,公钥密码学通过使用公钥和私钥这一密钥对,使数字签名和加密通讯等密钥服务变得容易起来。公钥技术之所以能得到广泛的应用,原因就在于对那些使用密钥对中的公钥来获得安全服务的实体,他们能很方便地取得...
  • cyy089074316
  • cyy089074316
  • 2013年06月10日 17:18
  • 20074

https证书的验证过程与生成方法

1.简洁的解释: 1.服务器 用RSA生成公钥和私钥 2.把公钥放在证书里发送给客户端,私钥自己保存 3.客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随机数,这...
  • abcd1101
  • abcd1101
  • 2017年05月09日 23:00
  • 2781

Openssl 对x509证书有效性进行验证

在进行身份认证时,首先要对发送给服务器进行认证的x509证书有效性进行验证,在Openssl中,可以用一个API接口可以实现:int X509_verify_cert(X509_STORE_CTX *...
  • wangsifu2009
  • wangsifu2009
  • 2011年08月26日 20:14
  • 5723

openssl的证书链验证

使用openssl验证证书链可以用以下命令:debian:/home/zhaoya/openssl#openssl verify -CAfile ROOT_CERT USER_CERT其中的ROOT_...
  • dog250
  • dog250
  • 2010年04月01日 21:16
  • 8166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:详解HTTPS中数字证书验证系统
举报原因:
原因补充:

(最多只允许输入30个字)