Linux Virtual Delivery Agent

WebSocketの自己署名証明書の構成

2402 LTSRの初期リリース以降、Citrix Virtual Apps and Desktopsでは、Citrix Brokering Protocol (CBP)経由でWebSocketテクノロジを使用することで、VDAとDelivery Controller間で容易に通信できるようになりました。 この機能では、VDAからDelivery Controllerへの通信にTLSポート443のみが必要です。 詳しくは、Citrix Virtual Apps and Desktopsドキュメントの「VDAとDelivery Controller間のWebSocket通信」を参照してください。

WebSocketは、クライアントとサーバー間のリアルタイムの双方向通信を可能にする強力なテクノロジです。 ただし、安全な接続を確保するには、特にwss://を使用する場合、自己署名証明書の構成が必要になることがよくあります(開発環境やテスト環境など)。 この記事では、WebSocket用の自己署名証明書を構成するためのベストプラクティスについて説明します。

手順1:(ドメイン非参加のVDAのみ)DNSサーバーを構成する

  • UbuntuおよびDebian VDAの場合:
  1. 次のように/etc/systemd/resolved.confを編集してDNS設定を変更します:

      [Resolve]
      # Some examples of DNS servers which may be used for DNS= and FallbackDNS=:
      # Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
      # Google:     8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
      # Quad9:      9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
      DNS=<DNS IP address>
      #FallbackDNS=
      #Domains=
      #DNSSEC=no
      #DNSOverTLS=no
      #MulticastDNS=no
      #LLMNR=no
      #Cache=no-negative
      #CacheFromLocalhost=no
      #DNSStubListener=yes
      #DNSStubListenerExtra=
      #ReadEtcHosts=yes
      #ResolveUnicastSingleLabel=no
    <!--NeedCopy-->
    
  2. systemd-resolvedサービスを再起動します。

      sudo service systemd-resolved restart
    <!--NeedCopy-->
    

    詳しくは、https://notes.enovision.net/linux/changing-dns-with-resolveを参照してください。

  • RHEL、Rocky Linux、およびSUSE VDAの場合:
  1. 接続名の一覧を取得するには、次のnmcliコマンドを実行します:

      sudo nmcli connection
    <!--NeedCopy-->
    
  2. 別のnmcliコマンドを実行して、DNS IPアドレスを設定します:

      sudo nmcli con mod {connectionNameHere} ipv4.dns "<dns ip address>"
    <!--NeedCopy-->
    

    たとえば、次のコマンドを使用して、DNS IPアドレスを192.168.2.254に設定できます:

      sudo nmcli con mod eth0 ipv4.dns "192.168.2.254"
    <!--NeedCopy-->
    
  3. 次のいずれかのコマンドを実行して、新しいDNS設定を再読み込みします:

      sudo systemctl restart NetworkManager.service
    <!--NeedCopy-->
    
      sudo nmcli connection reload
    <!--NeedCopy-->
    

    For more information, see https://www.cyberciti.biz/faq/change-dns-ip-address-rhel-redhat-linux/.

手順2:証明機関(CA)に証明書を要求する

  1. 証明書要求を開始します。 証明書要求を開始するときは、Delivery Controllerの完全修飾ドメイン名(FQDN)を入力します。

    証明書要求を開始する

  2. 証明書で堅ろうなセキュリティを確保するには、2048ビット以上の長さを選択します。

    ビット長を選択する

  3. 簡単に識別できるように、証明書要求ファイルにわかりやすい名前を割り当てます。

    証明書要求ファイルに名前を付ける

  4. 生成された証明書要求ファイルをメモ帳などのテキストエディターを使用して開き、その中のすべてのコンテンツを選択します。

    生成された証明書要求ファイルを開く

  5. Web証明書サーバーにログインし、証明書の要求に進みます。

    Web証明書サーバーにログインする

    高度な証明書要求

  6. コピーした要求ファイルの内容をWebサーバー上の適切なフィールドに貼り付け、Web Server証明書テンプレートを選択します。

    証明書要求を送信する

  7. 証明書をBase 64エンコード形式でダウンロードします。

    証明書をダウンロードする

  8. 証明書要求を完了します。 ダウンロードの時点で、証明書要求プロセスは完了します。

    証明書要求を完了する

手順3:Delivery Controller FQDN証明書をバインドする

  1. Delivery Controller FQDN証明書をPFXファイルとしてエクスポートします。

    Delivery Controller FQDN証明書をエクスポートする

  2. エクスポートしたPFX証明書を、Delivery Controllerサーバーのインターネットインフォメーションサービス(IIS)にインポートします。

    エクスポートしたPFX証明書をインポートする

  3. インポートした証明書をIIS内のデフォルトのWebサイトにバインドします。

    インポートした証明書をバインドする

  4. バインドプロセス中に、インポートした特定の証明書を選択します。

    バインド中にインポートされた証明書を選択する

手順4:Linux VDAでCA証明書を保存して更新する

  1. CA証明書をダウンロードします。 次に例を示します:

    CA証明書をダウンロードする

  2. CA証明書を配置して更新します。

    • RHELおよびRocky Linuxの場合:

      CA証明書を追加するには、trust anchorコマンドを使用します。 /etc/pki/ca-trust/source/anchorsディレクトリに証明書が手動で配置されていないことを確認します。 読み取り専用フィールドに関連するエラーが発生した場合は、そのディレクトリにあるすべての証明書を削除します。

    • SUSE、Ubuntu、Debianの場合:

      ルートCA証明書を/usr/local/share/ca-certificatesディレクトリに配置します。 証明書に.crt拡張子が付いていない場合は、名前に追加してください。 次に、update-ca-certificateコマンドを実行します。

WebSocketの自己署名証明書の構成