このページでは、送受信データの形式、TLS/mTLSの設定、プラットフォームごとの注意点、トラブル発生時の確認項目を説明します。
データ形式とシリアライズ
StartでDeliveryBoxを指定しない場合、送受信はバイト配列(TArray<uint8>)で行われます。DeliveryBoxを指定すると、送受信のたびに次の形式へ自動変換されます。
| DeliveryBox | 送受信するデータ | Blueprintでの扱い |
|---|---|---|
| なし(既定) | バイト配列 | SendのData Buffer、ReceiveDataのBuffer |
| Utf8StringDeliveryBox | UTF-8文字列 | Sendに FString を渡し、Receivedで FString を受け取る |
| ObjectDeliveryBoxUsingJson | JSON文字列 | Sendに UObject を渡し、Receivedで UObject を受け取る |
ObjectDeliveryBoxUsingJsonの2つの形式
JSONへのシリアライズ形式はEODJsonSerializeTypeで切り替えます。
NoWriteType(既定のCreate Object Delivery Box Using Json) — クラス名を含まない形式です。
{
"Prop": 1
}
WriteType(Create Dynamic Object Delivery Box Using Json) — クラス名を含む形式です。
{
"Type": "SampleClassName",
"Body": {
"Prop": 1
}
}
NoWriteTypeは1つのDeliveryBoxで扱えるクラスが1種類になります。WriteTypeはJSONにクラス名が保存されるため、1つのDeliveryBoxで複数のクラスを送受信でき、基底クラスのプロパティとして保持したオブジェクトでも情報が失われません。その代わり、クラス名の分だけデータサイズが増えます。
クラスごとに形式を混在させるCreate Custom Object Delivery Box Using Jsonも用意されています。詳細はFAQ: ObjectDeliveryBoxUsingJsonの利用方法を参照してください。
TLSとmTLS
TCP/IP TLS(v1.9.0以降)を使用すると、通信内容の暗号化と証明書ベースの認証が行えます。プラグインにはTLS処理に必要なライブラリが含まれており、追加のセットアップは不要です。
最小バージョンの指定
Minimum ProtocolはTLSの最小バージョンを指定します(TLS 1.2を指定すると1.2以上を許可)。TLS 1.1とTLS 1.0は非推奨の値です。通常は既定値のTLS 1.2を使用してください。
クライアント側の証明書検証
Create Protocol Tcp Ip Client Tlsの戻り値に対して、With系ノードで検証方法を指定します。代表例は次のとおりです。
| 構成 | 使用するノード |
|---|---|
| 標準の検証(公開CAの証明書) | With Certificate Verification |
| プライベートCA・自己署名のルートを使う | With Trusted Ca Certificate(+必要に応じてWith Allow Self Signed Certificates) |
| 公開鍵ピンニング | With Pinned Public KeyまたはWith Pinned Public Key From File |
| mTLS(クライアント認証) | With Client Certificate |
構成ごとの選び方はFAQ: ユースケース別TLSオプション構成にまとめています。
mTLS(相互認証)
サーバー側でWith Client Auth ModeをRequiredにすると、クライアント証明書の提示を必須にできます(Optionalは提示があれば検証、Noneは要求しない)。検証にはWith Client Ca Bundleで指定したCAバンドルが使用されます。クライアント側はWith Client Certificateで証明書と秘密鍵を指定します。
mTLSとTLSの違いについてはFAQ: TLSとmTLSの違いも参照してください。
接続失敗の理由を確認する
TLS接続が失敗したときは、クライアントのGet Last Tls Errorで理由を文字列で取得できます。ハンドシェイク失敗(信頼できないCAが署名した証明書チェーンなど)、証明書やCAの設定不備、ハンドシェイク直後の切断が対象です。接続が確立した時点でクリアされます。
Peer Verification Disabledを指定するとサーバー証明書の検証自体が行われなくなります。通信の暗号化はされますが、なりすましを検出できなくなるため、通常は使用しないでください(FAQ: 検証無効化の安全性)。
ホスト名・IPアドレスと証明書の不一致で失敗するケースはFAQ: TLSが失敗する理由を参照してください。
証明書の作成
OpenSSLコマンドで証明書を手動作成する手順はFAQ: OpenSSLで証明書を作成するに、自己署名証明書の設定はFAQ: 自己署名証明書のTLS構成にまとめています。
C++では、開発・テスト用に自己署名証明書やCA証明書を生成するUObjectDelivererCertificateGeneratorも利用できます(Blueprint非公開)。
ObjectDelivererのTLSクライアントと通信できるTLSサーバーのサンプルは、GitHubのAyumaxSoft/TLSServerSampleで公開しています。
証明書の信頼ポリシー(v1.9.1以降)
v1.9.1から、TLS接続時の証明書検証に、プラグイン組み込みの「信頼できないCAリスト」が常に適用されます。
- 2026年10月に秘密鍵が漏洩したeMudhraの中間CA 8件と、その署名元ルート3件が発行した証明書チェーンを拒否します。OSやエンジンの信頼ストアがそれらを信頼している状態でも拒否します。
- クライアント側のサーバー証明書検証と、サーバー側のクライアント証明書検証(mTLS)の両方に適用されます。
- 証明書チェーンを検査できない場合は接続を拒否します(fail-closed)。
- 接続失敗の理由はクライアントの
Get Last Tls Error(Blueprintから利用可能)で確認できます。 - 独自に信頼できないCAを追加したい場合(インシデント対応など)は、C++ API(
FObjectDelivererTlsTrustPolicy)で登録できます。追加の登録はプロセス内でのみ有効です。 Peer Verification Disabledを指定した場合、証明書検証自体が行われないため、このリストも適用されません(非推奨設定)。
バッファサイズ
Protocolごとに受信・送信バッファサイズをWith Receive Buffer Size・With Send Buffer Sizeで指定できます。既定値は1MBです。大量データを一度に送受信する場合に調整してください。
プラットフォームの注意点
| 項目 | 内容 |
|---|---|
| 共有メモリ | Windowsでのみ使用できます。ほかのプラットフォームでは使用できません |
| TLSの暗号化 | Windows、Mac、Linux、iOS、Androidで使用できます。必要なライブラリはプラグインに含まれています |
| iOSでのwss接続 | iOSではエンジンがiOSのシステム証明書ストアを読み込まないため、プロジェクト側にCAバンドル(Content/Certificates/cacert.pem)を配置し、パッケージ設定のDirectoriesToAlwaysStageAsUFSでCertificatesをステージングする必要があります |
| Androidの証明書 | Androidではエンジンがシステムの証明書ストアを追加で読み込むため、一般的な公開CAの証明書はそのまま検証できます |
iOSのwssにおけるCAバンドル配置の経緯と詳細な手順は、プラグインの検証記録(Docs/iOS_WebSocket_wss_CA_Bundle_Notes.md、ObjectDelivererV2リポジトリ)に基づいています。
トラブルシューティング
| 症状 | 確認する項目 | 関連情報 |
|---|---|---|
| 通信がまったく成立しない | 両者のプロトコル種別・アドレス・ポートが一致しているか。ファイアウォールの設定 | クイックスタートのエラー時の確認 |
| 受信データが欠ける・壊れる | パケット分割ルールが両者で一致しているか(SizeBodyならSize LengthとEndianも)。TCP/IPでNodivisionを使っていないか | パケット分割ルールを切り替える |
| UDPで届かないことがある | UDPの仕様上、パケットロスが起き得ます。再送が必要ならTCP/IPを使用してください | FAQ: パケットが届かない場合 |
| 共有メモリ・ファイルで値がスキップされる | 受信側がポーリング方式のため、上書きが速いと間引きが起きます。書き込み間隔を確認してください | FAQ: 共有メモリ通信が動かない場合 |
| TLS接続が失敗する | Get Last Tls Errorの内容。証明書のパス・期限・ホスト名一致・検証オプションの組み合わせ | FAQ: TLSオプション構成 |
| iOSのwssで接続エラーになる | プロジェクトにCAバンドルが配置・ステージングされているか | このページの「iOSでのwss接続」 |
| 送信したのにRecipientが受け取らない | DeliveryBox使用時はSendはDeliveryBox経由。ObjectDelivererManager.Sendを使っていないか | DeliveryBoxを切り替える |
原因を切り分けるには、Blueprint APIのロギングでプラグイン内部のログを取得する方法もあります。
セキュリティチェックリスト
公開環境・製品環境で通信を使用する前に、次を確認してください。
- 通信経路に暗号化が必要な場合、TLS(またはwss)を使用している
-
Peer Verification Disabledを指定していない - TLSの最小バージョンとして
TLS 1.2以上を指定している - 本番のサーバー証明書として、開発・テスト用の自己署名証明書を使い残していない
- 証明書や秘密鍵のファイルをスクリーンショット・ログ・リポジトリに含めていない
- ポート番号・共有メモリ名などが、意図しない他プロセスと衝突していない