WebSocketハンドシェイク

正解は ア( a =(一), b =(三), c =(五), d =(七)) です。 WebSocket 通信の開始(ハンドシェイク)仕様(RFC 6455)に関する問題です。 1. 応答ヘッダ  a  とステータスコード  b  :クライアントからのプロトコルアップグレード要求を受け入れる場合、サーバは応答ヘッダに Upgrade: websocket および Connection: Upgrade (一) を指定し、ステータスコード 101 Switching Protocols (三) を返します。 2. ハッシュ計算  c  :サーバはクライアントから送られた Sec-WebSocket-Key に固定のGUID(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)を連結し、 SHA-1 (五) で計算したダイジェストをBase64エンコードして Sec-WebSocket-Accept ヘッダとして返却します。 3. 検証によって確認できること  d  :この値を検証することで、通信相手が通常のHTTPサーバやキャッシュプロキシではなく、WebSocketプロトコル仕様に準拠しており「 WebSocket を利用可能である (七)」ことが確認できます。※通信相手の真正性確認(なりすまし防止)は、下位のTLSハンドシェイク(サーバー証明書検証)によって担保されるため、Sec-WebSocket-Accept の役割ではありません。

商社であるA 社では,クラウドサービスを利用して取引先と商品情報の交換を行うWeb システムを構築している。Web システムはコンテナ上で稼働するWeb アプリケーション及びマイクロサービス群から構成されており,取引先システムから送られてくる刻々と変化する原価情報や,注文情報を扱うため,リアルタイム性の高い通信を必要とすることから,取引先システムとの接続にはWebSocket を利用している。図1 は,A 社Web システムにおける,取引先システムとの連携のための,WebSocket 通信開始処理である。

A 社が取引先システムへTLS で接続した際に,次の処理が行われる。 ・A 社Web システムはGET リクエストを送るが,このときのリクエストヘッダに“Upgrade: websocket”と”Connection: Upgrade”を含めることでWebSocket ハンドシェイクを開始する。 ・取引先システムがWebSocket を受け入れる場合,応答ヘッダに a を指定した上で,ステータスコードが b である応答が返される。 ・A 社Web システムからSec-WebSocket-Key として送られた16 バイトの乱数に対して,取引先システムからSec-WebSocket-Accept が応答されるが,これは16 バイトの乱数と特定の固定値を連結して c で計算したハッシュ値である。

図1 取引先システムとの連携のためのWebSocket 通信開始処理

A 社Web システムは,取引先システムとの通信においてSec-WebSocket-Accept で得た値を検証することで,相手システムが d ということが確認できる。

設問 図1 中の a ~ c ,及び本文中の d に入れる字句の組合せはどれか。解答群の中から最も適切なものを選べ。

(一) Upgrade: websocket Connection: Upgrade

(二) Upgrade: websocket Connection: websocket

(三) 101

(四) 200

(五) SHA-1

(六) SHA-2

(七) WebSocket を利用可能である

(八) なりすましでない

出典プロフェッショナルデジタルスキル(システム)試験(仮称)科目B サンプル問題 問4

 a 

 b 

 c 

 d 

ア

(一)

(三)

(五)

(七)

イ

(一)

(三)

(五)

(八)

ウ

(一)

(三)

(六)

(八)

エ

(一)

(四)

(五)

(七)

オ

(一)

(四)

(六)

(八)

カ

(二)

(三)

(五)

(八)

キ

(二)

(三)

(六)

(八)

ク

(二)

(四)

(五)

(七)

ケ

(二)

(四)

(六)

(七)

コ

(二)

(四)

(六)

(八)