HTTPS协议访问网址为何浏览器提示不安全

一、现象描述

使用https协议访问某个地址时,浏览器会出现如下的风险提示:
HTTPS协议访问网址为何浏览器提示不安全

以及这样的提示: NET::ERR_CERT_AUTHORITY_INVALID

二、出现原因

浏览器与服务器(访问的网址)交互时,SSL证书验证失败:

  • 1、SSL证书不是由受信任的CA机构颁发的
    a)服务器本身没有加密证书
    b)用户电脑找不到对应的证书
  • 2、证书过期
  • 3、访问的网站域名与证书绑定的域名不一致

三、解决方案(本文不会介绍如何制作证书)

第一种)购买商业证书,由CA机构颁发,使用证书绑定的域名访问网站。
第二种)自己按照规范要求制作一套证书文件:
网关证书 cert.pfx
发行者证书:ca.cer
用户电脑安装ca.cer证书; cert.pfx和ca.cer证书需要上传到服务器

额外补充:
如果是get请求直接访问网站,会出现不受信的提示,点击隐藏按钮,可以继续访问,代表这个浏览器把此网站标记为受信网站 ,则不会每次出现提示。 注意地址栏上显示的依旧是不可信。

如果是采用的ajax请求,是没有机会点击这个隐藏按钮的,所以一定需要证书。

四、许多疑问

证书包含什么?

SSL证书是由数字证书颁发机构(CA)经过一系列的严格审核而签发的,包含如下信息:
1)地址栏:安全锁、https标志、企业名称(仅EV类型证书)。
示例:扩展验证EV SSL证书在浏览器的显示效果

EV SSL证书展示

2)常规:证书的使用者、颁发者和有效,如下图
常规

3)详细信息:证书版本、序列号、签名算法、加密算法、公钥、有效期及使用者的详细信息(如省市、企业名等),如下图
详细信息

证书如何申请?

SSL证书可以向CA机构通过付费的方式申请,也可以自己制作。

证书与域名的关系?

一个证书一般只绑定一个域名,CA机构也提供申请通配符域名(例如,*.runoob.com),通配符域名相当于绑定了主域名下的所有域名,因此使用起来非常方便,但是价格也超级昂贵,几乎只有企业才可以申请。

浏览器如何验证证书?

在浏览器的菜单中,找到并点击“Internet选项”,选择“内容”标签,点击“证书”按钮,然后就可以看到浏览器已经信任了许多“中级证书颁发机构”和“受信任的根证书颁发机构”。当我们在访问该网站时,浏览器就会自动下载该网站的SSL证书,并对证书的安全性进行检查。

浏览器需要验证SSL证书的5个方面:

第一,验证浏览器中“受信任的根证书颁发机构”是否存在颁发该SSL证书的机构。
第二,检查证书有没有被证书颁发机构吊销。
第三,验证该网站的SSL证书是否过期。
第四,审核该SSL证书的网站的域名是否与证书中的域名一致。
第五,该网站有没有被列入欺诈网站黑名单。

    根证书是最关键的一个证书,如果根证书不受信任,它下面颁发的所有证书都不受信任。

电脑上的证书在哪里?

操作系统在安装过程中会默认安装一些受信任的CA机构的根证书,可以在”运行”里面运行”certmgr.msc”启动证书管理器,如下图所示:

五、简单科普

HTTPS协议

a)超文本传输安全协议(Hypertext Transfer Protocol Secure,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种网络安全传输协议。

b)经由超文本传输协议(HTTP)进行通信,但利用SSL/TLS来加密数据包。默认端口443。

SSL是什么?

SSL是一个中间层协议,介于传输层和应用层之间,属于Socket层的实现,与应用层协议无关,可以透明的建立在应用层协议之上。

SSL是一个分层协议,由记录层和握手层组成。其中,握手层包含SSL握手协议,SSL修改密码规范协议,SSL告警协议,记录层包括SSL记录协议。

SSL握手协议

SSL握手协议建立在SSL记录协议之上,用于在实际的数据传输开始前通信双方进行身份认证,加密算法协商,加密密钥交换等

握手协议由一系列在客户和服务器间交换的报文组成。每个报文由类型,长度,内容三部分组成

1.类型(1字节),指SSL握手协议报文类型
2.字节(3字节),以字节为单位的报文长度
3.内容。使用报文有关的内容参数

SSL协议的握手过程

1.客户端向服务器发送问候消息,该消息包含SSL版本号,随机数,会话ID,密码套件,压缩方法等信息

  • 随机数。一个用于生成主密钥的32字节随机数
  • 会话ID。客户端在此次连接中想使用的会话标识符
  • 密码套件。每个密码套件以SSL开头,用WITH分割密钥交换算法,加密算法,散列算法

2.服务器向客户端返回问候消息
3.服务器将自己的证书附在问候消息之后,使客户端能用服务器证书中的公钥认证服务器
4.密钥交换方法有6种:无,RSA,匿名Diffle-hellman,固定Diffle-hellman和Fortezza。如果阶段一协商的交换算法为Fortezza,则服务器需要向客户端发送一条服务器密钥交换消息。
5.如果服务器要求验证客户端,则向客户端发送一个客户证书请求
6.服务器发送问候结束消息,并等待客户端响应

7.客户端利用服务器响应消息认证服务器的真实身份,如果服务器要求认证客户端,客户端就对双方都已知且在握手过程中的唯一一段数据进行签名,然后把签名后的数据连同自己的证书发送给服务器。
8.客户端密钥交换阶段,客户端根据交互得到的所有信息生成会话预备主密钥pre_master_sercet,并用服务器的公钥加密后发送给服务器

9.客户端利用pre_master_sercet生成主密钥master_sercet,然后利用主密钥生成会话密钥session_sercet,客户端向服务器发送一条修改密码规范消息,通知服务器以后从客户端来的消息将用session_sercet加密
10.客户端向服务器发送握手结束消息,表明握手过程中客户端部分已经完成
11.服务端利用私钥解密pre_master_sercet,利用相同的方式生成主密钥master_sercet,再生成会话密钥session_sercet,通知客户端以后从服务端来的消息将用session_sercet加密
12.服务端向客户端发送握手结束消息,表明握手过程中服务端部分已经完成

这里服务端与客户端互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常加密解密数据,为后续真正数据的传输做一次测试。

另外,HTTPS一般使用的加密与HASH算法如下:

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • HASH算法:MD5,SHA1,SHA256
本作品采用《CC 协议》,转载必须注明作者和本文链接
学过的东西能说出来那是最妙的,能复盘写下来那也不错
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!