精华内容
下载资源
问答
  • <p>I am currently working on a real time notification service using websocket using TLS/SSL (wss://). I have some problem for the handshake between the browser and the server. Everything works ...
  • SSL handshake error: stream_socket_enable_crypto(): SSL_R_NO_SHARED_CIPHER: no suitable shared cipher could be used. This could be because the server is missing an SSL certificate (local_cert cont...

    报错

    SSL handshake error: stream_socket_enable_crypto(): SSL_R_NO_SHARED_CIPHER: no suitable shared cipher could be used. This could be because the server is missing an SSL certificate (local_cert context option)

    解决

    • 具体的解决方案
    • 在大致gawork_work.php 里面把证书的路径指定
    • 重启。

    参考资料

    展开全文
  • 我要开发一个交互性很强的微信小程序,但是他需要带有sslwebsocket,服务器用的是Linux系统,大概要保证100人同时在线。 目前在纠结是选择java还是python?最关键的是如何配置好SSL?
  • 首先要申请SSL证书,必须为pem格式。如图为宝塔环境所申请Let's Encrypt免费证书的所在位置:imageLinux安装openssl支持:yum install -y openssl移到Swoole安装包目录,重新编译安装,并加入openssl支持:(相关文章...

    首先要申请SSL证书,必须为pem格式。

    如图为宝塔环境所申请Let's Encrypt免费证书的所在位置:

    a62f138d91fc

    image

    Linux安装openssl支持:

    yum install -y openssl

    移到Swoole安装包目录,重新编译安装,并加入openssl支持:(相关文章:Linux下源码包安装Swoole及基本使用)

    $ sudo /usr/bin/phpize # 如果不知道路径,请使用find / -name "phpize" 进行查找

    $ sudo ./configure --enable-openssl --with-php-config=/www/server/php/72/bin/php-config

    $ sudo make clean make && make install

    #这个注意php-config的目录是你php真实安装路径

    #宝塔面板可以点击php查看安装路径 ,我的是在/www/server/php/72/bin/php-config

    #如果是集成环境,需要使用名 find / -name "php-config" 查询路径。还有phpize的路路径和php-config基本是一个路径 ,/www/server/php/72/bin/phpize

    开启swoole扩展

    $ cd /etc/php.d/

    $ sudo vim php.ini

    ; Enable xsl extension module

    extension=swoole.so

    查看Swoole已经开启openssl支持:

    php --ri swoole

    a62f138d91fc

    image

    Websocket服务器中开启SSL隧道,并配置证书路径:

    ws_server.php:

    //创建websocket服务器对象,监听0.0.0.0:9501端口,开启SSL隧道

    $ws = new swoole_websocket_server("0.0.0.0", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);

    //配置参数

    $ws ->set([ 'daemonize' => false, //守护进程化。

    //配置SSL证书和密钥路径

    'ssl_cert_file' => "/etc/letsencrypt/live/oyhdo.com/fullchain.pem",

    'ssl_key_file' => "/etc/letsencrypt/live/oyhdo.com/privkey.pem" ]);

    //监听WebSocket连接打开事件

    $ws->on('open', function ($ws, $request) {

    echo "client-{$request->fd} is open\n";

    });

    //监听WebSocket消息事件

    $ws->on('message', function ($ws, $frame) {

    echo "Message: {$frame->data}\n";

    $ws->push($frame->fd, "server: {$frame->data}");

    });

    //监听WebSocket连接关闭事件

    $ws->on('close', function ($ws, $fd) {

    echo "client-{$fd} is closed\n"; });

    $ws->start();

    页面js中即可使用wss连接WebSocket服务器(使用与证书对应的域名):

    WebSocket

    var websocket = new WebSocket('wss://www.oyhdo.com:9501');

    websocket.onopen = function (evt) { onOpen(evt) };

    websocket.onclose = function (evt) { onClose(evt) };

    websocket.onmessage = function (evt) { onMessage(evt) };

    websocket.onerror = function (evt) { onError(evt) };

    function onOpen(evt) {

    console.log("Connected to WebSocket server.");

    websocket.send('666');}

    function onClose(evt) {

    console.log("Disconnected"); }

    function onMessage(evt) {

    console.log('Retrieved data from server: ' + evt.data);

    }

    function onError(evt) {

    console.log('Error occured: ' + evt.data);

    }

    启动WebSocket服务:

    php ws_server.php

    浏览器访问结果:(注意必须为https访问)

    a62f138d91fc

    image

    服务器监听结果:

    a62f138d91fc

    image

    展开全文
  • websocketSSL浅析

    万次阅读 2017-04-27 10:52:57
    1 WebSocket 原理1.1 背景WebSocket 是基于Http 协议的改进,Http 为无状态协议,基于短连接,需要频繁的发起请求,第二 Http 只能客户端发起请求,服务端无法主动请求。1.2 相同点都是基于TCP的应用层协议。 都...

    1 WebSocket 原理

    1.1 背景

    WebSocket 是基于Http 协议的改进,Http 为无状态协议,基于短连接,需要频繁的发起请求,第二 Http 只能客户端发起请求,服务端无法主动请求。

    1.2 相同点

    都是基于TCP的应用层协议。
    都使用Request/Response模型进行连接的建立。
    在连接的建立过程中对错误的处理方式相同,在这个阶段WS可能返回和HTTP相同的返回码。
    都可以在网络中传输数据。

    1.3 不同点

    WS使用HTTP来建立连接,但是定义了一系列新的header域,这些域在HTTP中并不会使用。
    WS的连接不能通过中间人来转发,它必须是一个直接连接。
    WS连接建立之后,通信双方都可以在任何时刻向另一方发送数据。
    WS连接建立之后,数据的传输使用帧来传递,不再需要Request消息。
    WS的数据帧有序。

    WebSocket 分为握手和数据传输

    1.4 握手

    WebSocket 的握手基于http GET方法进行,

    1. 必须是有效的http request 格式
      HTTP request method 必须是GET,协议应不小于1.1 如: Get /chat HTTP/1.1
    2. 必须包括Upgrade 头域,并且其值为“websocket”,表明http 协议升级为WebSocket.
    3. 必须包括”Connection” 头域,并且其值为 “Upgrade”
    4. 必须包括”Sec-WebSocket-Key”头域,其值采用base64编码的随机16字节长的字符序列, 服务器端根据该域来判断client 确实是websocket请求而不是冒充的,如http。响应方式是,首先要获取到请求头中的Sec-WebSocket-Key的值,再把这一段GUID “258EAFA5-E914-47DA-95CA-C5AB0DC85B11”加到获取到的Sec-WebSocket-Key的值的后面,然后拿这个字符串做SHA-1 hash计算,然后再把得到的结果通过base64加密,就得到了返回给客户端的Sec-WebSocket-Accept的http响应头的值。
    5. 必须包括”Sec-webSocket-Version” 头域,当前值必须是13.
      可能包括”Sec-WebSocket-Protocol”,表示client(应用程序)支持的协议列表,server选择一个或者没有可接受的协议响应之。
      可能包括”Sec-WebSocket-Extensions”, 协议扩展, 某类协议可能支持多个扩展,通过它可以实现协议增强
    6. 可能包括任意其他域,如cookie
    客户端的握手如下:
    GET /chat HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Origin: http://example.com
    Sec-WebSocket-Protocol: chat, superchat
    Sec-WebSocket-Version: 13
    
    服务端的握手如下:
    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
    Sec-WebSocket-Protocol: chat
    
    客户端和服务端都发送了握手,并且成功,数据传输即可开始。

    1.5 数据传输

    通过Http握手之后,如果是http 协议的话,tcp 连接会断开,这里在http 头部指明了升级为 websocket, 所以tcp 连接不断开。 WebSocket在握手后发送数据并象下层TCP协议那样由用户自定义,还是需要遵循对应的应用协议规范。 WebSocket 数据传输以数据帧的形式传输。

    数据帧的结构如下图:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-------+-+-------------+-------------------------------+
    |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
    |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
    |N|V|V|V|       |S|             |   (if payload len==126/127)   |
    | |1|2|3|       |K|             |                               |
    +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
    |     Extended payload length continued, if payload len == 127  |
    + - - - - - - - - - - - - - - - +-------------------------------+
    |                               |Masking-key, if MASK set to 1  |
    +-------------------------------+-------------------------------+
    | Masking-key (continued)       |          Payload Data         |
    +-------------------------------- - - - - - - - - - - - - - - - +
    :                     Payload Data continued ...                :
    + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    |                     Payload Data continued ...                |
    +---------------------------------------------------------------+
    1. FIN:1位,是否是消息的结束帧(分片)
    2. RSV1, RSV2, RSV3: 分别都是1位, 预留,用于约定自定义协议。 如果双方之间没有约定自定义协议,那么这几位的值都必须为0,否则必须断掉WebSocket连接;
    3. Opcode:4位操作码,定义有效负载数据,如果收到了一个未知的操作码,连接也必须断掉,以下是定义的操作码:

    >
    1. 0 表示连续消息分片
    2. 1 表示文本消息分片
    3. 2 表未二进制消息分片
    4. 3-7 为将来的非控制消息片断保留的操作码
    5. 8 表示连接关闭
    6. 9 表示心跳检查的ping
    7. A 表示心跳检查的pong, 当收到一个Ping帧时,一个端点必须在响应中发送一个Pong帧
    8. B-F 为将来的控制消息片断的保留操作码

    1. Mask: 定义传输的数据是否有加掩码,如果设置为1,掩码键必须放在masking-key区域,客户端发送给服务端的所有消息,此位的值都是1;
    2. Payload length: 传输数据的长度,以字节的形式表示:7位、7+16位、或者7+64位。如果这个值以字节表示是0-125这个范围,那这个值就表示传输数据的长度;如果这个值是126,则随后的两个字节表示的是一个16进制无符号数,用来表示传输数据的长度;如果这个值是127,则随后的是8个字节表示的一个64位无符合数,这个数用来表示传输数据的长度。多字节长度的数量是以网络字节的顺序表示。负载数据的长度为扩展数据及应用数据之和,扩展数据的长度可能为0,因而此时负载数据的长度就为应用数据的长度。注意Payload length不包括Masking-key在内。
    3. Masking-key: 0或4个字节,客户端发送给服务端的数据,都是通过内嵌的一个32位值作为掩码的;掩码键只有在掩码位设置为1的时候存在。 数据Mask方法是,第 i byte 数据 = orig-data \^ (i % 4)

    2 AndroidSync 框架

    AndroidAsync 是一个基于nio的异步socket ,http(客户端服务器端),websocket,socket.io库,AndroidAsync 是一个底层的网络协议库。AndroidAsync 适合用于一个未被封装的Android的raw Socket, HTTP client/server, WebSocket, and Socket.IO。

    >
    特性

    1. 基于NIO,一个线程,回调驱动,高效
    2. 所有的操作返回一个Future,而且可以取消
    3. All operations return a Future that can be cancelled
    4. Socket client + socket server
    5. HTTP client + server
    6. WebSocket client + server
    7. Socket.IO 客户端

    2.1 启动websocket 服务

    void startWebSocketService(){
    
            AsyncHttpServer server = new AsyncHttpServer();
            server.setErrorCallback(new CompletedCallback() {
                @Override
                public void onCompleted(Exception ex) {
                }
            });
    
            server.listen(AsyncServer.getDefault(), 5000);
    
            server.websocket("/ws", new AsyncHttpServer.WebSocketRequestCallback() {
                @Override
                public void onConnected(final WebSocket webSocket, AsyncHttpServerRequest request) {
                    mServiceSocket = webSocket;
    
                    //Use this to clean up any references to your websocket
                    webSocket.setClosedCallback(new CompletedCallback() {
                        @Override
                        public void onCompleted(Exception ex) {
                            try {
                                if (ex != null) {
                                }
                            } finally {
                            }
                        }
                    });
    
                    webSocket.setStringCallback(new WebSocket.StringCallback() {
                        @Override
                        public void onStringAvailable(String s) {
    
                        }
                    });
                }
            });
        }

    2.2 客户端发起连接

    void startWebSocketClient(){
            AsyncHttpClient.getDefaultInstance().websocket(WSURL,  null, new AsyncHttpClient.WebSocketConnectCallback() {
                @Override
                public void onCompleted(Exception ex, WebSocket webSocket) {
                    if (ex != null) {;
                        return;
                    }
    
                    mClientSocket = webSocket;
                    webSocket.send("Hello Server");
                    webSocket.setStringCallback(new WebSocket.StringCallback() {
                        public void onStringAvailable(String s) {
    
                        }
                    });
                }
            });
        }
    

    3 SSL

    3.1 SSL加密

    wss 建立在HTTPS 的基础上,在握手的时候使用HTTS 建立连接。HTTPS是HTTP over SSL/TLS,HTTP是应用层协议,TCP是传输层协议,在应用层和传输层之间,增加了一个安全套接层SSL/TLS。
    HTTPS 连接过程如下图:

    1. 客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发送给服务端 ClientHello

    2. 服务端接收到客户端所有的Cipher后与自身支持的对比,如果不支持则连接断开,反之则会从中选出一种加密算法和HASH算法,以证书的形式返回给客户端。ServerHello Certificate ServerHelloDone

    3. 客户端收到服务端响应的证书后. client_key_exchange+change_cipher_spec+encrypted_handshake_message

      1. 第一步、校验证书的是否有效。关于客户端校验证书的是否有效已经做了详细的介绍,这里就不赘述了。
      2. 第二步、生成随机密码。如果证书验证通过,或者用户接受了不授信的证书,此时浏览器会生成一串随机密码,然后用证书中的公钥加密。
      3. 第三步、用最开始约定好的HASH方式,把握手消息取HASH值,把用 随机数密码加密 “握手消息+握手消息HASH值(签名)”和用公钥加密的随机密码 一起发送给服务端。把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。
    4. 服务端拿到客户端传来的密文,用自己的私钥来解密,获取随机密码,再用随机数密码 解密 握手消息与HASH值,并与传过来的HASH值做对比确认是否一致。然后用随机密码加密一段握手消息(握手消息+握手消息的HASH值 )给客户端。(此时服务器端已经获取到了客户端生成的随机密码了) 服务端用随机密码解密并计算握手消息的HASH,如果与客户端发来的HASH一致,此时握手过程结束。
      change_cipher_spec+encrypted_handshake_message

    AndroidSync API
    AndroidSync 对ssl 的支持如下:

            KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
    
            ks.load(getContext().getResources().openRawResource(R.raw.keystore), "storepass".toCharArray());
            kmf.init(ks, "storepass".toCharArray());
    
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            KeyStore ts = KeyStore.getInstance(KeyStore.getDefaultType());
            ts.load(getContext().getResources().openRawResource(R.raw.keystore), "storepass".toCharArray());
            tmf.init(ts);
    
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
    
            AsyncHttpServer httpServer = new AsyncHttpServer();
            httpServer.listenSecure(8888, sslContext);
            httpServer.get("/", new HttpServerRequestCallback() {
                @Override
                public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {
                    response.send("hello");
                }
            });
    
            Thread.sleep(1000);
    
            AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(sslContext);
            AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setTrustManagers(tmf.getTrustManagers());
            AsyncHttpClient.getDefaultInstance().executeString(new AsyncHttpGet("https://localhost:8888/"), null).get();

    3.2 自签名证书验证

    ssl 连接需要证书,通常证书是CA机构发布,保证权威性。但是也可以使用自签名证书。如12306.根据我们车机的特点,可以采用自签名证书。

    public SSLSocketFactory get12306SSLSocketFactory() {
            try {
                BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(CER_12306.getBytes()));
                CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
                Certificate cert = certificateFactory.generateCertificate(bis);
                Log.d("https", cert.toString());
    
                KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
                keyStore.load(null);
                keyStore.setCertificateEntry("12306", cert);
    
    
                SSLContext sslContext = SSLContext.getInstance("TLS");
                TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
                trustManagerFactory.init(keyStore);
                sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());
    
                return sslContext.getSocketFactory();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        void httpConnect(){
            try {
                URL url;
                url = new URL("https://kyfw.12306.cn/otn/");
                HttpsURLConnection.setDefaultSSLSocketFactory(get12306SSLSocketFactory());
                HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.connect();
                if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
                    Log.e("https", "Https Certificate Success!");
                    Message msg = Message.obtain();
                    msg.what = HttpsActivity.HTTPS_SUCCES_12306;
                    mViewHandler.sendMessage(msg);
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    3.3 SSL 中间人攻击

    >
    HTTPS ,是一种网络安全传输协议,利用 SSL/TLS 来对数据包进行加密,以提供对网络服务器的身份认证,保护交换数据的隐私与完整性。 中间人攻击, Man-in-the-middle attack ,缩写: MITM ,是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
    https 在理论上是可以抵御 MITM ,但是由于开发过程中的编码不规范,导致 https 可能存在 MITM 攻击风险,攻击者可以解密、篡改 https 数据。 0X02 https 漏洞 Android https 的开发过程中常见的安全缺陷:

    1)在自定义实现 X509TrustManager 时, checkServerTrusted 中没有检查证书是否可信,导致通信过程中可能存在中间人攻击,造成敏感数据劫持危害。

    2)在重写 WebViewClient 的 onReceivedSslError 方法时,调用 proceed 忽略证书验证错误信息继续加载页面,导致通信过程中可能存在中间人攻击,造成敏感数据劫持危害。

    3)在自定义实现 HostnameVerifier 时,没有在 verify 中进行严格证书校验,导致通信过程中可能存在中间人攻击,造成敏感数据劫持危害。

    4)在 setHostnameVerifier 方法中使用 ALLOW_ALL_HOSTNAME_VERIFIER ,信任所有 Hostname ,导致通信过程中可能存在中间人攻击,造成敏感数据劫持危害。

    Android安全开发之安全使用HTTPS

    窃听风暴:Android平台https嗅探劫持漏洞

    浅析HTTPS中间人攻击与证书校验

    展开全文
  • sslwebsocket例子

    2021-03-09 03:48:26
    还是在那个websocket_demo的例子rebar-creator create-app websocket_demotree一下看看大概目录├── cert│ ├── cowboy-ca.crt│ ├── server.crt│ └── server.key├── src│ ├── path_helper.erl│...

    还是在那个websocket_demo的例子

    rebar-creator create-app websocket_demo

    tree一下看看大概目录

    ├── cert

    │   ├── cowboy-ca.crt

    │   ├── server.crt

    │   └── server.key

    ├── src

    │   ├── path_helper.erl

    │   ├── route_helper.erl

    │   ├── websocket_demo.app.src

    │   ├── websocket_demo_app.erl

    │   └── ws_handler.erl

    ├──static│   ├── index.html

    │   └── js

    │   └── jquery.min.js

    cert目录从cowboy的sample里面的拿过来即可,ca证书需要全部信任,浏览器得重启,具体google看看

    static目录随便弄点过来显示下https即可,这个用来测试证书有没有问题的

    直接贴代码

    path_helper.erl

    -module(path_helper).-export([get_path/1]).

    get_path(ExtraPath)->{ok,CurrentPath}=file:get_cwd(),

    Path= string:concat(CurrentPath,"/"),string:concat(Path,ExtraPath).

    route_helper.erl

    -module(route_helper).-export([get_routes/0]).

    get_routes()->StaticPath= path_helper:get_path("../static/"),

    [

    {'_', [

    {"/websocket", ws_handler, []},

    {"/static/[...]", cowboy_static, {dir, StaticPath}}

    ]}

    ].

    websocket_demo_app.erl

    -module(websocket_demo_app).-behaviour(application).-export([start/2, stop/1]).

    start(_Type, _Args)->ok=application:start(crypto),

    ok=application:start(cowlib),

    ok=application:start(ranch),

    ok=application:start(cowboy),

    CertDir= path_helper:get_path("../cert/"),

    io:format("~p~n",[CertDir]),

    Routes=route_helper:get_routes(),

    Dispatch=cowboy_router:compile(Routes),

    Port= 8080,

    TransOpts=[

    {port, Port},

    {cacertfile, CertDir++ "/cowboy-ca.crt"},

    {certfile, CertDir++ "/server.crt"},

    {keyfile, CertDir++ "/server.key"}

    ],

    ProtoOpts=[{env, [{dispatch, Dispatch}]}],

    {ok, _}= cowboy:start_https(https,100, TransOpts, ProtoOpts).

    stop(_State)->ok.

    ws_handler.erl

    -module(ws_handler).-behaviour(cowboy_websocket_handler).-export([init/3]).-export([websocket_init/3]).-export([websocket_handle/3]).-export([websocket_info/3]).-export([websocket_terminate/3]).

    init({tcp, http}, _Req, _Opts)->io:format("init ~n"),

    {upgrade, protocol, cowboy_websocket};

    init({ssl, http}, _Req, _Opts)->io:format("ssl init ~n"),

    {upgrade, protocol, cowboy_websocket}.

    websocket_init(_TransportName, Req, _Opts)->io:format("websocket_init ~n"),

    erlang:start_timer(1000, self(), <>),

    {ok, Req, undefined_state}.

    websocket_handle({text, Msg}, Req, State)->

    %% io:format("websocket_handle text ~p,~p,~p~n",[Msg,Req,State]),

    {reply, {text,<< "That's what she said!", Msg/binary >>}, Req, State};

    websocket_handle(_Data, Req, State)->

    %% io:format("websocket_handle ~p,~p,~p~n",[_Data,Req,State]),

    {ok, Req, State}.

    websocket_info({timeout, _Ref, Msg}, Req, State)->

    %io:format("websocket timeout ~n"),

    erlang:start_timer(1000, self(), <>),

    {reply, {text, Msg}, Req, State};

    websocket_info(_Info, Req, State)->io:format("websocket_info ~p,~p,~p~n",[_Info,Req,State]),

    {ok, Req, State}.

    websocket_terminate(_Reason, _Req, _State)->io:format("terminate ~n"),

    ok.

    注意,在ssl的是,init的参数

    本地websocket测试地址

    wss://loclahost:8080/websocket

    如果提示ssl错误什么的,最好先看看下面这个对不对

    注:ssl以后,访问必须以域名,不能ip。

    展开全文
  • QtWebsocket Qt Websocket服务器和客户端实现。 现在不推荐使用该项目,因为Qt提供了websocket客户端和服务器协议的实现。 此处提供更多信息: : 执照 版权所有2013 Antoine Lafarge 该文件是QtWebsocket的一部分...
  • python websocket ssl错误

    千次阅读 2019-07-26 11:48:54
    import ssl ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
  • Nginx之websocket配置,支持ssl

    千次阅读 2018-01-02 15:23:58
    经过一天的查资料尝试,终于让腾讯云中的websocket服务器支持ssl了。是基于springboot和Nginx来做的。#所有行的开头要么是顶头输入,要么需要tab键, #否则会无法识别该行的第一个字母 upstream cat { #如果...
  • 生成SSL自签证书  自签证书就是自己生成的证书,免费的,不支持部署浏览器的,支持浏览器的就是收费的,需要购买,这里因为是本地测试,所以就用的自签证书,买的证书可以跳过证书生成部分.  安装OpenSSL  OpenSSL是...
  • SslContext sslCtx = SslContextBuilder.forServer(file, key).build(); open(sslCtx); } catch (SSLException e) { e.printStackTrace(); } private void open(SslContext sslCtx) { EventLoopGroup bossGroup ...
  • WebSocket测试软件(可支持SSL) Host选项不需要填写 ws://或者wss:// 直接填写IP或者域名即可
  • qwebsocket使用wss连接工程源码,qt5.7,vs2013集成开发环境,debug下面已经包含ssl依赖库
  • sample进行,但是一般现网的websocket都是采用的wss://协议,直接使用ws://协议的较少,毕竟安全还是非常重要的,这里就涉及到ssl协议,模拟websocket客户端,使用证书和公钥,摸索了半天终于摸索出来了。...
  • VC - vs2017里poco的websocket使用netssl

    千次阅读 2019-09-13 11:17:22
    打开工程,看到netssl模块,开始编译即可 其他工程使用的时候,在工程里添加 d:\OpenSSL32\include d:\OpenSSL32\lib\VC 代码例子 Poco websocket库特点: 1,使用http/https ClientSession创建websocket client 2,是...
  • websocketSSL连接相关

    千次阅读 2019-04-02 14:30:32
    SSL连接相关MQTT and Websocketspaho.mqtt.clibwebsocketsServerClient关于QTopenssl生成证书参考链接 MQTT and Websockets paho.mqtt.c ssl_opts.CApath = opts.capath; //指向一个包含PEM格式的CA证书的目录。 ...
  • 文章目录 注意生产环境Django配置Uwsgi配置...最近有个django的后端项目,因为需要实时上传视频播放进度,综合考虑使用websocket来实现,某度、某歌里面找了一天的资料都发现坑越踩越大,最后参考了这篇文章才解决了 ...
  • 后端开启了websocket,但是使用nginx转发的时候出了问题,访问不了。重新调整一下nginx的配置即可。 一、nginx相关配置 upstream admin { server 192.168.10.121:3333; # ip + 端口 } map $http_upgrade $...
  • socket与websocket以及http与https重新总结一.socket网络中的socket是一个抽象的接口 ,而是为了方便使用tcp或udp而抽象出来的一层 ,可以理解为网络中连接的两端。通常被叫做套接字接口.二.websocketwebsocket就是...
  • 在网上查的资料,整理了一下 实现了wss协议的连接 和websocket的心跳,,在网上查的资料,整理了一下 实现了wss协议的连接 和websocket的心跳
  •  ta.value = "Open WebSocket success,Browser support WebSocket!";  };  socket.onclose = function(event) {  var ta = document.getElementById('responseText');  ta.value = "";  ta.value = ...
  • Spring websocket ssl和摘要认证

    千次阅读 2017-03-15 20:27:45
    前段时间公司的项目要给websocket连接加ssl和digest认证,我们用的是spring websocket的实现。网上介绍了两种给websocketssl的方法,一种是websocketClient.setWebsocketFactory(websocketFactory),另一种是...
  • location /websocket/ { # 同上去掉’api‘,这里去掉’websocket' rewrite ^/websocket/(.*)$ /$1 break; proxy_pass http://websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_...
  • 1. 获取安装包。 ...2. 解压。 tar -xzvf openssl-1.1.1c....--openssldir=OPENSSLDIR #配置文件目录,默认是/usr/local/ssl --prefix=DIR #安装目录,默认为 OPENSSLDIR 目录 [no-]threads #是否编译支持多线程的库。默
  • 从阿里云服务器购买、域名购买、SSL免费 一 WebSocket实战 1.1 认识WebSocket 上图说明 发送连接请求 客户端通过ws://host:port/ 的请求地址发起WebSocket请求连接。由JavaScript实现 WebSocket API与服务器建立...
  • nginx配置https以及websocket

    千次阅读 2020-08-05 10:36:00
    nginx配置https以及websocket Centos7下nginx配置https和websocket 一、 背景 项目需要nginx带来https和websocket,最后成功应用。把过程做一记录。此过程在完全离线下操作 二、 安装nginx 关于nginx离线在先安装的...
  • 在做websocket协议支持时遇到了问题,ws握手能够成功,但后续的消息编解码发送数据那边解析失败了,说明我这边的数据编码不正确。基于Netty做的客户端实现,尝试更改过几个handler都没效果...
  • 于是捣鼓给swoole的websocket server加入SSL支持。 第一步,准备好自己的域名,备案等,就不啰嗦了。 第二步,到阿里云申请免费的证书服务。  (此图片来源于网络,如有侵权,请联系删除! ) 按照提示一步步进行,...
  • 关于 websocket wss SSL Https 的问题 网站添加https后websocket不能使用 看了一下控制台如图所示: 通过大脑飞速运转以及参考网络资料得出以下结论: 如果网站使用HTTPS,WebSocket必须要使用wss协议; 使用wss...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,942
精华内容 5,576
关键字:

sslwebsocket