当前位置:首页 > 日记 > 正文

详解HTTPS 的原理和 NodeJS 的实现

详解HTTPS 的原理和 NodeJS 的实现

基本原理

HTTP协议采用明文传输数据,当涉及敏感信息的传送时,极有可能会受到窃听或者中间人的攻击。HTTPS是HTTP与SSL/TLS的组合,即使用加密通讯以及网络服务器的身份鉴定来进行信息的安全传输。其核心有二:

  1. 使用证书对服务器及请求端的身份验证
  2. 使用一组对称秘钥加密包括请求头在内的所有信息传输

握手流程

HTTPS链接的建立过程中涉及到服务器端证书、客户端证书(可选)、服务器端的非对称秘钥以及后续通信过程中使用的对称秘钥几个内容。

  1. 客户端对HTTPS的地址发出请求,并且将自己的SSL版本号等信息发送给服务器
  2. 服务器接收到请求,将服务器证书和公钥等信息返回给客户端
  3. 客户端接收到证书后向证书颁发机构验证证书的合法性。如果证书不合法(比如自行签发的证书),则向用户发出警告并确认是否继续,用户可以选择在此时离开终止HTTPS的链接。
  4. 证书合法或客户端确认在不安全的情况下继续,客户端生成pre-master secret并且使用2中收到的服务器公钥加密后发送给服务器。如果是使用交互策略的TLS,则同时需要将客户端的证书发送给服务器。服务器检查客户端的证书颁发机构是否在信任列表中,以及证书内容是否合法。若不合法,结束本次会话。
  5. 服务器使用私钥解密pre-master secret,然后双方通过一种实现商定好的加密算法生成本次通讯使用的master secret。
  6. 双方互相通知对方本次SSL握手成功,其后均使用master secret对传输内容进行加密。

下图简要的说明了这个流程的实现。

一开始我也心存疑问:为什么要单独使用另外一组对称秘钥来实现对信息的加密而不直接使用服务器和客户端双方的非对称秘钥呢?我自身非常认同下面这个回答的解释:

传输过程使用对称密钥是因为对称加密比非对称加密的运算量低一个数量级以上,所以这样的方式可以提高双方会话的运算速度。

对于加密算法不是非常了解,希望大牛指点一二。

Openssl自签名证书的生成

HTTPS中一个关键就是证书文件。当然我们可以找专业的第三方机构签发。自己玩玩的话就用自签名的证书就可以了,用户在访问的时候则需要确认安全性问题。 1、生成传输pre-master secret的时候所需要的Server端的私钥,运行时提示需要输入密码,用于对key的加密。以后每次读取此文件的时候,都需要输入指令。

# 生成服务器端的非对称秘钥openssl genrsa -des3 -out server.key 1024# 生成签名请求的CSR文件openssl req -new -key server.key -out server.csr# 自己对证书进行签名,签名的有效期是365天openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt# 去除证书文件的passwordcp server.key server.key.origopenssl rsa -in server.key.orig -out server.key

最终在建立HTTPS链接中使用的文件是

  1. server.crt
  2. server.key

NodeJS建立一个HTTPS的Server

var httpsModule = require('https');var fs = require('fs');var https = httpsModule.Server({   key: fs.readFileSync('/path/to/server.key'),   cert: fs.readFileSync('/path/to/server.crt')}, function(req, res){  res.writeHead(200);  res.end("hello world\n");});//https默认de监听端口时443,启动1000以下的端口时需要sudo权限https.listen(443, function(err){    console.log("https listening on port: 443");});

这里使用的fs.readFileSync方法会阻塞其他进程直到文件的读取完毕,在读取关键的配置文件的时候这样的方法是比较适宜的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

iis7中CFCA客户端登录报403错误已

iis7中CFCA客户端登录报403错误已

客户端,错误,登录,电脑软件,CFCA,先简单说下原理大概原理: 采用SSL,在用户使用浏览器访问WEB服务器时,会在客户端和服务器建立安全SSL通道。在SSL会话产生时: 第一步 服务器会传送它的服务器证书,客户端会自动的分析服务器证书,来验证服务器的身…

excel表格加法计算同列数值的教程

excel表格加法计算同列数值的教程

教程,计算,加法,数值,表格,  Excel如何利用加法计算同列数值呢?下面是小编带来的关于excel表格加法计算同列数值的教程,希望阅读过后对你有所启发!excel表格加法计算同列数值的教程:  加法计算同列步骤1:首先打开EXCEL表格加法计算同列步…

Windows安装Node.js报错:2503、250

Windows安装Node.js报错:2503、250

解决方法,安装,报错,电脑软件,Windows,前言Windows真的是太恶心了!!!不仅会出现大量的垃圾文件,而且有时莫名的安装不上一些软件(正常软件)。前久因为想学学Koa2,打算升级下nodejs的版本以体验下ES6、ES7的aync,await等新特性,却死活安装不上nodejs…

windows 2003服务器系统盘空间不足

windows 2003服务器系统盘空间不足

空间,服务器,系统盘,解决方法,电脑软件,  最近发现网速很慢,图片也都找不到,打开服务器显示C盘空间不足(剩余不到20M),查找原因后发现:默认情况下,2003服务器会把所有IIS访问错误的记录写入 C:WINDOWS/system32/LogFiles 下的 log 文件中,如果访…

解决AngualrJS页面刷新导致异常显

解决AngualrJS页面刷新导致异常显

显示,页面刷新,电脑软件,AngualrJS,绪 俗话说,细节决定成败,编程亦是如此。编程过程中我们可能会不自觉的忽视一些细节问题,殊不知,这些细节正是导致页面显示出现问题的地方。今略举一例,与君共勉之。页面正常加载后,显示如下:按F5刷新之后,页面…

ps如何绘制石头?PS简单绘制一块写实

ps如何绘制石头?PS简单绘制一块写实

绘制,教程,石头,简单,电脑软件,下面的教程将教的Photoshop入门实例学习者使用PS简单绘制一块平淡无奇的石头,教程难度一般,绘制出来的石头比较逼真,带点写实的感觉。教程主要介绍的质感的刻画和体现,希望对的朋友们学习PS和设计有所帮助。我们…

PHP采用超长 | 超大数字运算防止数

PHP采用超长 | 超大数字运算防止数

数字,运算,显示,科学计数法,方法,本文实例讲述了PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法。分享给大家供大家参考,具体如下:PHP计算大数值运算时会出错,当数字太大时,数值会变成科学计数.那怎么来进行PHP超大数值运算,包括…

JavaScript中各数制转换全面总结

JavaScript中各数制转换全面总结

数制转换,电脑软件,JavaScript,利用toString的基模式来进行转换:ECMAScript对数字类型的toString描述如下:Number 类型的 toString() 方法比较特殊,它有两种模式,即默认模式和基模式。采用默认模式,toString() 方法只是用相应的字符串输出数字值…

ppt2016如何截图

ppt2016如何截图

截图,电脑软件,一般来讲,截图需要专业的截图软件来完成,但前提得下载并安装专业的截图软件,非常麻烦。那有朋友可能会说,使用QQ截图了,非常方便,但是,当我们电脑断网时,怎么办?这时候,当然是用PowerPoint 软件自带「屏幕截图」功能啦!方法:选择【插入…

linux服务器异常故障解决一例

linux服务器异常故障解决一例

服务器,故障解决,一例,电脑软件,linux,服务器突然出现公网网络不通。还好有配两个IP,一公网,一内网,内网可通,通过内网连接到服务器上 。查看日志,dmesg,发现有这样一条:Sep 9 14:34:36 slave kernel: NETDEV WATCHDOG: eth0: transmit timed out…

php求数组全排列,元素所有组合的方

php求数组全排列,元素所有组合的方

数组,全排列,组合,元素,方法,本文实例讲述了php求数组全排列,元素所有组合的方法总结。分享给大家供大家参考,具体如下:<?php$source = array('pll','我','爱','你','嘿');sort($source); //保证初始数组是有序的$last = count($sou…

PS合成漂亮的圣诞海报

PS合成漂亮的圣诞海报

圣诞,海报,漂亮,电脑软件,PS,当接到需求后先不要急于动手开始做,除非你非常聪明,脑海中已经有具体实施方案及每一步的细节(我相信一般没人会有)。如果你没有,那就乖乖的做好前期的准备,下面为大家详细介绍PS合成漂亮的圣诞海报方法,来看看吧!以上就…