証明書の設定
全般的なガイド
次の方法で、クライアントがPhotonサーバーにセキュアプロトコルで接続できるようにします。
- TLS/SSL証明書を取得します:
a. 開発用に、自己署名入りのSSL証明書を生成することができます。- 自己署名証明書の生成」の項をご覧ください。
b. 本番サーバーでは、信頼できる認証局が署名した証明書を取得してください。
- 自己署名証明書の生成」の項をご覧ください。
- "PhotonServer.config"でのリスナーを「セキュアにする」設定をおこないます。
詳細は こちら を確認してください。
i. 「セキュリティ」属性を有効にします。
ii. 証明書に高度な設定をおこなう場合には、任意でリスナーごとに<ServerCertificate>
ノードを追加します。 - 証明書ファイルを目的のフォルダにコピー/ペーストします。
デフォルトでは「deploy\bin_Win64\certs」の下にあります・
フォルダパスを変更したい場合にはこちらを参照してください。
デフォルトでは、サーバーは証明書と秘密鍵の両方を「server.pem」という同じファイルに格納することを想定しています。
もしこれらを分割したり、別のファイル名を選択したい場合はこちらを参照してください。 - Photonサーバーを起動または再起動します.
WebSocketsSecureの詳細な手順
このセクションでは、自己署名証明書を使用してWebSocketSecure接続を受容するセルフホスティングのPhotonサーバーのセットアップ方法について説明します。
- SDKを入手します:
- v5 SDKをダウンロードします。
- 解凍します。
- (無償)ライセンスをダウンロードし、PhotonSocketServer.exeの隣の 「deploy\bin_Win64」に格納します。
- "PhotonServer.config": リスナー。
- "deploy\bin_Win64\PhotonServer.config"を開き編集します。
- 3つのHttpListenerをコメント解除し、Type="WebSocket"および Secure="true"に設定します。
- これらのリスナーのURLの"/*"を"/+"に置換します (v5 RCでの既知の問題のため)。
- "deploy\bin_Win64\PhotonServer.config"を保存します。
- [任意] マスターサーバーのアドレス設定:
- "deploy\Nameserver.json"を開きます。
- "hostname "にドメイン名が設定されていることを確認します。この例では、"photon.example.com "です。
- "deploy\Nameserver.json"を保存します。
- [任意] マスターサーバー(ポートおよびパス)の設定:
- "deploy\NameServer\bin\NameServer.xml.config"を開きます。
- MasterServerPortSecureWebSocketが19090である点を確認します (PhotonServer.configの対応するMasterServerリスナーに一致させるためです。デフォルトは19090です)。
- MasterServerWsPathが"Master"である点を確認します。
- "deploy\NameServer\bin\NameServer.xml.config"を保存します。
- [任意] ゲームサーバー (アドレス、ポート、パス) の設定:
- "deploy\LoadBalancing\GameServer\bin\GameServer.xml.config"を開きます。
- GamingSecureWebSocketPortが19091に設定されている点を確認します (PhotonServer.configの対応するGameServerリスナーポートに一致させるため。デフォルトは19091です。)
- GamingWsPathがGameに設定されている点を確認します。
- PublicIPAddressをGameServerが動作しているマシンのIPv4アドレスに変更し、MasterServerとクライアントからアクセスできるようにします。
- PublicHostNameをドメイン名に変更します。この例では "photon.example.com"です。
- "deploy\LoadBalancing\GameServer\bin\GameServer.xml.config"を保存します。
- 自己署名証明書:
- こちらに表示されているように自己署名TLS/SSL証明書を生成します。
- 証明書と秘密鍵のファイルの内容を、同じファイル"server.pem"にコピーする。
- 結果ファイルを"deploy\bin_Win64\certs"の下に移動します。
- 自己署名証明書のドメインにDNSを設定します ( [サーバーがクライアントから到達可能である点を確認]を参照してください(#make_sure_server_is_reachable_by_client)).
- Chromeブラウザのハックを実行します([Chromeコンソールエラー: ERR_CERT_INVALID_AUTHORITY]を参照してください(#chrome_console_error__err__cert__invalid__authority)).
- サーバーを起動します:
- PhotonControlを開きます。
- 以下のようにサーバーを起動します: "LoadBalancing" -> "Start As Application".
- "deploy\bin_Win64\log\Photon-LoadBalancing-{date}.log"内のログを開きます。以下のように表示されています:
Plain Old Text
65896: 12:51:13.577 - Config|INFO| HTTP: 0.0.0.0:19093 (*:19093::NameServer) - uses SSL 65896: 12:51:13.577 - Config|INFO| HTTP: 0.0.0.0:19093 (*:19093::NameServer) - Cipher list: DEFAULT 65896: 12:51:13.577 - Config|INFO| HTTP: 0.0.0.0:19093 (*:19093::NameServer) - Server Certficate: D:\ExitGames\SDKs\Server\Photon-OnPremises-Server-Classic-SDK_v5-0-12-24441-RC1\deploy\bin_Win64\certs\server.pem 65896: 12:51:13.578 - Config|INFO| HTTP: 0.0.0.0:19093 (*:19093::NameServer) - Server Domain Name: photon.example.com
PUN 2クライアントテスト
- Unityを開き、最新のPUN2をダウンロード/インポートします。
- PUN2のPhotonServerSettingsを設定します:
- "photon.example.com"を"Server"として設定します。
- "Protocol"をWSSに設定します。
- "Use Name Server"にチェックが入っている点を確認してください。
- 任意で"ポート"19093を指定できますが、0では自動的にデフォルトの19093が選択されます。
- Unity EditorのビルドプラットフォームをWebGLに切り替えます。
これはUnityのバージョンによって動作する場合があります。
UNITYTLS_X509VERIFY_FLAG_NOT_TRUSTED でエラーの詳細を確認してください。 - PUN 2のデモシーンからプレイモードに入り、Unity Editorからテストします。
- PUN 2からWebGLのデモシーンをビルドして実行します。
JavaScriptクライアントテスト
- 最新のJavaScriptクライアントSDKをダウンロードします。
- "src\demo-loadbalancing\cloud-app-info.js"を修正し、"Wss:true,"をコメント解除します。"NameServer: ws://localhost:9093"をコメント解除し、"NameServer: wss://photonexample.com:19093"で置換します。
- "src\demo-loadbalancing\default.html"を起動します。
セキュアリスナーの構成
v5では、証明書の処理(フォーマット、設定など)にOpenSSLを使用しています。
以下は、該当するリスナー(TCPListener、S2S、HttpListener、WebSocketS2S)に使用する設定です。
リスナーをセキュアにする(証明書を使用する)ためには、"Secure "をTrue
に設定する必要があります。
これは、他のすべての証明書関連の設定を有効にするために必要です。
共通の属性
証明書ファイルのパスがデフォルトの期待値と一致していれば、すべての設定を省略できます。
"RootCertificates "ファイルは完全に任意なもので、これがなくてもサーバーは動作しますので、省略できます。
暗号リストの文字列については、SSLv3、TLS 1.0および1.1が非推奨となるため、TLS >= 1.2を推奨します。
Secure:
True
またはFalse
で、このリスナーが安全な接続を使用するかどうかを定義します。CipherList: OpenSSLのサイファーリストの文字列です。
詳しくはOpenSSLのサイファードキュメントページを参照してください。特に "CIPHER STRINGS "と "EXAMPLES "に詳細が記載されています。
デフォルトは "DEFAULT" です。
"Secure"は "True "である必要があります。CertificatePath: 証明書ファイルを格納するディレクトリの絶対パスで、末尾のスラッシュは含みません。
macrosを使用することもできます。
"Secure"は "True "である必要があります。RootCertificates: ルート証明書がある場合は、そのファイルの名前です。
デフォルトは "root.pem "です。
フォルダは "CertificatePath "で定義されます。
"Secure"は "True "である必要があります。- MinProtocolVersion: サポート対象のTLS最低バージョンです。
デフォルトは「TLS」ですが、たとえば「TLS12」等に設定できます。 - MaxProtocolVersion: サポート対象のTLS最高バージョンです。
クライアントからサーバーリスナー
以下はTCPListener、PolicyFileListener、またはHTTPListenerに必要な設定です。
- ValidClientCertificateDomains:
- CertificateValidationExceptions:
- RemoteAddressRestrictions:
- SupportClearTextConnections:
- DefaultDomain:
サーバー証明書の設定
例:
XML
<TCPListener> <ServerCertificates> <ServerCertificate Path="" Certificate="" Key=""> </ServerCertificate> <!-- add more ServerCertificate here if needed --> </ServerCertificates> </TCPListener>
- Path: 証明書とキーファイルを含むフォルダへのパス。
ここで[CERTS]
マクロを使用できます。
デフォルトでは、設定されていない場合にはパスは"deploy\bin_Win64\certs"です。 - Certificate: 証明書を含むファイルの名前。
デフォルトでは、設定されていない場合にはファイル名は"server.pem"です。 - Key: プライベートキーを含むファイルの名前。
デフォルトでは、設定されていない場合にはキーの読み込みにも証明書ファイルが使用されます。 - Password: キー用の任意のパスワード。
サーバーからサーバーリスナー
以下は、S2SまたはWebSocketS2Sに必要な設定です。
- Certificate: 証明書を含むファイルの名前。
- Key: プライベートキーを含むファイルの名前。
- Password: キーのパスワード。
セキュアなポートの設定
例:
XML
<S2S> <SecurePorts> <SecurePort Port=""> </SecurePort> <!-- add more SecurePort here if needed --> </SecurePorts> </S2S>
自己署名証明書の生成
以下は、テストや開発のために自己署名入りのSSL証明書をすばやく生成するための、ごく基本的でシンプルな手順です。
ここでは、使用する各方法、手順、コマンドについての詳細は説明しません。
ここで紹介していない方法やツールを使っても構いません。
インターネットで情報を集めてみてください。OpenSSLをインストールし、バイナリを環境変数のパスに適切に追加する必要があります。
OpenSSLがインストールされ、利用可能かどうかを確認するには、cmdウィンドウを開き、"openssl version"と入力してください。- req.confなどの設定ファイルを用意します(値は任意のものに置き換えてください)。
Plain Old Text
[req] distinguished_name = photon_wss x509_extensions = photon_wss_x509_extensions prompt = no [photon_wss] # Country Name: 2 letter code C = DE # State or Province Name ST = HH # Locality Name L = Hamburg # Organization Name O = ExitGames GmbH # Organizational Unit Name OU = Photon # Common Name: This needs to match Photon domain name. # The server's DNS names are placed in Subject Alternate Names. # You must include the DNS name in the SAN too (otherwise, Chrome and other browsers that # strictly follow the CA/Browser Baseline Requirements will fail). CN = photon.example.com [photon_wss_x509_extensions] keyUsage = keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] # if you use multiple machines or (sub)domains (e.g. one per Photon server type) add them here # you could make use of the asterisk (*) as wildcard for subdomains DNS.1 = photon.example.com
- MinProtocolVersion: サポート対象のTLS最低バージョンです。
- 管理者権限で以下のコマンドを実行し、証明書と鍵を生成します。
Plain Old Text
openssl req -x509 -nodes -newkey rsa:2048 -keyout cert.key -out cert.pem -config req.conf
トラブルシューティングWSS
ここでは、主にセルフホスティングのPhoton Server SDKを使用したWebSocketsSecure(WSS)のセットアップ(設定および証明書)において、よくあるトラブルシューティングを紹介します。
IPアドレスではなくドメイン名を使用する点を確認
クライアントから接続するサーバーのアドレスは、IPアドレスではなく、ドメイン名である必要があります。
WSSプレフィックスを使用する点を確認
クライアントからの接続先サーバーアドレスには、WebSockets Secureプロトコルを使用していることを示す「wss://」という接頭辞またはスキームが必要です。
正しいポート番号の使用を確認する
サーバーへの接続に使用するポート番号を再確認してください。
これは、"PhotonServer.config"で設定した各サーバーアプリケーションのWebSocket Listenerのポート番号と一致する必要があります。
詳細はこちら を確認してください。デフォルトのTCPおよびUDPポート番号のリストはこちらです。
クライアントがサーバーに到達できるか確認
"ping"コマンドでサーバーに到達してみてください。
開発目的で、ドメイン名がまだ DNS に対応していない場合は、ローカルの「hosts」ファイルに IP アドレスを追加します。
Windowsの場合は、「C:\Windows\system32\drivers\etc\hosts」の下にあります。
次のフォーマットの行を追加します。<IPアドレス> <ドメイン名>`.
** 例:**
サーバーがクライアントと同じマシン上にあり、ドメインが "photon.example.com "の場合
127.0.0.1 photon.example.com
また、サーバーから必要なポートを開くことも忘れないでください。
詳しくは「ファイアウォールの設定」をご覧ください。
UDPまたはTCPでPhotonサーバーに接続してみる
トランスポートプロトコルを切り替えてみて、クライアントがサーバーに接続できることを確認してください。
WSSを使用してPhoton Cloudに接続してみる
クライアントに問題がないことを確認するために、Photon Cloudに接続して動作するかどうかを確認します。
Chromeのコンソールエラー ERR_CERT_INVALID_AUTHORITY
Chromeでこのエラーが発生した場合は、以下の回避策を使用してください。
サーバーアドレスが「wss://photon.example.com:9090」の場合:
- 新しいタブを開きます。
- アドレスバーに「https://photon.example.com:9090」(サーバーアドレスの「wss://」を「https://」に置き換えてください)と入力し、Enterキーをクリックします。
- Chromeは、サイトが安全でない点を表示します。
- "Advanced"をクリックします。
- "Proceed to https://photon.example.com:9090 (unsafe) "をクリックします。これにより、ChromeはWSSを使った自己署名証明書を受け入れるようになります。
- Chromeを再起動します。
- クライアントを再度テストします。
Chromeコンソールエラー: ERR_CERT_COMMON_NAME_INVALID
ERR_CERT_INVALID_AUTHORITY
エラーで使用した回避策を試すことができます。
または、証明書にSAN(Subject Alternative Names)が使用されていることを確認する必要があります。
SANを使用する自己署名SSL証明書を生成する方法については、「OpenSSLの使用」を参照してください。
UNITYTLS_X509VERIFY_FLAG_NOT_TRUSTED
Unityのバージョンによっては、自己署名証明書を使用することができず、以下のようなエラーが発生することがあります:
クリーンなSDKのガイドを試す
セルフホスティングしているPhotonサーバーのWSSの設定で問題が発生した場合は、まず、SDKのクリーンバージョンをダウンロードして、そのSDKに記載されている手順を実行することをお勧めします。
同じ問題が発生しない場合は、お客様のカスタム設定に問題がないことを確認する必要があります。
アプリケーションとしてPhotonを起動してみる
Photonサーバーをサービスとして起動するように設定した場合、いくつかの問題が発生することがあります。
アプリケーションとして起動した場合の手順はこちらのページを参照してください。
サーバーのログを読む
必ずログを確認してください。
サーバーのログファイルの場所は こちらを参照してください。
- 全般的なガイド
- WebSocketsSecureの詳細な手順
- セキュアリスナーの構成
- 自己署名証明書の生成
- トラブルシューティングWSS
- IPアドレスではなくドメイン名を使用する点を確認
- WSSプレフィックスを使用する点を確認
- 正しいポート番号の使用を確認する
- クライアントがサーバーに到達できるか確認
- UDPまたはTCPでPhotonサーバーに接続してみる
- WSSを使用してPhoton Cloudに接続してみる
- Chromeのコンソールエラー ERR_CERT_INVALID_AUTHORITY
- Chromeコンソールエラー: ERR_CERT_COMMON_NAME_INVALID
- UNITYTLS_X509VERIFY_FLAG_NOT_TRUSTED
- クリーンなSDKのガイドを試す
- アプリケーションとしてPhotonを起動してみる
- サーバーのログを読む