`
JerryWang_SAP
  • 浏览: 1003773 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

使用openSSL构造一个支持https的nodejs服务器

阅读更多

首先通过下面的链接下载openSSL
https://slproweb.com/products/Win32OpenSSL.html

 
 

下载完毕后,执行openssl进入交互式界面:

 

 

使用命令生成privatekey.pem 1024意思是1024位长度。

openssl genrsa -out privatekey.pem 1024

 

生成的privatekey.pem,打开看一看长啥样:

 
 

什么是pem文件?

.pem - Defined in RFCs 1421 through 1424, this is a container format that may include just the public certificate (such as with Apache installs, and CA certificate files /etc/ssl/certs), or may include an entire certificate chain including public key, private key, and root certificates. Confusingly, it may also encode a CSR (e.g. as used here) as the PKCS10 format can be translated into PEM. The name is from Privacy Enhanced Mail (PEM), a failed method for secure email but the container format it used lives on, and is a base64 translation of the x509 ASN.1 keys.

简单的说,就是一个密钥文件。

第二步,基于第一步生成的密钥文件生成一个证书请求:
openssl req -new -key privatekey.pem -out certrequest.csr

 

如果懒得维护证书明细,直接敲回车,会自动填入默认值:

 
 
 

最后基于第一步生成的密钥和证书请求生成一个数字证书:当然颁发机构就是自己了,仅用于测试目的。
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem

 
 

至此我们有了privatekey.pem和Certificate.pem两个证书了。

 

下面是我https服务器的代码,很简单,只有50几行:

var app = require('express')();
var fs    = require('fs');
var https = require('https');

var httpOptions =  {
 key: fs.readFileSync("keys/privatekey.pem"),
 cert: fs.readFileSync("keys/certificate.pem")
}

var server = https.createServer(httpOptions, app);
var io = require('socket.io')(server);

console.log("https server listens on port 8080...");

server.listen(8080);

function print_env(){
  console.log(process.env);
}

app.get('/', function (req, res) {

  var response = "Hello World";
  res.send(response);
});

app.get('/env', function (req, res) {

  print_env();
  // res.sendFile(__dirname + '/index.html');
  var response = JSON.stringify(process.env);
  res.send(response);
});

app.get('/redis', function (req, res) {

  var redisClient = require("./redisClient");
  
  function callback(response){
    // var response = "ok";//JSON.stringify(process.env);
    res.send(response);
  }
  redisClient.test(callback);
});

io.on('connection', function (socket) {
  console.log("connect comming from client: " + socket.id);
  socket.emit('messages_jerry', { hello: 'world greeting from Server!' });
  socket.on('messages', function (data) {
    console.log("data received from Client:" + JSON.stringify(data,2,2));
  });
});

从代码里不难理解这两个pem文件是如何用在https服务器里的。
最后在浏览器里测试。因为是自己颁发的证书,没有经过CA验证,所以浏览器会显示一个警告。

 

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

 

 
0
0
分享到:
评论

相关推荐

    利用openssl和curl库获取https服务端证书

    其次,curl是一个用于传输数据的命令行工具,支持多种协议,包括HTTPS。虽然curl主要用于数据传输,但它也可以用于提取服务器的证书信息: 1. 使用以下命令,同样替换`example.com`: ``` curl -s --head --ca...

    使用 OpenSSL 创建生成CA 证书服务器客户端证书及密钥

    在网络安全中,OpenSSL 是一个强大的安全套接层 (SSL) 工具包,它包含了各种用于处理加密通信所需的工具,包括生成证书、密钥以及执行加密操作。本文将详细介绍如何使用 OpenSSL 创建和管理CA证书、服务器证书和...

    基于ffmpeg4.3.1编译的android动态库--开启了openssl(支持https)

    这几天csdn上也下载了好几个库,不是架构不全就是不支持https,下载资源里说明也不清楚,期间浪费我不少积分,这方便的资源传的人很少,即使传的话基本也不支持https,只好自己编译。生成的openssl库文件已经放到各...

    windows下Curl+Openssl访问https实例

    在Windows环境下,使用Curl和OpenSSL访问HTTPS网站是一个常见的任务,特别是在开发涉及网络通信的C++应用程序时。本文将详细介绍如何在Windows下利用Curl和OpenSSL库实现HTTPS访问,并提供一个实例来帮助理解这一...

    Poco+openssl编译,支持https

    编译完成后,你会得到一个包含Poco库和OpenSSL支持的静态或动态库文件。将这些库文件链接到你的C++项目中,然后就可以使用Poco的`NetSSL`模块来创建HTTPS连接。例如,你可以创建一个`HTTPSClientSession`对象,设置...

    openssl、libcurl、https访问服务器进行验证,并且得到服务器证书

    1. **生成自签名证书**:如果你想搭建一个测试服务器,可以使用openssl生成自签名证书。通过`openssl req`命令创建证书请求,然后用`openssl x509`签发证书。 2. **查看证书信息**:使用`openssl s_client`连接到...

    支持https的libcurl静态库(openssl)

    总结来说,这个压缩包提供了一个预编译的、用于Windows 32位系统的、静态链接的libcurl库,它集成了openssl,支持HTTPS通信,并使用了Windows的SSPI和WinSSL,适用于那些希望在C/C++项目中方便、安全地处理HTTPS请求...

    OpenSSL安装包,可用于HTTPS,鉴权证书生成

    通过安装这两个文件——Win64OpenSSL-1_1_1h.exe和Win64OpenSSL-1_1_1h.msi,用户能够在Windows平台上搭建一个支持SSL/TLS的环境,进而为Web服务器配置HTTPS服务。 1. **SSL/TLS协议**:SSL(Secure Sockets Layer...

    openssl详细使用教程

    OpenSSL 是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。 1. 获取百度服务器的证书 使用 OpenSSL 可以获取...

    nodejs使用https的步骤发布服务

    在IT行业中,Node.js是一个非常流行的JavaScript运行环境,它允许开发者在服务器端使用JavaScript编写代码。在许多场景下,为了确保数据传输的安全性,我们通常会使用HTTPS协议来构建服务。这篇博客“nodejs使用...

    C++ socket访问HTTP,OpenSSL访问HTTPS

    本代码使用MFC方式实现了如下功能: 1> 原生socket POST访问HTTP站点。... 2> 集成OpenSSL POST访问HTTPS站点。... 文件包内含有完整的,编译好的OpenSSL开发需要的头文件以及库文件等,可以方便的使用在您的项目中。

    openssl实现服务器和客户端

    在IT行业中,OpenSSL是一个非常重要的工具,它主要用于加密通信,包括实现服务器和客户端之间的安全连接。这个主题涉及到网络通信的基础、SSL/TLS协议、证书管理以及编程接口等多个知识点。 首先,OpenSSL是一个...

    window上使用openssl和libcurl发送https的post请求 并使用MD5和base64加密的工程

    window上使用openssl和libcurl发送https的post请求 并使用MD5和base64加密的工程,包含自己编译的openssl和libcurl静态库文件,可直接使用,详情可以看一下readme文件

    libcurl支持https访问curl支持openssl协议编译好的库(包含openssl)

    libcurl 支持openssl协议 编译好的库和头文件以及openssl库文件。可以支持https地址的访问。备注:可能代码需要制定不验证ssl证书(curl_easy_setopt(easy_handle, CURLOPT_SSL_VERIFYPEER, 0L);)

    OpenSSL生成的ssl证书

    OpenSSL是一个开源的库,包含了各种加密算法,它提供了生成SSL证书的功能。本教程将详细介绍如何使用OpenSSL在Windows环境下为Nginx服务器配置HTTPS服务,以及如何生成和管理SSL证书。 首先,了解SSL证书的作用。...

    交叉编译openssl,使arm设备的qt程序能支持https请求

    用自带的交叉编译工具对openssl源码进行交叉编译(该过程可参考百度),生成对应的静态和动态库,然后将生成的库拷贝至arm设备的QT库锁存放的位置,这样的目的是当我们在设备上跑qt程序时,使用https请求,不会出现不...

    基于openssl 自行签发https 协议证书 openssl+nginx实现https自签有效加密实战记录

    openssl是一个功能强大的工具,它可以用来生成证书、加密和解密数据等。文章中使用了openssl生成根密钥、根证书、私钥和服务器证书。 知识点二:根证书的生成 根证书是证书链的起点,它是自签发证书的基础。文章中...

    QTwindows下OpenSSL的使用

    这只是一个基本的示例,实际应用中可能需要更复杂的设置,如加载服务器证书、处理SSL错误等。 为了调试或查看OpenSSL的日志,可以设置环境变量`OPENSSL_DEBUG_LOG`指向一个日志文件,OpenSSL将在运行时将调试信息...

    使用 OpenSSL API 进行安全编程

    OpenSSL 是一个强大的安全套接字层 (SSL) 和传输层安全 (TLS) 软件库,提供了各种加密算法、数字证书、哈希函数和随机数生成等功能,广泛应用于网络安全通信。它不仅包含了用于安全通信的 API,还提供了一系列的...

    使用OpenSSL来制作证书,在IIS中配置HTTPS(SSL)笔记.pdf

    本文档详细介绍了如何使用OpenSSL工具为基于Internet Information Services (IIS) 的Web服务器创建自签名证书的过程,包括生成服务器端证书和客户端证书,以实现双向认证。 #### 二、准备工作 在开始之前,请确保...

Global site tag (gtag.js) - Google Analytics