设置符合 FIPS 标准的安全远程 Linux 开发
Linux 支持在 Visual Studio 2017 及更高版本中提供。 可以在 Visual Studio 2019 版本 16.5 及更高版本中设置符合 FIPS 的安全远程 Linux 开发。
美国联邦信息处理标准 (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 服务器的具体步骤
在 Linux 系统上,安装并启动 OpenSSH 服务器:
sudo apt install openssh-server sudo service ssh start
若要让
ssh
服务器在系统启动时自动启动,请使用systemctl
启用它:sudo systemctl enable ssh
以根用户身份打开
/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
配置为使用其他密码、主机密钥算法等。 不妨考虑使用的其他一些相关安全选项有PermitRootLogin
、PasswordAuthentication
和PermitEmptyPasswords
。 有关详细信息,请参阅sshd_config
的man
页或 SSH 服务器配置一文。保存并关闭
sshd_config
后,重启 SSH 服务器,以应用新配置:sudo service ssh restart
接下来,将在 Windows 计算机上创建 RSA 密钥对。 然后,将公钥复制到远程 Linux 系统,以供 ssh
使用。
创建和使用 RSA 密钥文件的具体步骤
在 Windows 计算机上,使用以下命令生成公用/专用 RSA 密钥对:
ssh-keygen -t rsa -b 4096 -m PEM
此命令将创建一个公钥和一个私钥。 默认情况下,密钥保存到
%USERPROFILE%\.ssh\id_rsa
和%USERPROFILE%\\.ssh\\id_rsa.pub
。 (在 PowerShell 中,请使用$env:USERPROFILE
,而不是 cmd 宏%USERPROFILE%
)如果更改密钥名称,请在后续步骤中使用更改后的名称。 为了提高安全性,建议使用密码。将公钥从 Windows 复制到 Linux 计算机:
scp %USERPROFILE%\.ssh\id_rsa.pub user@hostname:
在 Linux 系统上,将密钥添加到授权密钥列表中,并确保文件具有正确的权限:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
现在,可以测试新密钥在
ssh
中是否有效。 使用它在 Windows 中登录:ssh -i %USERPROFILE%\.ssh\id_rsa user@hostname
此时,你已成功设置 ssh
、创建和部署加密密钥,并已测试连接。 现在可以设置 Visual Studio 连接了。
在 Visual Studio 中连接到远程系统
在 Visual Studio 中,依次选择菜单栏上的“工具”>“选项”,以打开“选项”对话框。 然后,依次选择“跨平台”>“连接管理器”,以打开“连接管理器”对话框。
如果你以前没有在 Visual Studio 中设置过连接,Visual Studio 会在你首次生成项目时,为你打开“连接管理器”对话框。
在“连接管理器”对话框中,选择“添加” 按钮,以添加新连接。
此时,“连接到远程系统”窗口显示。
在“连接到远程系统”对话框中,输入远程计算机的连接详细信息。
条目 描述 主机名 目标设备的名称或 IP 地址 端口 运行 SSH 服务的端口,通常为 22 用户名 要进行身份验证的用户 身份验证类型 选择用于符合 FIPS 的连接的私钥 私钥文件 为 ssh 连接创建的私钥文件 密码 与上面选择的私钥一起使用的密码 将“身份验证类型”更改为“私钥”。 在“私钥文件”字段中,输入私钥路径。 可以改用“浏览”按钮转到私钥文件。 然后,在“密码”字段中输入用于加密私钥文件的密码。
选择“连接”按钮,尝试连接到远程计算机 。
如果连接成功,Visual Studio 便会将 IntelliSense 配置为使用远程标头。 有关详细信息,请参阅远程系统上标头的 IntelliSense。
如果连接失败,则需要更改的输入框的边框为红色。
若要详细了解如何排查连接问题,请参阅连接到远程 Linux 计算机。
用于连接管理器的命令行实用工具
Visual Studio 2019 version 16.5 或更高版本:ConnectionManager.exe
是用于在 Visual Studio 之外管理远程开发连接的命令行实用工具。 它对于预配新开发计算机之类的任务非常有用。 你也可以使用它来设置 Visual Studio 进行持续集成。 有关 ConnectionManager 命令的示例和完整参考,请参阅 ConnectionManager 参考。
可选:启用或禁用 FIPS 模式
可以在 Windows 中全局启用 FIPS 模式。
若要启用 FIPS 模式,请按 Windows+R 以打开“运行”对话框,然后运行
gpedit.msc
。依次展开“本地计算机策略”>“计算机配置”>“Windows 设置”>“安全设置”>“本地策略”,并选择“安全选项”。
在“策略”下,选择“系统加密: 使用符合 FIPS 的算法进行加密、哈希和签名”,然后按 Enter 键以打开相应对话框 。
在“本地安全设置”选项卡中,选中“已启用”或“已禁用”,再选择“确定”,以保存更改。
警告
启用 FIPS 模式可能会导致某些应用程序中断或出现意外行为。 有关详细信息,请参阅博客文章为什么我们不再推荐“FIPS 模式”。
其他资源
FIPS 140-2:加密模块的安全要求(来自 NIST)
加密算法验证程序:验证说明(来自 NIST)
Microsoft 博客文章为什么我们不再推荐“FIPS 模式”
另请参阅
配置 Linux 项目
配置 Linux CMake 项目
连接到远程 Linux 计算机
部署、运行和调试 Linux 项目
配置 CMake 调试会话