首页 > 其他分享 >浏览器如何验证HTTPS证书的合法性?(转)

浏览器如何验证HTTPS证书的合法性?(转)

时间:2023-09-23 21:26:06浏览次数:44  
标签:合法性 浏览器 证书 CA GlobalSign 公钥 HTTPS 信任 数字证书

浏览器拿到了服务端的数字证书后,要怎么校验该数字证书是真实有效的呢?

这个过程很多人没有关注到,我这里详细说下。

数字证书和 CA 机构

在说校验数字证书是否可信的过程前,我们先来看看数字证书是什么,一个数字证书通常包含了:

  • 及使用的算法;
  • 证书有效期;
  • 还有一些其他额外信息;

那数字证书的作用,是用来认证公钥持有者的身份,以防止第三方进行冒充。说简单些,证书就是用来告诉客户端,该服务端是否是合法的,因为只有证书合法,才代表服务端身份是可信的。

我们用证书来认证公钥持有者的身份(服务端的身份),那证书又是怎么来的?又该怎么认证证书

呢?

为了让服务端的公钥被大家信任,服务端的证书都是由 CA (Certificate Authority,证书认证机构)签名的,CA 就是网络世界里的公安局、公证中心,具有极高的可信度,所以由它来给各个公钥签名,信任的一方签发的证书,那必然证书也是被信任的。

之所以要签名,是因为签名的作用可以避免中间人在获取证书时对证书内容的篡改。

数字证书签发和验证流程

如下图图所示,为数字证书签发和验证流程:

CA 签发证书的过程,如上图左边部分:

  • 首先 CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,然后对这些信息进行 Hash 计算,得到一个 Hash 值;
  • 然后 CA 会使用自己的私钥将该 Hash 值加密,生成 Certificate Signature,也就是 CA 对证书做了签名;
  • 最后将 Certificate Signature 添加在文件证书上,形成数字证书;

客户端校验服务端的数字证书的过程,如上图右边部分:

  • 首先客户端会使用同样的 Hash 算法获取该证书的 Hash 值 H1;
  • 通常浏览器和操作系统中集成了 CA 的公钥信息
  • 浏览器收到证书后可以使用 CA 的公钥解密 Certificate Signature 内容,得到一个 Hash 值 H2 ;
  • 最后比较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。

证书链

但事实上,证书的验证过程中还存在一个证书信任链的问题,因为我们向 CA 申请的证书一般不是根证书签发的,而是由中间证书签发的,比如百度的证书,从下图你可以看到,证书的层级有三级:

对于这种三级层级关系的证书的验证过程如下:

  • 客户端收到 http://baidu.com 的证书后,发现这个证书的签发者不是根证书,就无法根据本地已有的根证书中的公钥去验证 http://baidu.com 证书是否可信。于是,客户端
根据 http://baidu.com 证书中的签发者,找到该证书的颁发机构是 “GlobalSign Organization Validation CA - SHA256 - G2”,然后向 CA 请求该中间证书
  • 请求到证书后发现 “GlobalSign Organization Validation CA - SHA256 - G2” 证书是由 “GlobalSign Root CA” 签发的,由于 “GlobalSign Root CA” 没有再上级签发机构,说明它是根证书,也就是自签证书
。应用软件会检查此证书有否已预载于根证书
  • 清单上,如果有,则可以利用根证书中的公钥去验证 “GlobalSign Organization Validation CA - SHA256 - G2” 证书,如果发现验证通过,就认为该中间证书是可信的。
  • “GlobalSign Organization Validation CA - SHA256 - G2” 证书被信任后,可以使用 “GlobalSign Organization Validation CA - SHA256 - G2” 证书中的公钥去验证 http://baidu.com 证书的可信性,如果验证通过,就可以信任 http://baidu.com 证书。

在这四个步骤中,最开始客户端只信任根证书 GlobalSign Root CA 证书的,然后 “GlobalSign Root CA” 证书信任 “GlobalSign Organization Validation CA - SHA256 - G2” 证书,而 “GlobalSign Organization Validation CA - SHA256 - G2” 证书又信任 http://baidu.com 证书,于是客户端也信任 http://baidu.com 证书。

总括来说,由于用户信任 GlobalSign,所以由 GlobalSign 所担保的 http://baidu.com 可以被信任,另外由于用户信任操作系统或浏览器的软件商,所以由软件商预载了根证书的 GlobalSign 都可被信任。

操作系统里一般都会内置一些根证书,比如我的 MAC 电脑里内置的根证书有这么多:

这样的一层层地验证就构成了一条信任链路,整个证书信任链验证流程如下图所示:

最后一个问题,为什么需要证书链这么麻烦的流程?Root CA 为什么不直接颁发证书,而是要搞那么多中间层级

呢?

这是为了确保根证书的绝对安全性,将根证书隔离地越严格越好,不然根证书如果失守了,那么整个信任链都会有问题。

标签:合法性,浏览器,证书,CA,GlobalSign,公钥,HTTPS,信任,数字证书
From: https://www.cnblogs.com/hdu-2010/p/17725063.html

相关文章

  • Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connect
    报错 Maxretriesexceededwithurl:/(CausedbyNewConnectionError('<urllib3.connection.HTTPSConnectionobjectat0x000001A73833FD00>:Failedtoestablishanewconnection:[WinError10060]  pipuninstallrequestsurllib3  #先卸载pipinstallre......
  • http和https协议的区别
    区别HTTP明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP)数据传输过程是加密的,安全性较好。使用HTTPS协议需要到CA(CertificateAuthority,数字证书认证机构)申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy和GlobalSign等......
  • SyntaxError: invalid property id (浏览器不支持对象...展开)
    SyntaxError:invalidpropertyid(浏览器不支持对象...展开)火狐55以后支持......
  • chrome浏览器出现《您的连接不是私密链接》
    问题现象键盘切换到英文输入点击页面,就页面中间随意点一下即可不是输入框!不是输入框!不是输入框!不是找啦!不是找啦!不是找啦!在chrome该页面上,直接键盘敲入这11个字符:thisisunsafe(鼠标点击当前页面任意位置,让页面处于最上层即可输入)效果......
  • HttpClient HttpClientHandler WebRequestHandler Explained 处理https请求
    Framework4.8的HttpClientHandler有ServerCertificateCustomValidationCallback所以处理https请求做如下操作:varhandler=newHttpClientHandler();varbaseUri=newUri(url);if(baseUri.Scheme.ToLower()=="https"){......
  • 【HarmonyOS】解决API6 WebView跳转外部浏览器问题、本地模拟器启动黑屏
    ​【问题描述1】HarmonyOSAPI6Java开发中使用WebView组件,如果网页中有跳转链接,点击会跳转到手机系统浏览器。 【解决方案】解决这个问题的方法就是给WebView这种自定义的WebAgent对象。具体代码如下:WebConfigwebConfig=this.webView.getWebConfig();this.webView.setWe......
  • 3.基本语法和浏览器控制台的使用
    掌握浏览器控制台的使用方法:源码,控制台,断点调试,应用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><script>//语法和Java差不多,更加简单//变量varvars......
  • 使用 Selenium 或其他工具模拟浏览器使用及语法代码
    使用Selenium模拟浏览器使用的代码示例如下:fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeys#创建浏览器驱动实例driver=webdriver.Chrome()#打开网页driver.get("https://www.example.com")#查找并填写表单search_box=driver.f......
  • 使用openssl创建ssl证书,用于测试https服务
    一个web站点要对外提供https服务就需要ssl证书,ssl证书可以从云服务厂商那里购买,通常也能申请到免费的,但是如果只是为了测试,则可以使用openssl来创建ssl证书。下面是完整的生成过程:第一步:创建私钥opensslgenrsa-outserver.key2048第二步:创建签名请求文件opensslreq-new-key......
  • Clone fail unable to access 'httpsgithub.comLovi-githubmyUserCenter.git' OpenSSL
    bug:unabletoaccess'https://github.com/xxx':OpenSSLSSL_read:SSL_ERROR_SYSCALL,errno10054关于git提交github出现errno10054、port443:Timedout等问题解决_git提交10054_husishuai的博客-CSDN博客按照上边的解决方法即可......