您当前的位置: 首页 > 

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

nodejs 生成证书 和 wss server

qianbo_insist 发布时间:2021-04-12 21:58:30 ,浏览量:0

1 生成私钥key文件和crt文件

首先安装openssl 64位,找到目录,在bin下面有openssl可执行程序

当前目录下生成private.pem openssl genrsa 1024 > private.pem //注意环境变量的设置,否则会出现错误,这里请改成自己的目录 set OPENSSL_CONF=I:\OpenSSL-Win64\bin\cnf\openssl.cnf // #私钥文件再生成CSR证书签名 openssl req -new -key ./private.pem -out csr.pem #通过私钥文件和CSR证书签名生成 509 openssl x509 -req -days 365 -in csr.pem -signkey private.pem -out server.crt

用根证书再生成证书也是可以的

当然也可以用以下全步骤生成 //生成CA私钥 openssl genrsa -out ca.key 1024 //生成csr文件 openssl req -new -key ca.key -out ca.csr //生成自签名证书 openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt //生成server.csr文件 openssl req -new -key server.key -out server.csr //生成带有ca签名的证书 openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

nodejs 代码
var https=require('https');
var ws=require('ws');
var fs=require('fs');
var keypath=process.cwd()+'/server.key';//我把秘钥文件放在运行命令的目录下测试
var certpath=process.cwd()+'/server.crt';//console.log(keypath);
console.log(certpath);
 
var options = {
  key: fs.readFileSync(keypath),
  cert: fs.readFileSync(certpath),
  //passphrase:'1234'//如果秘钥文件有密码的话,用这个属性设置密码
};
 
var server=https.createServer(options, function (req, res) {//要是单纯的https连接的话就会返回这个东西
    res.writeHead(403);//403即可
    res.end("This is a  WebSockets server!\n");
}).listen(8544);
 
//https服务器创建websocket 的wss服务
var wss = new ws.Server( { server: server } );

wss.on( 'connection', function ( socket ) {
    socket.on( 'message', function ( message ) {
        //console.log( message );
        if(message === "bye"){
            console.log("client out");
        	socket.close();
        }
        socket.send(message);
    });
});

//利用nodejs再建立一个https文件,为什么呢,因为wss 不能直接由文件来链接,跨域了,wss只能由https来链接,但是在http下ws代码是可以直接访问wsserver的,因为html文件默认是在http协议下,这个一定要搞清楚

//命名位testserver.js

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

//同步读取密钥和签名证书
var options = {
    key:fs.readFileSync('./server.key'),
    cert:fs.readFileSync('./server.crt')
}

var app = express();
var httpsServer = https.createServer(options,app);
var httpServer = http.createServer(app);
app.use(express.static(__dirname));
app.get('/',function(req,res,next){
        res.send('Hello Express+https');
});
app.get("/so",function(req,res,next){
   res.render("socket.html");
});
//https监听3000端口
httpsServer.listen(3000);
//http监听3001端口
httpServer.listen(3001);

写一个html文件,放在根目录下,命名为socket.html



   
   
   wss connect
   
      
         function WssConnect()
         {
            if ("WebSocket" in window)
            {
               
               // 打开一个 web socket
               var wss = new WebSocket("wss://127.0.0.1:8554");
                            //,{protocolVersion: 8,
                            //origin: 'https://localhost:8554',
                           // rejectUnauthorized: false});

               wss.onopen = function()
               {
                   
                  // Web Socket 已连接上,使用 send() 方法发送数据
                  wss.send("this is a test");
               };
                
               wss.onmessage = function (evt) 
               { 
                  var received_msg = evt.data;
                  alert(received_msg);
               };
                
               wss.onclose = function()
               { 
                  alert("连接已关闭..."); 
               };
            }
            
            else
            {
               // 浏览器不支持 WebSocket
               alert("您的浏览器不支持 WebSocket!");
            }
         }
      
        
   
   
      
      
         connect wss 
      
      
   

分别执行node testserver , node test ,在浏览器里执行https://127.0.0.1:3000/socket.html, 发现返回了数据 在这里插入图片描述 ok,实验成功。

关注
打赏
1663161521
查看更多评论
立即登录/注册

微信扫码登录

0.0377s