精华内容
下载资源
问答
  • Websocket配置证书支持wss

    千次阅读 2021-11-10 15:26:50
    ssw=websocket+ssl 域名申请了ssl证书 server { server_name ws.zhikangle.alberich.tech; error_log /var/log/nginx/ws.alberich_error.log error; access_log /var/log/nginx/ws.alberich_access.log; ...

    ssw=websocket+ssl
    域名申请ssl证书,如果项目还没有配置https证书可以看这里>>>使用Certbot申请ssl证书

    server {
        server_name www.xx.com;
        error_log  /var/log/nginx/www.xx.error.log ;
        access_log /var/log/nginx/ws.xx.access.log;
    
       location / {        # 新增代理
         proxy_pass http://123.57.1.190:8080;  # 转发到你本地的8080端口
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";    # 升级协议头
       }
        # 域名的ssl认证
       listen 443 ssl; # managed by Certbot
       ssl_certificate /etc/letsencrypt/live/www.xx.com/fullchain.pem; # managed by Certbot
       ssl_certificate_key /etc/letsencrypt/live/www.xx.com/privkey.pem; # managed by Certbot
       include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
       ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    }
    
    展开全文
  • https证书 websocket配置

    千次阅读 2018-11-17 19:06:48
    1 通过阿里云申请https证书 2 免费证书 3 几分钟后审核通过,将证书部署到服务器上: 4 nginx配置 upstream wowcp{ server 127.0.0.1:9511; } upstream wscp{ server 127.0.0.1:9513; } server { ...

    1 通过阿里云申请https证书
    图片描述

    2 免费证书
    图片描述

    3 几分钟后审核通过,将证书部署到服务器上:
    图片描述

    4 nginx配置

    upstream wowcp{
            server 127.0.0.1:9511;
    }
    upstream wscp{
            server 127.0.0.1:9513;
    }
    server {
            listen 443;
            server_name wow.0571sd.com;
            ssl on;
            ssl_certificate   cert/cert-1542189031524_wow.0571sd.com.crt;
            ssl_certificate_key  cert/cert-1542189031524_wow.0571sd.com.key;
            ssl_session_timeout 5m;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
            location /ws {  #websocket配置
                proxy_pass http://wscp;
                proxy_http_version 1.1;
                proxy_connect_timeout 4s;
                proxy_read_timeout 120s;
                proxy_send_timeout 10s;  
                proxy_set_header Upgrade $http_upgrade;  
                proxy_set_header Connection "Upgrade";
            }
            location / {
                proxy_pass http://wowcp;
            }    
    }

    5 重启nginx
    6 客户端连接websocket地址如:
    'wss://wow.0571sd.com/ws?ct=caipiao'

    展开全文
  • 最近在研究微信小程序的开发,中间遇到了不少问题,趟了不少坑,这里和大家分享一下我的一些经验,希望能大家提供一些帮助。

    〇、前言

    最近在研究微信小程序的开发,中间遇到了不少问题,趟了不少坑,这里和大家分享一下我的一些经验,希望能给大家提供一些帮助。


    一、微信小程序的websocket服务器搭建

    微信小程序的网络通信使用的是基于TCP的WebSocket协议,使用node.js中的http和websocket模块可以很快的进行搭建。代码比较简单这里贴出来,通读一下基本就能看懂。值得一提的是这里推荐使用TypeScript进行服务器端的开发(示例代码就是TypeScript写的),服务器程序如果不是强类型的话还是很容易出问题的……想想就很可怕……

    这一部分不是本文的重点,均以示例代码+注释带过。

    import * as websocket from "websocket";
    import * as http from "http";
    
    const WebSocketServer: typeof websocket.server = websocket.server;
    
    // 创建一个http Server
    let httpServer: http.Server = http.createServer((request, response) => {
        console.log("received a request");
        response.writeHead(404);
        response.end();
    });
    
    // 创建一个websocket Server,websocket Server需要建立在http server之上
    let wsServer: websocket.server = new WebSocketServer({
        httpServer: httpServer,
        autoAcceptConnections: true
    });
    
    // 事件监听
    wsServer.on("connect", (connection) => {
        console.log(">>>come from: " + connection.remoteAddress); // 显示连接客户端的ip地址
        connection.on("message", (message) => {
            console.log(message.type);
            console.log(">>>message: ", message); // 接收到信息的类型和内容,注意都是utf8编码
            connection.sendUTF(message.utf8Data); // 把接收到的信息发回去
        });
    
        connection.on("close", (reasonCode, description) => {
            console.log(connection.remoteAddress + " has disconnected.");
        });
    });
    
    // 启动服务器
    httpServer.listen(80, () => {
        console.log(">>>Http Server is listening on port 80!");
    });

    使用上述代码就可以非常方便的建立一个简单的服务器用于和微信小程序的通信,接下来简单的介绍一下微信小程序如何与服务器进行通信。

    微信小程序官方文档给出了以下几个API,具体请参阅  https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-socket.html



    下面还是用代码来体现用法,我们把他们写在onLoad事件里:

    onLoad: function () {
        this.setData({
    
        });
        var that = this;
        wx.connectSocket({
            url: 'ws://xxx.xxx.com' // 这里是服务器的地址
        }),
        wx.onSocketOpen(function (res) {
            // callback
            console.log("WebSocket连接已打开!"); // 打开WebSocket连接,在进行通信之前必须先打开一个连接
        }),
        wx.onSocketError(function (res) {  // WebSocket错误监听
            console.log('WebSocket连接打开失败,请检查!')
        }),
        wx.onSocketMessage(function (msg) { // WebSocket数据接收监听
            // CallBack
            console.log(msg);
        }),
        wx.onSocketClose(function () { // WebSocket关闭监听
            // callback
            console.log('WebSocket服务器已经关闭!');
        }),
        wx.sendSocketMessage({ // 向服务器发送数据,注意这个方法之必须在调用wx.connectSocket和wx.onSocketOpen回调之后
            data: "string" // 官方文档里data可以是string或者ArrayBuffer,但是注意这个ArrayBuffer并不是Array
        });
    }

    这里值得一提的是,官方文档关于 wx.sendSocketMessage 的说明中data的类型包含的ArrayBuffer并不是Array,如果你把data误写成Array类型的话在开发工具中调试不会报错且表现正常,但是到手机端就会 出现问题而且不会报错


    二、SSL证书申请和使用

    这一部分算是本文的重点了,首先说一下SSL证书是什么和为什么要SSL证书。

    SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。

    SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。

    SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL)安全协议是由Netscape Communication公司设计开发。该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装服务器证书就可以激活该功能了),即通过它可以激活SSL协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。数位签名又名数字标识、签章 (即 Digital Certificate,Digital ID ),提供了一种在网上进行身份验证的方法,是用来标志和证明网路通信双方身份的数字信息文件,概念类似日常生活中的司机驾照或身份证相似。 数字签名主要用于发送安全电子邮件、访问安全站点、网上招标与投标、网上签约、网上订购、安全网上公文传送、网上办公、网上缴费、网上缴税以及网上购物等安全的网上电子交易活动。

    为什么要SSL证书其实也很简单,微信的官方文档里面对网络请求和通信有以下要求:



    简单总结:

    1.微信小程序使用的网络连接必须是https加密的安全连接(需要SSL证书)

    2.微信小程序使用的服务器地址只能是备案过的域名

    3.微信小程序使用的服务器地址不能包括端口(由于采用了https所以默认是443, 不是80不是80不是80!

    4.开发过程中可以没有以上限制

    SSL证书很多是要收费的,部分免费的微信小程序还不支持……

    这里给大家推荐一个网站,这里提供的免费SSL证书可以在微信小程序中使用,但是每3个月需要renew一次: https://www.sslforfree.com/

    首先我们在主页输入需要申请的域名(SSL For Free的证书只能绑定一个域名),然后点Create。



    在进行了域名检查之后会出现如下的验证方式,用以确认你是申请域名的所有者,三种方式分别是FTP自动验证(输入FTP信息自动确认)、人工验证(上传指定文件通过是否能够访问进行验证)、DNS解析验证(在域名解析中添加txt记录进行验证)。前面两种方式比较方便(可能?),但是实测还是挺容易失败的,这里推荐用第三种方式进行验证,下面进行简单说明。



    这里以腾讯云作为案例,在点击DNS验证之后会出现如下页面:



    马赛克的部分就是需要添加的txt记录,这里我们进入腾讯云的云解析对DNS解析进行记录添加,如下图添加一个txt记录:



    主机记录这里需要着重说明一下,比如我们需要绑定的域名是abc.com或者www.abc.com这样的一级域名,这里就需要按照要求写成_acme-challenge.abc.com;但是如果是123.abc.com这样的二级域名,那么这里按要求就是_acme-challenge.123.abc.com。



    线路类型忽略即可,记录值填写要求的string,也就是页面截图中打马赛克的部分,TTL用默认值,然后记得保存。



    完成以上操作之后我们回到SSL For Free页面,等待10分钟之后(和TTL有关,但是也可能要更久)点击第三步中的链接,如果链接打开的一个页面中有要求的String,那么就说明txt记录添加成功,可以点击最下面的按钮进行下载。同时我们可以在下载的页面里面填入自己的电子邮箱,以便在SSL证书到期时自动提醒。



    下载成功之后记得把之前的域名解析换成正常的设定指向自己的服务器。

    下载的文件是一个压缩包,解压之后应该包括如下三个文件,这三个文件在一起可以作为一个有效证书,同时node.js可以直接使用这三个文件来创建https服务器。



    下面是使用了这三个文件的https服务器的代码:

    import * as websocket from "websocket";
    import * as https from "https";
    import * as fs from "fs"; // 需要引用node.js的fs来读取三个SSL证书文件
    
    const WebSocketServer: typeof websocket.server = websocket.server;
    
    // https Server
    let options: any = {
        key: fs.readFileSync("./key/private.key", "utf8"), // 这里设置三个证书的位置,记得指明“utf8”编码,key、cert、ca三个属性必须都有且对应三个文件
        cert: fs.readFileSync("./key/certificate.crt", "utf8"),
        ca: fs.readFileSync("./key/ca_bundle.crt", "utf8")
    };
    
    let httpsServer: any = https.createServer(options, (request, response) => { // 注意这里已经是https了
        console.log("received a request");
        response.writeHead(200);
        response.end("hello world\n");
    });
    
    // websocket Server
    let wsServer: websocket.server = new WebSocketServer({
        httpServer: httpsServer, // 对应的这里的httpServer后面也应该是对应的httpsSrver(名称无所谓但是本体应该是httpsServer)
        autoAcceptConnections: true
    });
    
    // 事件监听
    wsServer.on("connect", (connection) => {
        console.log(">>>come from: " + connection.remoteAddress);
        connection.on("message", (message) => {
            console.log(message.type);
            console.log(">>>message: ", message);
            connection.sendUTF(message.utf8Data); // 把接收到的信息发回去
        });
    
        connection.on("close", (reasonCode, description) => {
            console.log(connection.remoteAddress + " has disconnected.");
        });
    });
    
    // 启动服务器
    httpsServer.listen(443, () => { // 端口
        console.log(">>>Https Server is listening on port 443!");
    });

    微信小程序的通信与http是一致的,但是这里需要提醒,这个监听端口必须是443,因为微信小程序要求的服务器地址是https://xxx.yyy.com 这样的只能是域名不能带端口且开头是https,那端口一定是默认的443,说默认端口是80的我也不知道是为什么……如果有谁知道原因还请留言。

    以上便是本文的全部内容,个人水平有限,如有表述和技术错误欢迎指正。
    展开全文
  • Nginx Websocket 配置

    2021-03-25 22:46:26
    Websocket 简介 WebSocket 是一种基于 TCP 连接的全双工通信的协议,其工作在应用层,建立连接的时候通过复用 Http 握手通道,完成 Http 协议的切换升级,即切换到 WebSocket 协议,协议切换成功后,将不再需要...

    Websocket 简介

    WebSocket 是一种基于 TCP 连接的全双工通信的协议,其工作在应用层,建立连接的时候通过复用 Http 握手通道,完成 Http 协议的切换升级,即切换到 WebSocket 协议,协议切换成功后,将不再需要客户端发起请求,服务端就可以直接主动向客户端发送数据,实现双向通信。

    和 Http 相比,WebSocket有以下优点:

    • WebSocket 是双向通信协议,可以双向发送或接受信息。HTTP是单向的,只能由客户端发起请求时,服务器才能响应,服务器不能主动向客户端发送数据。
    • WebSocket 可以和 HTTP Server 共享相同端口。
    • WebSocket 协议可以更好的支持二进制,可以直接传送二进制数据。
    • 同时WebSocket协议的头部非常小,服务器发到客户端的数据包的包头,只有2~10个字节(取决于数据包的长度),客户端发送服务端的包头稍微大一点,因为其要进行掩码加密,所以还要加上4个字节的掩码。总得来说,头部不超过14个字节。
    • 支持扩展,用户可以扩展协议实现自己的子协议。

    Websocket 建立过程

    客户端: 申请协议升级

    首先由客户端发起协议升级请求, 根据WebSocket协议规范, 请求头必须包含如下的内容:

    GET / HTTP/1.1
    Host: localhost:8080
    Origin: http://127.0.0.1:3000
    Connection: Upgrade
    Upgrade: websocket
    Sec-WebSocket-Version: 13
    Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw==
    
    • 请求行: 请求方法必须是GET, HTTP版本至少是1.1。
    • 请求必须含有Host。
    • 如果请求来自浏览器客户端, 必须包含Origin。
    • 请求必须含有 Connection, 其值必须含有 “Upgrade” 记号。
    • 请求必须含有 Upgrade, 其值必须含有 “websocket” 关键字。
    • 请求必须含有 Sec-Websocket-Version, 其值必须是 13。
    • 请求必须含有 Sec-Websocket-Key, 用于提供基本的防护, 比如无意的连接。

    服务器: 响应协议升级

    服务器返回的响应头必须包含如下的内容:

    HTTP/1.1 101 Switching Protocols
    Connection:Upgrade
    Upgrade: websocket
    Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU=
    
    • 响应行: HTTP/1.1 101 Switching Protocols。
    • 响应必须含有 Upgrade, 其值为 “weboscket”。
    • 响应必须含有 Connection, 其值为 “Upgrade”。
    • 响应必须含有 Sec-Websocket-Accept, 根据请求首部的 Sec-Websocket-key计算出来。。

    Sec-WebSocket-Key/Accept的计算

    Sec-WebSocket-Key 值由一个随机生成的16字节的随机数通过 base64(见 RFC4648 的第四章)编码得到的。
    例如, 随机选择的16个字节为:

    // 十六进制 数字1~16
    0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10
    

    测试代码如下:

    const list = Array.from({ length: 16 }, (v, index) => ++index)
    const key = Buffer.from(list)
    console.log(key.toString('base64'))
    // AQIDBAUGBwgJCgsMDQ4PEA==
    

    而 Sec-WebSocket-Accept 值的计算方式为:

    将 Sec-Websocket-Key 的值和 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 拼接
    通过 SHA1 计算出摘要, 并转成 base64 字符串。

    此处不需要纠结神奇字符串 258EAFA5-E914-47DA-95CA-C5AB0DC85B11, 它就是一个 GUID, 没准儿是写 RFC 的时候随机生成的。

    测试代码如下:

    const crypto = require('crypto')
    
    function hashWebSocketKey (key) {
      const GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
    
      return crypto.createHash('sha1')
        .update(key + GUID)
        .digest('base64')
    }
    
    console.log(hashWebSocketKey('w4v7O6xFTi36lq3RNcgctw=='))
    // Oy4NRAQ13jhfONC7bP8dTKb4PTU=
    

    Sec-WebSocket-Key的作用

    前面简单提到他的作用为: 提供基础的防护, 减少恶意连接, 进一步阐述如下:

    • Key 可以避免服务器收到非法的 WebSocket 连接, 比如 Http 请求连接到 Websocket, 此时服务端可以直接拒绝。
    • Key 可以用来初步确保服务器认识 ws 协议, 但也不能排除有的 Http服务器只处理 Sec-WebSocket-Key, 并不实现ws协议。
    • Key可以避免反向代理缓存。
    • 在浏览器中发起 ajax 请求, Sec-Websocket-Key 以及相关 header 是被禁止的, 这样可以避免客户端发送 ajax 请求时, 意外请求协议升级。
    • 最终需要强调的是: Sec-WebSocket-Key/Accept 并不是用来保证数据的安全性, 因为其计算/转换公式都是公开的, 而且非常简单, 最主要的作用是预防一些意外的情况。

    后端服务

    安装 node.js

    wget https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz
    tar -xJvf node-v14.16.0-linux-x64.tar.xz
    ln -s /root/node-v14.16.0-linux-x64/bin/node /usr/local/bin/node
    ln -s /root/node-v14.16.0-linux-x64/bin/npm /usr/local/bin/npm
    

    安装依赖

    npm install ws
    

    后端 websocket 服务部署

    本次实验后端服务 Http 和 Websocket 使用相同的 80 和 443 端口。在实际应用中有个好处,如果原先是提供的是 Http 服务,后来新增了 Websocket 服务,不需要暴露新的端口,也不需要修改防火墙规则。

    把 WebSocketServer 和 Http 绑定到同一个端口的关键代码是先获取创建的 http.Server 的引用,再根据 http.Server 创建 WebSocketServer。

    不管是 Http 还是 Websocket,客户端发送的都是标准的 Http 请求,都会先将请求交给 http.Server 处理。 WebSocketServer 会首先判断请求是不是 Websocket 请求,如果是,它将处理该请求,如果不是,该请求仍由 http.Server 处理。

    服务器代码:

    // app.js 文件
    // 导入相关模块
    const WebSocket = require('ws');
    const  http = require('http');
    
    // 使用 http 模块创建的 http.Server
    httpserver = http.createServer(function (request, response) {
        // 发送 HTTP 头部
        // HTTP 状态值: 200 : OK
        // 内容类型: text/plain
        response.writeHead(200, {'Content-Type': 'text/plain'});
    
        // 发送响应数据 "Hello World"
        response.end('Http Message: Hello World\n');
    }).listen(80); // 监听 80 端口, 根据 http.Server 创建 WebSocketServer
    
    
    //创建 WebSocketServer
    const WebSocketServer = WebSocket.Server;
    const wss = new WebSocketServer({
        server: httpserver //根据 http.Server 创建 WebSocketServer
    });
    
    wss.on('connection', function (ws) {
        ws.send("Websocket Send: Hello World")  //客户端连接成功后立即向客户端发送一条消息
        console.log(`WebSocket connection()`);
        ws.on('message', function (message) {  //收到客户端的消息
            console.log(`Websocket Received: ${message}`);
        })
    });
    
    console.log('WebSocket and Http Server started at port 80...');
    

    启动后端服务

    [root@ws1 ws-http-server]# node app.js 
    WebSocket and Http Server started at port 80...
    

    验证

    分别使用客户端验证 Http 和 Websocket 服务,后端服务器的地址为 192.168.1.141:

    • 当客户端未发起协议升级请求时,使用 Http 服务响应客户端。
    • 当客户端发起协议升级请求时,Websocket 会复用 Http 的握手通道,升级完成后,后续数据交换使用 Websocket。

    测试 Http 连接

    # curl -i http://192.168.1.141                                                            
    HTTP/1.1 200 OK
    Content-Type: text/plain
    Date: Thu, 25 Mar 2021 08:00:40 GMT
    Connection: keep-alive
    Keep-Alive: timeout=5
    Transfer-Encoding: chunked
    
    Http Message: Hello World
    

    测试 Websocket 连接

    # 方式一:使用 wscat(客户端 npm install wscat 安装)
    # wscat --connect ws://192.168.1.141                                                          
    Connected (press CTRL+C to quit)
    < Websocket Send: Hello World #接收到服务器的消息
    > send hello #向服务器发送消息
    
    # 方式二:使用 curl
    curl -i \
         --header "Upgrade: websocket" \
         --header "Sec-WebSocket-Key: AQIDBAUGBwgJCgsMDQ4PEA==" \
         --header "Sec-WebSocket-Version: 13" \
         --header "Connection: upgrade" \ #直接访问后端服务的 Websocket 需要带上该头部
      http://192.168.1.141 
    

    抓包查看交互报文,可以看到 Websocket 复用了 HTTP 的握手通道, 客户端通过 HTTP 请求与 WebSocket 服务器协商升级协议, 协议升级完成后, 后续的数据交换则遵照 WebSocket协议。

    在后端服务器上抓包:

    tcpdump -i any host 192.168.1.141 and port 80 -nn -w ws.pcap
    

    通过 Wireshark 软件打开查看:

    Nginx 配置

    生成自签名证书

    https 证书我们都在 CA 站点申请,并由 CA 机构颁发,本次实验使用 openssl 生成自签名 https 证书。

    [root@nginx-plus1 certs]# openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt   
    
    # 以下信息自行添加,可以随意
    Generating a 2048 bit RSA private key
    ....................+++
    ......+++
    writing new private key to 'server.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:Shanghai
    Locality Name (eg, city) [Default City]:Shanghai
    Organization Name (eg, company) [Default Company Ltd]:Ect
    Organizational Unit Name (eg, section) []:Ect
    Common Name (eg, your name or your server's hostname) []:chengzw
    Email Address []:chengzw258@163.com
    

    Nginx 配置文件

    Nginx 监听 80 端口用于 Http 和 ws 服务,监听 443 端口用于 Https 和 wss 服务。wss 就是加密的 ws 服务。

    events{}
    http {
        upstream websocket {
            server 192.168.1.141:80;  #后端服务器地址
        }
     
        server {
          listen 443 ssl;
          # ssl 相关配置
          ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv3 SSlv2;
          ssl_certificate_key /usr/local/nginx/certs/server.key;
          ssl_certificate /usr/local/nginx/certs/server.crt;
          location / {
           proxy_pass http://websocket;
           # 添加 WebSocket 协议升级 Http 头部
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
          }
       }
        server {
            listen 80;
            location / {
                proxy_pass http://websocket;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
            }
        }
    }
    

    启动 Nginx 服务

    /usr/local/nginx/sbin/nginx  #根据自己安装 nginx 的路径
    

    验证

    测试 Http & Https 连接

    # Http 连接
    # curl -i http://192.168.1.134                                                                        
    HTTP/1.1 200 OK
    Server: nginx/1.14.2
    Date: Thu, 25 Mar 2021 08:16:59 GMT
    Content-Type: text/plain
    Transfer-Encoding: chunked
    Connection: keep-alive
    
    Http Message: Hello World
    
    # Https 连接
    # curl -i https://192.168.1.134 -k                                                                    
    HTTP/1.1 200 OK
    Server: nginx/1.14.2
    Date: Thu, 25 Mar 2021 08:17:07 GMT
    Content-Type: text/plain
    Transfer-Encoding: chunked
    Connection: keep-alive
    
    Http Message: Hello World
    

    测试 ws & wss 连接

    # 方式一:使用wscat
    # ws 连接
    # wscat --connect ws://192.168.1.134                                                              
    Connected (press CTRL+C to quit)
    < Websocket Send: Hello World
    > send hello
    
    # wss 连接,由于是自签名证书需要 -n 参数,表示不检验证书                                                                                                                            # wscat --connect wss://192.168.1.134  -n                                                      
    Connected (press CTRL+C to quit)
    < Websocket Send: Hello World
    > send hello
    
    # 方式二:使用curl
    # ws 连接
    curl -i \                                                                                       
         --header "Upgrade: websocket" \
         --header "Sec-WebSocket-Key: MlRAR6bQZi07587UD4H8oA==" \
         --header "Sec-WebSocket-Version: 13" \
      http://192.168.1.134
    HTTP/1.1 101 Switching Protocols
    Server: nginx/1.14.2
    Date: Thu, 25 Mar 2021 08:18:48 GMT
    Connection: upgrade
    Upgrade: websocket
    Sec-WebSocket-Accept: iURIl3uIT+tsPMmZ0x1IVH7EL98=
    
    # wss 连接,由于是自签名证书需要 -k 参数,表示不检验证书   
    curl -i \                                                                                       
         --header "Upgrade: websocket" \
         --header "Sec-WebSocket-Key: MlRAR6bQZi07587UD4H8oA==" \
         --header "Sec-WebSocket-Version: 13" \
      https://192.168.1.134 -k
    HTTP/1.1 101 Switching Protocols
    Server: nginx/1.14.2
    Date: Thu, 25 Mar 2021 08:20:20 GMT
    Connection: upgrade
    Upgrade: websocket
    Sec-WebSocket-Accept: iURIl3uIT+tsPMmZ0x1IVH7EL98=
    

    参考链接

    • https://juejin.cn/post/6844903850667671560
    • https://www.liaoxuefeng.com/wiki/1022910821149312/1103327377678688
    • https://www.nginx.com/blog/websocket-nginx/
    • https://segmentfault.com/a/1190000022075295

    欢迎关注

    展开全文
  • WebSocket简介

    2018-04-16 16:09:03
    WebSocket 协议此文仅作为 RFC6455 的学习笔记。篇幅太长超过了简书的单篇最大长度,故分为两篇,此篇记录 1~4 节,其余见 WebSocket 协议 5~10 节;1.1 背景知识由于历史原因,在创建一个具有双向通信机制的 web ...
  • WebSocket 协议

    2017-06-29 17:35:00
    一个 IP 可以对应服务于多个域名,这样一台机器上就可以跑多个站点,然后通过 “请求标识符”,单个站点中又可以含有多个 WebSocket 终节点。 Host 头中的服务器名称可以让客户端标识出哪个站点是其需要访问的,也...
  • 1、前言 微信小程序提供了一套在微信上运行小程序的解决方案,有比较完整的...这篇文章分享了一个基于WebSocket长连接的微信小程序——简单的剪刀石头布小游戏的制作过程,希望能对想要在微信小程序中使用 WebS...
  • 微信小程序 WebSocket 端口号配置

    千次阅读 2019-02-21 10:50:00
    服务端开启 WebSocket,使用 WorkerMan + phpSocket.io 开启的端口为 2120,访问为 ws://wanaioa.unetu.net:2120/ 由于微信小程序只能使用 443 端口,需将域名的 443 端口进行转发,同时为了保证原 https 的正常...
  • 从图中可以发现,如果内嵌websocket站点是https加密的,则需要使用wss协议,而不是ws协议。毫无疑问我们就需要使用 wss:\ 安全协议了,那不简单,直接把ws:\ 改为 wss:\ 不就行了? 说干就干。 好吧,还是太天真 ...
  • 打开nginx目录下面有两个 SSL 证书文件 将这两个文件上传至 /usr/local/nginx/conf/目录下,通过ps -ef | grep nginx进行把进程关闭 然后进入源文件夹下 /usr/local/nginx-1.17.9/ 执行 ./configure --prefix=/usr/...
  • 说明:AriaNg算是Aira2中博主认为最好用的一个Web前端面板,连接支持Http(s)或Websocket...不过用的话,肯定是用最新版的,这时候就需要对Aria2简单的配下证书了,然后才能使用Https、Websocket(安全)协议进行...
  • HTTP XMLHttp Ajax WebSocket

    2019-08-24 18:51:17
    当向第三方站点请求时,我们可以将此请求放在script标签的src属性里,这就如同请求一个普通的JS脚本,可以自由的向不同的站点请求。 通过将前端方法作为参数传递到服务器端,然后由服务器端注入参数之后再返回,...
  • WebSocket 协议 1~4 节

    2019-01-17 03:35:10
    篇幅太长超过了简书的单篇最大长度,故分为两篇,此篇记录 1~4 节,其余见 WebSocket 协议 5~10 节; 1.1 背景知识 由于历史原因,在创建一个具有双向通信机制的 web 应用程序时,需要利用到 HTTP 轮询的方式。围绕...
  • wss协议实际是websocket+SSL,就是在websocket协议上加入SSL层,类似https(http+SSL)。 ws一般默认是80端口,而wss默认是443端口,大多数网站用的就是80和433端口。ws和wss的体现形式分别是TCP+WS AS WS ,TCP+TLS+...
  • 在线demo(已停止服务) 前端代码(来源网友,自己稍作修改): <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&... WebSocket ChatRoom </title> <style...
  • 微信小程序后台请求越来越严格 ... 2.websocket要求用wss 3.测试后发现websocket只能走433端口 作为.net开发,websocket又是使用的第三方...最开始想,IIS使用80端口,websocket使用433,但是433被iis站点绑定的ht...
  • 1、Https通信需要证书,而证书一般需要向认证机构(一般是ca)购买,因而需要一定费用 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。因此,与HTTP通信相比,Https通信会由于加...
  • 发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。 3.3  优缺点 优点:可以传输大文件,速度快,效率...
  • 二、西部数码ssl证书安装:西部数码主机部署SSL数字证书,需要有独立 IP的虚拟主机或云...独立主机(云主机、vps)部署办法:1.Apache 部署SSL证书(只能应用一个证书, 如果多个不同站点都需要安装不同的证书,请使用ngi...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,285
精华内容 514
关键字:

给websocket站点添加证书

友情链接: mini24408weiled.zip