配置基于 QUIC 的 SMB 客户端访问控制

通过 QUIC 客户端访问控制 SMB,可以限制哪些客户端可以通过 QUIC 服务器访问 SMB。 客户端访问控制允许你为设备创建允许列表和阻止列表以连接到文件服务器。 客户端访问控制为组织提供了更多的保护,而无需更改进行 SMB 连接时使用的身份验证,也不会改变最终用户体验。

客户端访问控制的工作原理

客户端访问控制涉及服务器检查证书的访问控制列表,以确定是否允许客户端与服务器建立 QUIC 连接。 服务器会验证客户端证书链,并确保其受到信任,然后再继续进行访问控制检查。 若要配置客户端访问控制,管理员向客户端颁发证书,并将证书的哈希添加到服务器维护的访问控制列表中。

如果允许客户端通过 QUIC 连接到服务器,则会创建基于 UDP 端口 443 的 TLS 1.3 加密隧道。 客户端访问控制还支持具有使用者可选名称的证书。 还可以将基于 QUIC 的 SMB 配置为通过吊销证书或明确拒绝某些设备访问来阻止访问。 服务器管理员可以通过撤销客户端证书来阻止客户端访问服务器,而不是仅依赖于客户端访问控制。

注意

建议将基于 QUIC 的 SMB 与 Active Directory 域配合使用,但这不是必需的。 还可以在具有本地用户凭据和 NTLM 的已加入工作组的服务器上使用基于 QUIC 的 SMB。

可以使用 Grant-SmbClientAccessToServerRevoke-SmbClientAccessToServer cmdlet 分别添加和删除允许访问控制条目。 可以使用 Block-SmbClientAccessToServerUnblock-SmbClientAccessToServer cmdlet 分别添加和删除拒绝访问控制条目。 可以使用 Get-SmbClientAccessToServer cmdlet 显示访问控制列表中的条目。

通过添加一个访问控制条目,可以授予或拒绝分支证书的访问权限,该条目通过 SHA256 哈希标识证书。 通过为共同颁发者添加颁发者访问控制条目,可以授予或拒绝一组具有共同颁发者的分支证书的访问权限。 可以为中间 CA 证书和根 CA 证书添加颁发者条目。 使用颁发者条目非常有用,因为它们有助于减少需要添加的条目总数。 如果客户端的证书链中没有任何证书被拒绝访问,并且至少允许一个证书访问,则授予客户端访问权限。 例如:

  • 如果为 CA 证书添加了允许条目,并且为其中一个分支证书添加了拒绝条目,则 CA 颁发的所有证书都被授予访问权限,但添加拒绝条目的证书除外。

  • 如果为 CA 证书添加了拒绝条目,并且为其中一个主证书添加了允许条目,则 CA 颁发的所有证书将被拒绝访问。 添加了允许条目的证书被拒绝访问,因为证书链中的任何拒绝条目都优先于允许条目。

  • 假设根 CA 有两个中间 CA,称为中间 CA 1 和中间 CA 2。 如果为根 CA 添加了允许条目,并且中间 CA 2 添加了拒绝条目,则中间 CA 1 颁发的证书将被授予访问权限,中间 CA 2 颁发的证书将被拒绝访问。

先决条件

在配置客户端访问控制之前,需要一个 SMB 服务器,并满足以下先决条件。

重要

安装 KB5035857 后,必须在组策略中启用此功能:

  1. 单击开始,键入 gpedit,然后选择编辑组策略
  2. 导航到 Computer Configuration\Administrative Templates\KB5035857 240302_030531 Feature Preview\Windows Server 2022
  3. 打开 KB5035857 240302_030531 功能预览策略,然后选择已启用

还需要一个 SMB 客户端,并满足以下先决条件。

重要

安装 KB5035854 后,必须在组策略中启用此功能:

  1. 单击开始,键入 gpedit,然后选择编辑组策略
  2. 导航到 Computer Configuration\Administrative Templates\KB5035854 240302_030535 Feature Preview\Windows 11(原始版本)
  3. 打开 KB5035854 240302_030535 功能预览策略,然后选择已启用

配置 SMB 服务器

若要管理 SMB 客户端的设置,必须先配置 SMB 服务器,以强制客户端发送有效且受信任的证书链,并基于客户端证书链执行访问控制检查。 若要执行此操作,请运行以下命令:

Set-SmbServerCertificateMapping -RequireClientAuthentication $true

注意

如果 RequireClientAuthenticationSkipClientCertificateAccessCheck 都设置为 $true,则服务器将验证客户端证书链的有效性和可信度,但不执行访问控制检查。

配置 SMB 客户端

收集 SMB 客户端证书信息

若要使用 PowerShell 收集客户端证书哈希,请执行以下操作:

  1. 在 SMB 客户端上打开权限提升的 PowerShell 提示符。

  2. 运行以下命令,列出客户端证书存储中的证书。

    Get-ChildItem -Path Cert:\LocalMachine\My
    
  3. 运行以下命令,将证书存储在变量中。 将 <subject name> 替换为想要使用的证书的使用者名称。

    $clientCert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -Match "<subject name>"}
    
  4. 运行以下命令,记下客户端证书的 SHA256 哈希。 配置客户端访问控制时,需要此标识符。

    $clientCert.GetCertHashString("SHA256")
    

注意

存储在 $clientCert 对象中的指纹使用 SHA1 算法。 New-SmbClientCertificateMapping 等命令使用此方法。 还需要 SHA256 指纹来配置客户端访问控制,这些指纹将使用针对同一证书的不同算法获得不同的指纹。

将客户端证书映射到 SMB 客户端

若要将客户端证书映射到 SMB 客户端,请执行以下操作:

  1. 在 SMB 客户端上打开权限提升的 PowerShell 提示符。

  2. 运行 New-SmbClientCertificateMapping 命令以映射客户端证书。 将 <namespace> 替换为 SMB 服务器的完全限定域名 (FQDN),并使用在上一节中使用变量收集的 SHA1 客户端证书指纹。

    New-SmbClientCertificateMapping -Namespace <namespace> -Thumbprint $clientCert.Thumbprint -StoreName My
    

完成后,SMB 客户端将使用经过证书验证的客户端向匹配 FQDN 的 SMB 服务器进行身份验证。

测试映射连接

通过映射到服务器或客户端设备的共享来运行连接测试。 若要执行此操作,请运行以下命令之一:

NET USE \\<server DNS name>\<share name> /TRANSPORT:QUIC

New-SmbMapping -RemotePath \\<server DNS name>\<share name> -TransportType QUIC

如果收到一条错误消息,指出服务器拒绝了访问,则可以继续执行下一步,因为这会验证服务器证书映射和客户端证书映射的配置。

配置客户端访问控制

授予单个客户端

按照步骤,使用客户端访问控制授予特定客户端对 SMB 服务器的访问权限。

  1. 登录 SMB 服务器。

  2. 在 SMB 服务器上打开权限提升的 PowerShell 提示符。

  3. 运行 Grant-SmbClientAccessToServer 以授予对客户端证书的访问权限。 将 <name> 替换为 SMB 服务器的主机名,将 <hash> 替换为在收集 SMB 客户端证书信息部分中收集的 SHA256 客户端证书标识符。

    Grant-SmbClientAccessToServer -Name <name> -IdentifierType SHA256 -Identifier <hash>
    

现在已授予对客户端证书的访问权限。 可以通过运行 Get-SmbClientAccessToServer cmdlet 来验证客户端证书访问权限。

授予特定证书颁发机构

按照步骤,使用客户端访问控制向特定证书颁发机构(也称为颁发者)授予对客户端的权限。

  1. 登录 SMB 服务器。

  2. 在 SMB 服务器上打开权限提升的 PowerShell 提示符。

  3. 运行 Grant-SmbClientAccessToServer 以授予对客户端证书的访问权限。 将 <name> 替换为 SMB 服务器的主机名,将 <subject name> 替换为颁发者证书的完整 X.500 可分辨名称。 例如,CN=Contoso CA, DC=Contoso, DC=com

    Grant-SmbClientAccessToServer -Name <name> -IdentifierType ISSUER -Identifier "<subject name>"
    

完成此步骤后,请运行 New-SmbMapping cmdlet,如 测试映射连接中所述,建议进行第二次运行以验证是否已正确配置客户端访问控制。

审核事件日志

出于故障排除目的,捕获某些事件,例如允许访问和拒绝访问。 这些事件提供有关客户端证书(不包括根证书)的信息,例如使用者、颁发者、序列号、SHA1 和 SHA256 哈希,以及适用于这些证书的访问控制条目。 这些事件显示连接 ID。 此 ID 显示在某些客户端连接事件中,这允许管理员轻松将服务器与尝试建立连接的客户端匹配。

默认情况下禁用了审核这些事件,可以通过运行以下命令来启用:

Set-SmbServerConfiguration -AuditClientCertificateAccess $true

一旦启用,这些事件将在以下路径中的 事件查看器 中捕获。

路径 事件编号
应用程序和服务日志\Microsoft\Windows\SMBServer\Audit 3007
3008
3009
应用程序和服务日志\Microsoft\Windows\SMBClient\Connectivity 30831