一个新的网站去买了ca证书,用户通过浏览器去访问,这时候浏览器如何去验证这个证书的正确性,防止被中间人攻击? 是需要到ca网站上去验证吗还是什么?

下文通过介绍https证书的结构组成和浏览器如何验证证书的合法性,来解答这个问题。

证书颁发机构,也就是CA,是不会直接向用户签发证书的,而是多了一层中间证书颁发机构。CA会自己给自己签发一个证书,这个证书叫做根证书或Root CA;然后CA会通过根证书来签发中间证书,授权中间证书颁发机构签发证书的权限;最后中间证书颁发机构通过中间证书向用户签发用户证书。至于为什么需要多这么一层中间证书颁发机构,目的是为了保护根证书,减少根证书被攻击或者说被破解的风险。因为一旦根证书被破解了,根证书所属的CA颁发的所有证书都将失去保护网站的能力,这是一件十分严重的事情。

值得注意的是,中间证书可以不止一个,中间证书层数越多,根证书越安全,但是中间证书越多,证书结构越复杂,越占用通信资源。所以一般情况下,用户收到的证书是三个证书(一个根证书、一个中间证书、一个用户证书)或四个证书(一个根证书、两个中间证书、一个用户证书)。

下面以一个部署了证书的网站为例,如图所示,点开浏览器地址栏的绿色安全锁。

再点开证书信息,在证书路径界面显示的这三个证书就是要找的完整证书。从上到下分别是:根证书、中间证书和用户证书。

事实上,申请到的证书只是用户证书,中间证书和根证书是很早就被签发,很早就存在的。我们还要再了解一下根证书库这个概念,浏览器为什么信任CA签发的证书呢?

因为CA是可信任的第三方组织,负责证书的生成、签发和作废。为什么CA时可信的呢,因为他们被WebTrust信任。只有通过WebTrust国际安全审计认证的证书颁发机构CA,其签发的证书才会被各大浏览器信任。根证书库包含浏览器信任的证书颁发机构CA的根证书,有的浏览器会自建根证书库,比如Mozilla Firefox,有的浏览器会使用其他浏览器的根证书库。

那么问题来了,谁来验证证书的合法性呢?当然是浏览器啦,那么浏览器是如何验证的呢?

用户证书被中间证书信任,而中间证书被根证书信任,根证书又被浏览器信任,这样一个完整的证书链使得浏览器可以在根证书库内一次检索用户证书、中间证书和根证书,如果能匹配到根证书,那么这一信任链上的所有证书都是合法的。

这里有个题外话,中间证书和根证书统称为证书链,如果我们在部署证书时,仅导入了用户证书,那么PC端访问网站是没有问题的,因为PC浏览器内置绝大部分CA的证书链,会自动补全。如果是移动端访问,如大部分的手机浏览器,那么就会提示不安全,因为大部分的手机浏览器并不会内置证书链,所以无法识别用户证书,也就会把网站标记为不安全。所以切记,部署证书是一定要安装证书链。

这时候又出现了一个新的问题,如果用户证书被吊销,浏览器还会显示安全吗?证书颁发机构有个叫做证书作废列表的东西。证书签发以后,如果出现私钥泄露或丢失、证书所有者信息变更、不再需要继续使用证书等情况,证书颁发机构将会对证书进行作废,并将证书的序列号登记在证书作废列表CRL中。浏览器通过查询证书颁发机构CA最新的CRL,可以确定某个证书是否有效。但是,浏览器并不可能在每个访问者访问每个网站时都向CA查询一次,那这工作量也太大了,所以通常浏览器会定期查询CA最新的CRL,这也就会在一定程度上出现,证书被吊销了,浏览器依旧会信任的情况,但是这个是时间不会太久。

如果用户证书没有问题,反而证书颁发机构CA由于安全防护出现问题导致一些机密内容泄露,那么这个CA就不应该被信任,各大浏览器就会将这个CA的根证书从根证书库中删除。这样,该证书签发的所有中间证书和用户证书都将不被信任。

浏览器是如何验证HTTPS证书合法性的?相关推荐

  1. 浏览器如何验证HTTPS证书的合法性?

    现在SSL证书使用越来越广,安装完SSL证书的网站,在浏览器都是可以直接查看到的,点击浏览器地址栏的绿色小锁,就可以看到关于该网站的SSL证书的相关信息.那这些浏览器具体是如何验证SSL证书的呢? 其 ...

  2. Windows下验证https证书

    最近在写一个Windows桌面程序需要给https请求加上证书验证,使用的http库是libcurl+openssl,使用openssl自带的证书验证功能,只能内嵌CA证书,但是我的程序不方便更新,所 ...

  3. 验证https证书过期时间

    public void httpsUrl(String httpsurl) throws Exception {URL url = new URL(httpsurl);HttpsURLConnecti ...

  4. https证书验证的基本方法

    https证书是一种数字证书,这种证书的主要作用是保护网站的信息安全,此时就能够提高网站的安全性.不过,网站配置了https证书之后一定要进行https证书验证,这种情况下的安全性是很高的.但是,ht ...

  5. 浏览器如何验证SSL证书?

    浏览器如何验证SSL证书?当前SSL证书应用越来越广泛,我们看见的HTTPS网站也越来越多.点击HTTPS链接签名的绿色小锁,我们可以看见SSL证书的详细信息.那么浏览器是如何验证SSL证书的呢? 浏 ...

  6. Https证书浏览器红色警告解决

    浏览器中出现不安全红色警告 Google Chrome: Microsoft Edge: Internet Explorer 解决方案,将https证书导出,加入到本地游览器,此处以Google Ch ...

  7. 你不在意的HTTPS证书吊销机制

    现任美团安全部技术专家,十年以上互联网产品研发经验,专注于分布式系统架构设计,目前主要从事安全防御产品研发工作. 缘起 偶刷<长安十二时辰>,午睡时,梦到我穿越到了唐朝,在长安城中的靖安司 ...

  8. android中webView的https证书校验以及基于okhttp的接口https证书校验

    webView证书校验: 通过chrome浏览器拿到证书cer文件 获取证书公钥 public void readX509CerFile() {try {InputStream inStream = ...

  9. HTTPS证书品牌,申请与安装

    网站安装SSL证书即可实现从http向https的转变,ssl证书也被理解为https证书,https证书的作用主要是:防网站被劫持,防内容被篡改,防网站信息被窃取 下面SSL盾小编为您讲解下ssl证 ...

最新文章

  1. java计算两地距离(公里)
  2. 游戏场景中的建筑设计,专访暴雪娱乐首席美术师 PhilipKlevestav
  3. R语言观察日志(part4)--paste函数
  4. [剑指offer][JAVA]面试题第[22]题[j剑指offer][双指针][快慢指针]
  5. 各厂商磁编码器对比,AS5047、AS5048、AS5600、TLE5012、MA730
  6. 巩固知识体系!mysql变量类型
  7. 10分钟大数据Hadoop基础入门
  8. 常见脱壳与反编译工具
  9. 如何禁止计算机自动安装驱动,禁止自动安装显卡驱动-怎样禁止系统自动安装显卡驱动?系统是Gho – 手机爱问...
  10. php订阅号发送消息,关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题,_PHP教程...
  11. 游戏企业该如何做好网络安全防护?
  12. 中国大学MOOC-陈越、何钦铭-数据结构-2020春期末考试【个人完整题解记录-判断选择部分】
  13. ppp服务器连通状态 失败移动,某局点MSR路由器PPPOE拨号IPCP阶段协商失败处理案例...
  14. perf: interrupt took too long
  15. 量子计算机当游戏服务器,为何需要量子计算机
  16. html不兼容的原因,浏览器不兼容的原因和解决方法
  17. NCC的openApi介绍、NCC二开,对接NCC、简化版的openapi服务
  18. python飞机大战(只需要两个python文件)附带pycharm的导包方法
  19. 区块链游戏中的网络效应:内容仍为王
  20. 如果让你只推荐一本nbsp;Javaamp;nbs…

热门文章

  1. 方法的重写和重载,接口和抽象类区别
  2. Java微信小程序支付篇
  3. 一部手机就能完成人像三维扫描建模
  4. 区块链支付和第三方支付区别
  5. JBDC[mysql][java]
  6. 44 - 操作MySQL数据库
  7. YYDS!使用 Python 全面分析股票数据特征
  8. webdriver.Chrome.set_network_conditions:Chrome网络仿真设置。
  9. tp5.1 db助手与db::name混合使用数据库操作失效
  10. JAVA如何判断两个字符串是否相等