使用openssl和nodejs搭建本地https服务

  本地开发有时会遇到必须使用https服务的情况,这里介绍一下使用openssl自签名证书,并使用nodejs开启https服务。

  1. 安装openssl

  http://slproweb.com/products/Win32OpenSSL.html可以找到openssl安装包,可以根据介绍下载对应版本安装,安装完成后将安装位置bin目录的文件路径添加到系统环境变量,此时就可以在全局使用openssl指令,打开命令行输入`openssl -version`查看openssl是否正确安装。安装完成后,选择一个存放证书的位置,打开控制台通过openssl生成证书。

  生成证书的步骤主要包含创建本地CA机构、创建服务器证书和创建客户端证书。

  2.生成证书

  在创建证书的过程中,会要求输入密码和证书信息(浏览器地址左侧有一个锁,点开后选择证书看到的信息),密码在输入过程中,控制台不会有任何显示。输入信息需要填写国家(ZH)、省市、机构等信息,由于自己签名并没有公网的可认证性,所以这些信息随便填都可以。后面会要求输入密码生成证书,所以需要记住密码。

  CA:

  生成私钥:

openssl genrsa -out ca-key.pem -des 1024

  生成公钥:

openssl req -new -key ca-key.pem -out ca-csr.pem

  生成证书:

openssl x509 -req -in ca-csr.pem -signkey ca-key.pem -out ca-cert.pem

  查看文件夹中应该会有 ca-key.pem 、 ca-csr.pem、 ca-cert.pem三个文件,如果其中有步骤出现操作,将这一段指令重新输入即可覆盖原文件。

  服务端:

  服务端生成公钥需要读取配置文件,创建openssl.cnf文件在统计目录下,内容为:

      [req]
          distinguished_name = req_distinguished_name
          req_extensions = v3_req  

          [req_distinguished_name]
          countryName = ZH
          countryName_default = CN
          stateOrProvinceName = BeiJing
          stateOrProvinceName_default = BeiJing
          localityName = ChengDu
          localityName_default = YaYunCun
          organizationalUnitName  = public section
          organizationalUnitName_default  = Domain Control Validated
          commonName = Internet Widgits Ltd
          commonName_max  = 64  

          [ v3_req ]
          # Extensions to add to a certificate request
          basicConstraints = CA:FALSE
          keyUsage = nonRepudiation, digitalSignature, keyEncipherment
          subjectAltName = @alt_names  

          [alt_names]
          IP.1 = 127.0.0.1

  上述信息也是证书相关的信息,后面的值都是随意写的,替换与否都没有关系。

  生成私钥:

openssl genrsa -out server-key.pem 1024

  生成公钥:

openssl req -new -key server-key.pem -config openssl.cnf -out server-csr.pem

  生成证书:

openssl x509 -req -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -in server-csr.pem -out server-cert.pem -extensions v3_req -extfile openssl.cnf

  客户端:

  搭建https服务器不需要客户端证书,生成指令和上面类似:

  生成私钥:

openssl genrsa -out client-key.pem

  生成公钥:

openssl req -new -key client-key.pem -out client-csr.pem

  生成证书:

openssl x509 -req -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -in client-csr.pem -out client-cert.pem

  3. 使用nodejs搭建https服务

  关键部分是https.createServer传递的options参数:

let options = {
  key: fs.readFileSync(‘./server-key.pem‘),
  ca: [fs.readFileSync(‘./ca-cert.pem‘)],
  cert: fs.readFileSync(‘./server-cert.pem‘)
};

  使用https模块和fs模块,搭建服务器访问本地html文件:

const https = require(‘https‘);
const fs = require(‘fs‘);
const url = require(‘url‘)
// 引入证书
let options = {
  key: fs.readFileSync(‘./server-key.pem‘),
  ca: [fs.readFileSync(‘./ca-cert.pem‘)],
  cert: fs.readFileSync(‘./server-cert.pem‘)
};
// 创建https服务
https.createServer(options,function(req,res){
  // 获取请求文件路径
  var pathname = url.parse(req.url).pathname;
  // 设置默认访问index.html文件
  if(pathname == ‘/‘) {
    pathname = ‘/index.html‘;
  }
  // 读取文件,并设置为html类型,返回给浏览器
  fs.readFile(__dirname + pathname, function (err, data) {
    if (err) {
      if(pathname == ‘/favicon.ico‘) {
        res.writeHead(200, {‘Content-Type‘: ‘text/html; charset=utf-8;‘});
        res.end();
      }
      console.error(err);
      res.writeHead(404, {‘Content-Type‘: ‘text/html‘});
    } else {
      res.writeHead(200, {‘Content-Type‘: ‘text/html; charset=utf-8;‘});
      res.write(data.toString());
    }
    res.end();
  });
// 监听本地3000端口
}).listen(3000,‘127.0.0.1‘);

  当然,使用框架也可以更改为https服务,例如express或者koa2.

  例如koa2,在bin目录www文件中替换以下为代码:

const https = require(‘https‘);
    const fs = require(‘fs‘);
    let options = {
      key: fs.readFileSync(‘./keys/server-key.pem‘),
      ca: [fs.readFileSync(‘./keys/ca-cert.pem‘)],
      cert: fs.readFileSync(‘./keys/server-cert.pem‘)
    };
    // 将原本开启服务的代码注释更换为以下部分,根据需求监听端口
    https.createServer(options,function(req,res){
      res.writeHead(200);
      res.end(app.callback());
    }).listen(3000,‘127.0.0.1‘);

原文地址:https://www.cnblogs.com/zzmiaow/p/10201035.html

时间: 2024-10-06 00:31:30

使用openssl和nodejs搭建本地https服务的相关文章

搭建HTTP/HTTPS服务

1.建立httpd服务器(基于编译的方式进行),要求: 提供两个基于名称的虚拟主机: (a)www1.itab.com,页面文件目录为/web/vhosts/www1:错误日志为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access: (b)www2.itab.com,页面文件目录为/web/vhosts/www2:错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access: (

web前端效率提升-nginx+nodejs搭建本地生态

1.起因 编写的项目是一个偏向于后台管理的web系统,使用了angular框架,在绑定数据的时候就依赖于后台的接口格式. 以前是后台写好接口后,我在绑定,在这之前一些逻辑是没法做的,有时候后台接口给的慢,就要绑定假数据写死在js里面, 感觉非常被动,后台接口.服务器出个错什么的,我的进度就要被拖延,返回的格式不友好,或者返回的格式和传递的格式不一样的时候,我还要转格式. 人家拍拍屁股说接口写好了,回家休息,我就要加班来写代码. 2.解决思路 返回格式和接受格式,已表单提交为例 <input ng

利用Docker搭建本地https环境的完整步骤

利用Docker搭建本地https环境的完整步骤 这篇文章主要给大家介绍了关于如何利用Docker搭建本地https环境的完整步骤,文中通过示例代码将实现的步骤介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 什么是 HTTPS 我们都知道 Web App 的运行都是建立在网络应用层 HTTP 协议的,HTTP 协议能够进行客户端和服务器之间的请求和返回.但是这个过程是明文传输的,当请求被抓包后传输内容很容易被篡改,这对用户的安全性来说是极其严重的威胁.PWA 应

微信小程序开发入门(一),Nodejs搭建本地服务器

1.  如何模拟真实环境中,读取服务端数据,首先需要使用Nodejs搭建一个本地服务器的环境. 在搭建web服务器之前,需要先安装node.js(安装版本最好为6.9.x) 安装后node.js,接下来就需要安装http的镜像文件 npm install http-server -g(windows下)sudo npm install http-server -g(linux和mac下)接下来在桌面创建一个文件夹 cd 文件夹名字http-server这时候,就会显示在8080端口下运行的一个本

如何搭建一个 HTTPS 服务端

关于 HTTPS 的基本原理大家都已经不再陌生,今天和大家说说如何搭建一个支持 HTTPS 的服务端. 服务端的 HTTPS HTTPS 已经几乎成为了当前互联网推荐的通信方式,它能最大化保证信息传输的安全,从去年苹果的强制 HTTPS ,到如今各大网站都支持了 HTTPS.它会越来越普及. 之前写过几篇关于 HTTPS 原理的文章,有用户留言希望了解一些如何在服务端搭建 HTTPS 服务的内容,这次就和大家聊聊这个话题. SSL 证书 搭建一个 HTTPS 站点,第一步要做的就是申请 SSL

为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务

昨天测试开发微信小程序,才发现微信也要求用HTTPS加密数据,想来是由于之前苹果的ATS审核政策的缘故吧,微信想在苹果上开放小程序必然也只能要求开发者必须使用HTTPS了,于是在服务器上测试安装Nginx+HTTPS服务. 安装 HTTPS 最麻烦的问题应该就是获取证书了,证书感觉种类也挺复杂的,有好几种,单域.泛域.多域...还有个种标准乱七八糟的感觉,而且收费很高,还是每年买的. 现在各个云服务商也都有提供各种基础功能的免费证书,但似乎很多只对单域免费,这里的单域是指每个二级域名都算是一个域

centos 如何用 rsyslog 搭建本地日志服务(续1: omprog模块与php deamon的配合使用)

上一篇说到了如何用 rsyslog 搭建本地的日志服务,地址在这里,没有看的童鞋可以先瞅一眼 : http://www.cnblogs.com/smallrookie/p/5677004.html 显然这个是比较简单粗暴的,如果没有做过什么特殊的输出配置,所有的输出都会写到一个文件里面,当然 rsyslog 是支持关键词匹配,然后把日志定向的写到你想写的文件里面的,如果你只有数量比较小的接口并且一段时间内,接口的数量不会发生变更,那么使用这种方式是OK的.不过实际情况是,我们通常要处理的是大量的

(转)nodejs搭建本地http服务器

本文转载自:http://www.cnblogs.com/shawn-xie/archive/2013/06/06/3121173.html 由于不做php相关的东西,懒得装apache,干脆利用nodejs搭建一个本地的服务器用于测试. nodejs这玩意儿吧,对做前端的介入后端简直就是一把利器.而且目前,nodejs也越来越有商用价值. nodejs其实是非常底层的,从功能上说,它既是apache也是php.像搭建http服务器这种功能,本来是apache已经封装好的,但nodejs需要我们

【小程序】搭建本地https服务器(windows)

(一)用json-server搭建简单的服务器 (搭建出来的服务器地址为localhonst:3000) 1.新建Mockjson文件夹,进入该文件夹目录,运行命令 npm install -g json-server    2.在该目录中新建news.json文件 { "news":{ "type":1, "title":"新闻资讯", "url":"", "list&quo