网站SSL安全证书认证的基本过程和原理
现在的网站基本上都迁移到了https协议上,https是http协议的安全升级版本。
在原来的http协议下,如果有人截获了你发送给服务器的报文,就能获取里面的信息,比如用户名乃至密码。
所以http协议单纯从传输层面看是不安全的,其信息安全性得依赖额外的应用层面来保证。
那么如何保证信息交互的安全性呢,一般是通过密钥对的方式,也就是数学算法上可以把一个密钥分成2个部分,
一半是公钥,一半是私钥。公钥加密的信息必须用私钥来解密,反之亦然。
这样即使你发送的信息被黑客截获,在没有私钥的情况下,仍然不能解密你的信息,从而保证了信息传输的安全。
要建立一个https网站,首先需要申请一个安全证书,向证书颁发机构提交一个CSR(证书)文件,这个文件可以通过网站在线生成也可以在服务器上通过命令行(linux上)或者一些界面工具(windows上)来生成。
什么是CSR文件?
CSR全名是Certificate Signing Request,也就是证书签名请求,在生成这个csr文件的时候,通常会同时生成一个key文件,csr文件包含了公钥和申请人的基本信息(比如域名、公司和地址信息等),key则包含了私钥。key文件自己妥善保存不要交给任何人,而把csr文件提交给CA(发证机构),CA使用你提交的相关信息生成证书(通常是一个pem编码格式的文件)。然后你可以在web服务器上安装证书(安装时需要用到key文件)。
HTTPS请求过程
证书安装好后,客户端通过https访问你的网站,其过程如下:
1. 客户端向服务器发送访问请求;
2. 服务器将证书发送给客户端;
3. 客户端开始对证书进行认证:
* 在证书中获取证书的颁发机构字段
* 在系统证书目录下寻找,颁发机构的根证书,如果找到则通过,如果没有找到,给用户弹出提示,由用户选择是否信任该证书
* 验证证书是否过期,证书中的服务器域名字段是否和我们实际访问的服务器域名一致,通过计算证书hash值判断是否被篡改。
4. 证书认证通过后,客户端使用协商好(过程略)的加密方案生成随机码,用作通信过程中的密码,使用服务端证书中获取到的公钥进行加密并发送给服务端;
5. 服务器收到后,使用证书对应的私钥进行解密,获取到对称加密的通信密码;
6. 使用对称加密通信。
HTTPS工作在第几层?
回答这个问题得限定网络模型上下文,如果是OSI模型,那么HTTPS工作在TOP5以上(会话层、表达层和应用层,区分不是那么明确),如果是TCP/IP模型,那么显然HTTPS也是应用层协议。原则上HTTPS是应用层的协议,只不过,在使用HTTPS时,实际上是建立了一个SSL(TLS)连接,把HTTP应用层的数据通过SSL来安全传输,所以从网络传输的角度而言,它是工作在会话和表达层,只是在网络两端会有应用层的加解密处理。


最新评论
- 相关文章
2019年开源WebRTC媒体服务器选型比较
什么是WebRTC服务器?在WebRTC的早期开始,该技术的主要卖点之一是它允许点对点(浏览器到浏览器)通信,几乎没有服务器的干预,服务器通常仅用于信令(比如用于...
增强现实引擎ARToolKit工作原理简介
ARToolkit是一个基于CV(计算机视觉)和Marker(标识)的开源增强现实引擎。其具备如下功能特性:A. 鲁棒跟踪,包括基于标记的跟踪与基于特征的跟踪;
Monaco Editor 编辑器拷贝粘贴功能调用和获取选中文本
有时候需要在monaco editor外部调用编辑器的内置功能比如希望在页面主工具栏实现一些快捷操作。button
创建非矩形网页页面元素的常用技术和实例代码
非矩形设计正在变成一种时尚,比如波浪形、菱形、三角形等:而随着技术发展,这种设计在技术实现上也变得更容易。本文以最简单的三角形为例,演示使用5种方法来...
函数式JavaScript编程基础概念:Curry和Partial Application
本文介绍JS函数式编程中的两个概念:柯里(Curry)和部分应用程序(Partial Application)。什么是应用程序(Application)将函数应用于其参数以产生返回值的过...
NodeJS、Java和PHP性能考量和若干参考结论
首先需要说明的是,严格而言NodeJS和Java、PHP并非对等概念,NodeJS是基于JS的一个应用程序,而Java/PHP是语言。我们这里实际指的是分别使用node、java和php来实...
CSS3弹性布局内容对齐(justify-content)属性使用详解
内容对齐(justify-content)属性应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis)对齐。该操作发生在弹性长度以及自动边距被确定后。 它用来在存...
Three.js入门教程6 - 创建全景图和纹理
全景图非常酷。使用Three.js做一个属于自己的全景图并不是那么困难。要做一个全景图,你需要一个软件用来做一张全景图片。我使用了iPhone上的Microsoft Photosyn...
Three.js入门教程2 - 着色器(下)
这是WebGL着色器教程的后半部分,如果你没看过前一篇,阅读这一篇教程可能会使你感到困惑,建议你翻阅前面的教程。
S3TC(S3 Texture Compression)纹理压缩格式详解
使用S3TC格式存储的压缩纹理是以4X4的纹理单元块(texel blocks)为基本单位存储的,每纹理单元块(texel blocks)有64bit或者128bit的纹理单元数据(texel data)。这...
WebGL入门教程5 - 详解纹理滤镜(Texture Filter)
WebGL中使用纹理贴图来实现细腻的物体表面观感,其中一个重要的参数是纹理滤镜(Texture Filter)。
这个参数用来处理当对象出现缩放时,纹理如何处理中间...使用Canvas绘制完美的不完美圆形
真实世界是不完美的,当我们需要模拟真实世界时,经常需要引入不完美/不规则的形状。比如陨石、雨滴、行星、树叶、绵延的海岸线、云朵等。本文介绍如何基于Canva...
Three.js 开发基础知识 - 绘制3D对象
Three.js是一个用来简化WebGL开发的JavaScript库,比如绘制一个三维立方体,使用WebGL需要100多行,那Three.js只要10几行就能够完成。本文通过创建一个立方体来...
更多...