Share via


FIPS 準拠の安全なリモート Linux 開発のセットアップ

Linux サポートは Visual Studio 2017 以降で使用できます。 FIPS 準拠の安全なリモート Linux 開発は、Visual Studio 2019 バージョン 16.5 以降で利用できます。

Federal Information Processing Standard (FIPS) パブリケーション 140-2 は、暗号化モジュールに関する米国政府の標準です。 標準の実装は、NIST によって検証されています。 Windows では、FIPS 準拠の暗号化モジュールのサポートが検証されています。 Visual Studio 2019 バージョン 16.5 以降では、リモート開発のために Linux システムへの安全な FIPS 準拠の暗号化された接続を使用できます。

ここでは、Visual Studio とリモート Linux システムとの間に、FIPS 準拠の安全な接続を設定する方法について説明します。 このガイドは、Visual Studio で CMake または MSBuild Linux プロジェクトをビルドする場合に適用されます。 この記事は、リモート Linux コンピューターへの接続に関する記事にある接続手順の、FIPS に準拠したバージョンです。

FIPS 準拠の接続を準備する

Visual Studio とリモート Linux システムとの間で FIPS 準拠の暗号化された安全な ssh 接続を使用するには、いくらかの準備が必要です。 FIPS-140-2 の準拠に関しては、Visual Studio は RSA キーのみをサポートしています。

この記事の例では、Ubuntu 18.04 LTS と OpenSSH サーバー バージョン 7.6 を使用します。 ただし、比較的最近のバージョンの OpenSSH を使用する任意のディストリビューションでも同じ手順を使用できます。

リモート システムで SSH サーバーを設定するには

  1. Linux システム上で、OpenSSH サーバーをインストールして起動します。

    sudo apt install openssh-server
    sudo service ssh start
    
  2. システム起動時に自動的に ssh サーバーを起動させたい場合は、systemctl を使って有効にします。

    sudo systemctl enable ssh
    
  3. ルートとして /etc/ssh/sshd_config を開きます。 次の行を編集 (存在しない場合は追加) します。

    Ciphers aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc
    HostKeyAlgorithms ssh-rsa
    KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
    MACs hmac-sha2-256,hmac-sha1
    

    注意

    ssh-rsa は、VS がサポートする唯一の FIPS 準拠のホスト キー アルゴリズムです。 aes*-ctr アルゴリズムも FIPS に準拠していますが、Visual Studio での実装は認められていません。 ecdh-* キー交換アルゴリズムは FIPS に準拠していますが、Visual Studio ではサポートしていません。

    使用できるオプションはこれだけではありません。 その他の暗号、ホスト キー アルゴリズムなどを使用するように ssh を構成できます。 考慮すべき他の重要なセキュリティ オプションには、PermitRootLoginPasswordAuthenticationPermitEmptyPasswords があります。 詳細については、sshd_configman ページ、または SSH サーバー構成に関する記事を参照してください。

  4. sshd_config を保存して閉じた後、ssh サーバーを再起動して新しい構成を適用します。

    sudo service ssh restart
    

次に、Windows コンピューターで RSA キーの組を作成します。 その後、ssh で使用できるように、公開キーをリモート Linux システムにコピーします。

RSA キー ファイルを作成して使用するには

  1. Windows マシン上で、次のコマンドを使用して RSA の公開および秘密キーの組を生成します。

    ssh-keygen -t rsa -b 4096 -m PEM
    

    このコマンドにより、公開キーと秘密キーが作成されます。 既定では、キーは %USERPROFILE%\.ssh\id_rsa%USERPROFILE%\\.ssh\\id_rsa.pub に保存されます。 (PowerShell では、cmd マクロ %USERPROFILE% ではなく $env:USERPROFILE を使用してください) キーの名前を変更する場合、続くステップでは変更した名前を使用してください。 セキュリティを強化するために、パスフレーズを使用することをお勧めします。

  2. Windows から、Linux マシンに公開キーをコピーします。

    scp %USERPROFILE%\.ssh\id_rsa.pub user@hostname:
    
  3. Linux システムで、承認済みキーのリストにキーを追加し、ファイルに適切なアクセス許可があることを確認します。

    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
  4. これで、新しいキーを ssh で使用できるかをテストできます。 Windows からのサインインに使用します。

    ssh -i %USERPROFILE%\.ssh\id_rsa user@hostname
    

正常に ssh を設定し、暗号化キーを作成および配置し、接続をテストできました。 これで Visual Studio 接続を設定する準備が整いました。

Visual Studio でリモート システムに接続する

  1. Visual Studio のメニュー バーで [ツール] > [オプション] を選択して、[オプション] ダイアログを開きます。 その後、[クロス プラットフォーム] > [接続マネージャー] を選択し、[接続マネージャー] ダイアログを開きます。

    まだ Visual Studio で接続を設定したことがない場合、プロジェクトを初めてビルドする際に、Visual Studio によって [接続マネージャー] ダイアログが開かれます。

  2. [接続マネージャー] ダイアログで、 [追加] ボタンを選択して新しい接続を追加します。

    [接続マネージャー] ダイアログのオプション ペインを示すスクリーンショット。[クロス プラットフォーム] > [C++] > [接続マネージャー] が強調されています。

    [リモート システムへの接続] ウィンドウが表示されます。

    ホスト名、ポート、ユーザー名、認証の種類、パスワードのテキスト ボックスがある [リモート システムへの接続] ウィンドウを示すスクリーンショット。

  3. [リモートシステムへの接続] ダイアログで、リモート マシンの接続の詳細を入力します。

    入力 説明
    ホスト名 ターゲット デバイスの名前または IP アドレス
    ポート SSH サービスが実行されているポート (通常は 22)
    ユーザー名 認証するユーザー
    認証の種類 FIPS 準拠の接続のための秘密キーを選択します
    秘密キー ファイル ssh 接続用に作成された秘密キー ファイル
    パスフレーズ 上で選択した秘密キーで使用されるパスフレーズ

    認証の種類を秘密キーに変更します。 [秘密キー ファイル] フィールドに秘密キーへのパスを入力します。 [参照] ボタンを使用して秘密キー ファイルを探すこともできます。 その後、[パスフレーズ] フィールドに、秘密キー ファイルを暗号化するために使用するパスフレーズを入力します。

  4. [接続] ボタンを選択すると、リモート コンピューターへの接続が試行されます。

    接続が成功すると、Visual Studio ではリモートのヘッダーを使うように IntelliSense が構成されます。 詳しくは、「リモート システムのヘッダーでの IntelliSense」をご覧ください。

    接続に失敗した場合は、変更する必要がある入力ボックスが赤色で示されます。

    変更する必要があることを示す赤で囲まれたホスト名とポートのテキスト ボックスがある [リモート システムへの接続] ウィンドウのスクリーンショット。

    接続のトラブルシューティングの詳細については、リモートの Linux コンピューターへの接続に関するページを参照してください。

接続マネージャーのコマンドライン ユーティリティ

Visual Studio 2019 バージョン 16.5 以降: ConnectionManager.exe は、Visual Studio 外でのリモート開発の接続を管理するためのコマンドライン ユーティリティです。 これは、新しい開発マシンをプロビジョニングするなどのタスクに役立ちます。 または、これを利用して Visual Studio で継続的インテグレーションを設定することもできます。 ConnectionManager コマンドの例とすべてのリファレンスについては、「ConnectionManager リファレンス」を参照してください。

省略可能: FIPS モードを有効または無効にする

Windows で FIPS モードをグローバルに有効にすることができます。

  1. FIPS モードを有効にするには、Windows + R キーを押して [ファイル名を指定して実行] ダイアログを開き、gpedit.msc を実行します。

  2. [ローカル コンピューター ポリシー] > [コンピューターの構成] > [Windows の設定] > [セキュリティの設定] > [ローカル ポリシー] を展開して、[セキュリティ オプション] を選択します。

  3. [ポリシー][システム暗号化: 暗号化、ハッシュ、署名のための FIPS 準拠アルゴリズムを使う] を選択し、Enter キーを押してそのダイアログ ボックスを開きます。

  4. [ローカル セキュリティの設定] タブで、[有効] または [無効] を選択した後、OK を選択して変更を保存します。

警告

FIPS モードを有効にすると、アプリケーションによっては中断したり予想外の動作をしたりすることがあります。 詳細については、ブログ記事「"FIPS モード" をお勧めしない理由」を参照してください。

その他のリソース

FIPS 140 の検証に関する Microsoft ドキュメント

FIPS 140-2: 暗号化モジュールのためのシステム要件 (NIST から)

暗号化アルゴリズム検証プログラム: 検証についての注記 (NIST から)

"FIPS モード" をお勧めしない理由」の Microsoft のブログ記事

SSH サーバーの構成

参照

Linux プロジェクトを構成する
Linux CMake プロジェクトを構成する
リモートの Linux コンピューターに接続する
Linux プロジェクトの配置、実行、デバッグ
CMake デバッグ セッションを構成する