为 Amazon Managed Microsoft AD 用户的初始身份验证启用公钥加密(PKINIT) - Amazon Directory Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为 Amazon Managed Microsoft AD 用户的初始身份验证启用公钥加密(PKINIT)

Amazon Managed Microsoft AD 目录默认使用强证书绑定,这需要在证书和 AD 对象之间进行显式映射。以下映射可视为适用于 Amazon Managed Microsoft AD 的强映射:

  • altSecurityIdentities 颁发者和序列号

  • altSecurityIdentities 使用者密钥标识符

  • altSecurityIdentities 公钥的 SHA1 哈希值

这些属性支持强证书映射,强映射要求在 Active Directory 中定义明确的证书和用户关系,从而为基于证书的身份验证提供更好的安全性。这有助于防范基于证书的权限提升攻击

可使用此过程配置强证书绑定,在保持证书身份验证功能的同时帮助防止权限提升攻击。

有关更多信息,请参阅 Microsoft KB5014754:Windows 域控制器上基于证书的身份验证更改

先决条件

  • 配置了证书颁发机构的 Amazon Managed Microsoft AD 目录

  • 对 Active Directory 环境的管理权限

  • 安装了 Active Directory 模块的 PowerShell

  • 要映射至 AD 对象的证书

映射 AltSecurityIdentity 属性

  1. 根据证书信息,选择以下 AltSecurityIdentity 映射方法之一:

    • SHA1 哈希:使用证书公钥的 SHA1 哈希值

      要映射 SHA1 哈希,请提取证书哈希值,并将其应用于用户对象:

      $Username = 'YourUsername' $cert = certutil -dump "YourCertificate.cer" $certHash = ($cert | Select-String -Pattern "(sha1):*" | Select-String -Pattern "Cert").ToString().TrimStart('Cert Hash(sha1): ').Replace(' ','') Set-ADUser -Identity $Username -Add @{'altSecurityIdentities'="X509:<SHA1-PUKEY>$CertHash"}
    • 颁发者和序列号:使用证书的颁发者名称和序列号

      要映射颁发者和序列号,请使用证书的颁发者和序列号:

      $Username = 'YourUsername' $IssuerName = 'YourCertificateIssuer' $SerialNumber = 'YourCertificateSerialNumber' Set-ADUser -Identity $Username -Add @{'altSecurityIdentities'="X509:<I>$IssuerName<SR>$SerialNumber"}
    • 使用者密钥标识符:使用证书的使用者密钥标识符扩展

      要映射使用者密钥标识符,请使用证书的使用者密钥标识符:

      $Username = 'YourUsername' $SubjectKeyIdentifier = 'YourSubjectKeyIdentifier' Set-ADUser -Identity $Username -Add @{'altSecurityIdentities'="X509:<SKI>$SubjectKeyIdentifier"}
  2. 验证映射是否成功应用:

    Get-ADUser -Identity $Username -Properties altSecurityIdentities | Select-Object -ExpandProperty altSecurityIdentities
  3. 等待 Active Directory 复制完成(通常为 15-30 秒钟),然后再测试证书身份验证。

示例:对 AltSecurityIdentity 属性进行批量证书映射

以下示例演示如何对来自某个证书颁发机构的多个用户证书的 AltSecurityIdentity 属性进行映射:

$CertificateTemplateName = 'User' $Now = $((Get-Date).ToString($(Get-culture).DateTimeFormat.ShortDatePattern)) $Restrict = "Disposition=20,NotAfter>=$Now,Certificate Template=$CertificateTemplateName" $Out = "SerialNumber,Certificate Hash,User Principal Name,RequesterName,CommonName,CertificateTemplate,NotBefore,NotAfter" $Certs = certutil -view -restrict $Restrict -out $Out csv | ConvertFrom-CSV $UserSha1HashMapping = @{} ForEach ($Cert in $Certs) { $UPN = $Cert.'User Principal Name' $Username, $Domain = $UPN.Split('@') $CertificateThumbprint = ($Cert.'Certificate Hash').Replace(' ','') $AdUserObject = Get-ADUser -Identity $Username If ($AdUserObject -And $AdUserObject.Count -gt 1) { Write-Output "Unable to map user: $Username, multiple user objects found" Continue } If ($AdUserObject) { If ($UserSha1HashMapping.Keys -Contains $Username) { $UserSha1HashMapping[$Username] += $CertificateThumbprint } Else { $UserSha1HashMapping[$Username] = @($CertificateThumbprint) } } } ForEach ($User in $UserSha1HashMapping.Keys) { Write-Output "Mapping altSecurityIdentity for $User" $UserObject = Get-ADUser -Identity $User | Get-ADObject -Properties 'altSecurityIdentities' $altSecurityIdentities = $UserObject.altSecurityIdentities ForEach ($thumbprint in $UserSha1HashMapping[$User]) { $SHA1PUKEY = "X509:<SHA1-PUKEY>$thumbprint" If ($altSecurityIdentities -Contains $SHA1PUKEY) { Write-Output "Skipping $thumbprint, already mapped." Continue } Write-Output "Adding $thumbprint to $User as altSecurityIdentity" Set-ADUser -Identity $User -Add @{'altSecurityIdentities'=$SHA1PUKEY} } }

后续步骤

  • 使用映射的证书测试基于证书的身份验证

  • 配置应用程序,以使用映射的证书进行身份验证

  • 身份验证事件的 监控你的Amazon托管微软 AD