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

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

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

Amazon 默认情况下,托管 Microsoft AD 目录使用强证书绑定,这需要在证书和 AD 对象之间进行显式映射。对于 Amazon 托管 Microsoft AD,以下映射被认为是强大的:

  • altSecurityIdentities 颁发者和序列号

  • altSecurityIdentities 使用者密钥标识符

  • altSecurityIdentities SHA1 公钥的哈希值

这些属性支持强大的证书映射,这要求在 Active Directory 中定义显式 certificate-to-user关系,从而为基于证书的身份验证提供更好的安全性。这有助于防范基于证书的权限提升攻击

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

欲了解更多信息,请参阅 Microsoft KB5 014754:Windows 域控制器上基于证书的身份验证更改

先决条件

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

  • 对 Active Directory 环境的管理权限

  • PowerShell 安装了活动目录模块

  • 要映射至 AD 对象的证书

地图 AltSecurityIdentity属性

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

    • SHA1 hash — 使用证书公钥的 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