LoginSignup
3
3

More than 3 years have passed since last update.

UnityからのWebSocket接続時にハンドシェイクでエラーが出た際の対処法

Posted at

websocket-sharpを使ってWebSocketに接続

websocket-sharpはUnityで使えるWebSocket接続用のライブラリ。
基本的な使い方は以下の通りで、WebSocketインスタンスを作ってURLを引数として渡し、Connectメソッドで接続するだけと非常にお手軽。

WebSocketController.cs
using System;
using UnityEngine;
using WebSocketSharp;

public class WebSocketController : MonoBahaviour
{
    private WebSocket webSocket;

    // wssから始まるWebSocketの接続先URL。
    private string baseURL = "wss://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

    // WebSocketインスタンスを作成し、接続先URLを渡す。
    webSocket = new WebSocket(baseURL);

    // WebSocketへ接続。非同期で行いたい場合はwebSocket.ConnectAsync()を使う。
    webSocket.Connect();
}

An error has occurred during a TLS handshake.

接続をしようとすると上記のエラーメッセージが出た。
URLがwssから始まるセキュア通信用のプロトコルだったため、webSocketインスタンスをセキュア通信ができるように弄ってあげる必要があるみたい。
そこで以下のようにコードを修正。

WebSocketController.cs
using System;
using UnityEngine;
using WebSocketSharp;

public class WebSocketController : MonoBahaviour
{
    private WebSocket webSocket;

    private string baseURL = "wss://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

    webSocket = new WebSocket(baseURL);

    // この一文を追加する。
    webSocket.SslConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;

    webSocket.Connect();
}

webSocket.SslConfigurationはセキュアな通信を確立するために使われるクラスで、その中のEnabledSslProtocolsというプロパティが認証用のプロトコル(SslProtocols 列挙型)を格納するプロパティとなっている。

そこへSslProtocolsの「Tls12」をセットしてあげることで、セキュアな通信ができるようになる。

あとは通常時と同じくConnectメソッドで接続してあげればエラーは解消された。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3