|
看了下通过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>
|
|