广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >详解HTTPS 的原理和 NodeJS 的实现
  • 654
分享到

详解HTTPS 的原理和 NodeJS 的实现

详解原理HTTPS 2022-06-04 17:06:10 654人浏览 八月长安
摘要

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

基本原理

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

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

握手流程

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

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

# 去除证书文件的passWord
cp server.key server.key.orig
openssl rsa -in server.key.orig -out server.key

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

server.crt 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 worldn");
});

//https默认de监听端口时443,启动1000以下的端口时需要sudo权限
https.listen(443, function(err){ 
   console.log("https listening on port: 443");
});

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

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

--结束END--

本文标题: 详解HTTPS 的原理和 NodeJS 的实现

本文链接: https://www.lsjlt.com/news/12510.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解HTTPS 的原理和 NodeJS 的实现
    基本原理 HTTP协议采用明文传输数据,当涉及敏感信息的传送时,极有可能会受到窃听或者中间人的攻击。HTTPS是HTTP与SSL/TLS的组合,即使用加密通讯以及网络服务器的身份鉴定来进行信息的安全传输。...
    99+
    2022-06-04
    详解 原理 HTTPS
  • 理解nodejs的stream和pipe机制的原理和实现
    前言 前几天别人请教我关于pipe的问题,我发现我虽然用了nodejs很久,但是由于每次用的不多所以经常回避stream的使用,导致一直不熟,现在重新学习整理一下相关知识。 通过nodeschool学习st...
    99+
    2022-06-04
    原理 机制 nodejs
  • HTTPS的优缺点和原理解析
    这篇文章主要讲解了“HTTPS的优缺点和原理解析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTTPS的优缺点和原理解析”吧!HTTPS是什么:HTTPS(全称:Hyper Text Tr...
    99+
    2023-06-10
  • HTTPS 的加解密原理
    这篇文章主要介绍“HTTPS 的加解密原理”,在日常操作中,相信很多人在HTTPS 的加解密原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTTPS 的加解密原理”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • java的Builder原理和实现详解
    首先给一个简单的Builder设计模式的例子: 主实现类代码如下: public class CompanyClient { public String company...
    99+
    2022-11-12
  • 大型网站的HTTPS实践(一)——HTTPS协议和原理
    前言百度于2015年上线了全站HTTPS的安全搜索,默认会将HTTP请求跳转成HTTPS。从今天开始,我们将会分享多篇系列文章,为大家重点介绍和解析百度的HTTPS最佳实践。HTTPS协议概述HTTPS可以认为是HTTP+TLS。HTTP协...
    99+
    2023-06-03
  • 详解Feign的实现原理
    目录一、什么是Feign二、为什么用Feign三、实例3.1、原生使用方式3.2、结合 Spring Cloud 使用方式四、探索Feign五、总结一、什么是Feign Feign ...
    99+
    2022-11-12
  • JavaAQS的实现原理详解
    目录使用lockSyncacquireNonfairSync.tryAcquireFairSync.tryAcquireacquireQueuedacquireQueuedunloc...
    99+
    2023-05-14
    Java AQS原理 Java AQS实现 Java AQS
  • 详解IOS WebRTC的实现原理
    目录概述P2P连接模式WebRTC的服务器与信令WebRTC的NAT/防火墙穿越技术概述 它在2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标...
    99+
    2022-05-15
    IOS WebRTC
  • 详解Java Synchronized的实现原理
    目录SynchronizedSynchronized的使用方式Synchronized的底层实现1.Java对象头2.Monitor3.线程状态流转在Monitor上体现Synchr...
    99+
    2022-11-13
  • 详解C# ConcurrentBag的实现原理
    目录一、ConcurrentBag类二、 ConcurrentBag线程安全实现原理2.1、ConcurrentBag的私有字段2.2、用于数据存储的ThreadLocalList类...
    99+
    2022-11-12
  • NodeJS实现单点登录原理解析
    目录什么是单点登录单点登录原理NodeJS 演示三个不同的服务首次访问跳转至登录页应用A判断登录态,跳转到SSO认证服务器认证服务器判断登录态,渲染登录页校验用户信息,创建令牌从认证...
    99+
    2022-11-13
  • 详解Java中跳跃表的原理和实现
    目录一、跳跃表的引入二、算法分析1.时间复杂度2.空间复杂度三、跳跃表介绍四、跳跃表的实现1.数据结构定义2.查找3.插入4.删除五、实战1.代码2.测试结果一、跳跃表的引入 对有序...
    99+
    2022-12-27
    Java实现跳跃表 Java跳跃表原理 Java跳跃表
  • 详解C++ 的STL迭代器原理和实现
    1. 迭代器简介 为了提高C++编程的效率,STL(Standard Template Library)中提供了许多容器,包括vector、list、map、set等。然而有些容器(...
    99+
    2022-11-12
  • PHPLaravel门面的实现原理详解
    目录环境原理环境 Laravel 5.4 原理 在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口,使得我们可以不用new这些类出来,就可...
    99+
    2023-02-09
    PHP Laravel门面原理 Laravel门面原理 Laravel门面
  • OpenMP Parallel Construct的实现原理详解
    目录Parallel 分析——编译器角度深入剖析 Parallel 动态库函数参数传递动态库函数分析参数传递分析汇编程序分析GOMP_parallel_sta...
    99+
    2023-01-28
    OpenMP Parallel Construct原理 OpenMP Parallel Construct源码 OpenMP Parallel Construct
  • 详解Android中Handler的实现原理
    在 Android 中,只有主线程才能操作 UI,但是主线程不能进行耗时操作,否则会阻塞线程,产生 ANR 异常,所以常常把耗时操作放到其它子线程进行。如果在子线程中需要更新 ...
    99+
    2022-06-06
    handler Android
  • C++中function的实现原理详解
    目录前言自己实现function前言 类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操...
    99+
    2022-12-09
    C++ function实现原理 C++ function原理 C++ function
  • 用nodejs的实现原理和搭建服务器(动态)
    今天是我学习的Node.js的第二天,所谓的node.js其实它是javascript编写的服务器的语言,同时它又是属于后台的框架,是一个开放性的平台。 一、相关理论知识: 我们可以用requre来引入模块...
    99+
    2022-06-04
    原理 服务器 动态
  • Node.js开启Https的实践详解
    一、首先要去腾讯云申请 申请成功后,你直接下载证书就可以用了。 二、配置nginx 在/etc/nginx/conf.d/下加入你的域名配置比如xxx.com.conf,内容如下 server {...
    99+
    2022-06-04
    详解 Node js
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作