lxy 发表于 6 小时前

建议完善内网使用https导致websocket无法使用的问题

看了下通过openssl工具生成的https证书是可以通过websocket通讯的。下面是例子,希望ISM也可以实现。package main

import (
    "crypto/tls"
    "crypto/x509"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool {
      return true
    },
}

func echo(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
      log.Println("upgrade:", err)
      return
    }
    defer conn.Close()

    for {
      messageType, p, err := conn.ReadMessage()
      if err != nil {
            log.Println("read:", err)
            break
      }
      err = conn.WriteMessage(messageType, p)
      if err != nil {
            log.Println("write:", err)
            break
      }
    }
}

func main() {
    http.HandleFunc("/ws", echo)

    // 加载 CA 证书
    caCert, err := ioutil.ReadFile("ca.crt")
    if err != nil {
      log.Fatalf("Failed to read CA certificate: %v", err)
    }
    caCertPool := x509.NewCertPool()
    caCertPool.AppendCertsFromPEM(caCert)

    // 加载服务器证书和私钥
    cert, err := tls.LoadX509KeyPair("server.crt", "server.key")
    if err != nil {
      log.Fatalf("Failed to load server certificate and key: %v", err)
    }

    // 配置 TLS
    tlsConfig := &tls.Config{
      Certificates: []tls.Certificate{cert},
      ClientCAs:    caCertPool,
      ClientAuth:   tls.RequireAndVerifyClientCert,
    }

    server := &http.Server{
      Addr:      ":8080",
      TLSConfig: tlsConfig,
    }

    fmt.Println("Server started on wss://localhost:8080/ws")
    log.Fatal(server.ListenAndServeTLS("", ""))
}   




<template>
<div id="app">
    <button @click="sendMessage">Send Message</button>
    <p>{{ message }}</p>
</div>
</template>

<script>
export default {
data() {
    return {
      socket: null,
      message: ''
    };
},
mounted() {
    // 创建 WebSocket 实例
    this.socket = new WebSocket('wss://localhost:8080/ws');

    // 监听 WebSocket 连接成功事件
    this.socket.onopen = () => {
      console.log('Connected to the WebSocket server');
    };

    // 监听 WebSocket 接收到消息事件
    this.socket.onmessage = (event) => {
      this.message = event.data;
    };

    // 监听 WebSocket 连接关闭事件
    this.socket.onclose = () => {
      console.log('Disconnected from the WebSocket server');
    };
},
methods: {
    sendMessage() {
      if (this.socket.readyState === WebSocket.OPEN) {
      this.socket.send('Hello, server!');
      }
    }
}
};
</script>

<style scoped>
button {
padding: 10px 20px;
font-size: 16px;
}
p {
margin-top: 20px;
font-size: 18px;
}
</style>   

页: [1]
查看完整版本: 建议完善内网使用https导致websocket无法使用的问题