PowerShell을 사용하여 인증서 등록 정책 사용 및 인증서 요청


9

현재 CEP 서버에서 인증서를 요청하기 위해 다음을 수행하고 있습니다.

  • gpedit.msc를 엽니 다
  • 컴퓨터 구성> Windows 설정> 보안 설정> 공개 키 정책에서 "인증서 서비스 클라이언트-인증서 등록 정책"을 두 번 클릭하십시오.
  • 사용
  • CEP URI를 입력하십시오
  • 사용자 이름 / 비밀번호 인증으로 전환
  • 검증 (크리드 제공)
  • MMC를 열고 인증서 가져 오기
  • 인증서> 개인으로 이동
  • 마우스 오른쪽 버튼 클릭> 새 인증서 요청
  • "추가 정보"(CN, DNS 이름 등)를 입력하십시오.
  • 크리드 제공

이 후 나는 CEP의 증명서를 받았습니다. 그러나이 작업은 수동으로 수행하기 어려운 과정입니다. Server 2008 (및 2012)에서이를 자동화 할 수있는 방법이 있습니까? 이에 대해 찾을 수있는 모든 정보는 CEP 서비스를 설치하여 서버를 등록 정책 서버로 만드는 방법을 알려줍니다 (실제로 새 인증서를 요청하거나 클라이언트 측에서이를 활성화하는 것에 대한 내용 없음). 이것을 자동화 할 수 있습니까?

이 프로세스는 HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ Cryptography 아래에 많은 데이터를 추가하는 것 같습니다. 이것을 수동으로 추가 할 수 있습니까 (GUID / ServiceID 스푸핑)?


1
나는 또한 모든 것을 POWERSHELL하고 싶습니다으로 당신의 열정을 낙담하지 말고 !!!!!! 그러나 그룹 정책 cmdlet은 여전히 ​​끔찍하고 v3보다 v4에서 PKI cmdlet이 훨씬 향상되었으므로 ... :( 그러나 PowerShell 모듈에 대한 타사 PKI 모듈이 유용하다는 것을 알았 습니다. 당신이 무엇을하려는 수동 고통
HopelessN00b

답변:


3

인증서 요청이 템플릿을 사용하여 이루어 졌다고 가정합니다. 이 경우 Public Key Policies/Certificate Services Client - Auto-Enrollment SettingsGPO를 사용하여 자동 등록을 시행하십시오. 또한 ACL이 한 템플릿 수 있도록 할 것입니다 Enroll그리고 AutoEnroll그것은 기계의 여부에 따라 활용에 대한 사용자 설정 및 컴퓨터 설정 정책이있다 (의도 된 청중에 따라, ACL 객체를 또는 무엇이든) 중 도메인 컴퓨터 또는 도메인 사용자를위한 표시를 푸시하려는 인증서 또는 사용자 인증서. GPO 연결 및 적용 후 정책이 적용되는 즉시 (일반적으로 약 15 분) 등록이 시작됩니다.


2
글쎄 PowerShell 부분에 매달리면서 수년 동안 인증서 등록을 자동화하기 위해 많은 수의 GPO를 설정했다는 사실에 완전히 공감했습니다. 도! 잘 잡았습니다.
HopelessN00b

이것은 확실히 옵션 (아마도 가장 좋은 옵션)이지만 로컬 그룹 정책 설정을 선호합니다. 이것이 가능합니까?
EGr

2
@EGr 왜 세상 에서 그렇게하고 싶습니까?
MDMoore313

@ HopelessN00b 나는 똑같은 일을했지만 최소한 문제 해결을 위해 powershell 방법을 사용하는 것이 좋을 것이므로 여전히 좋은 질문입니다.
MDMoore313

1

이것은 Windows 2012 R2 이상에서 사용한 프로세스입니다. 모든 PowerShell 코드는 관리자 권한 PowerShell 프롬프트에서 실행되었습니다. 완전한 자동화는 사용자를위한 연습으로 남아 있습니다.

전제 조건

주체 탭에서 "요청시 공급"단일 선택 단추가 선택된 인증서 서버의 템플리트가 있는지 확인하십시오. 이 컴퓨터는 AD 컴퓨터가 아니기 때문에 인증서 서버가 Active Directory에 정보를 적절히 쿼리 할 수 ​​없습니다.

루트 내보내기

인증서 서버에서 신뢰할 수있는 루트 인증 기관 인증서를 내 보낸 다음 해당 인증서 파일을 대상 서버로 복사하십시오.

certutil --% -ca.cert <name of certificate file>

뿌리를 믿어

해당 인증서를 대상 서버의 신뢰할 수있는 루트 인증 기관으로 가져 오기

$PathToCertificate=<name of certificate file>
$RootCertificate=Get-PfxCertificate -FilePath $PathToCertificate
$AlreadyExists=Get-ChildItem -Path "Cert:\LocalMachine\Root" | Where-Object { $_.Thumbprint -eq $RootCertificate.Thumbprint }
if ($AlreadyExists -eq $null) { Import-Certificate -CertStoreLocation "Cert:\LocalMachine\Root" -FilePath $PathToCertificate }
else { Write-Warning "Root certificate already installed" }

Active Directory 정책 공급자

Active Directory 정책 공급자의 URL 확인

# Get AD Configuration Context
$RootDSE=[System.DirectoryServices.DirectoryEntry]::new("LDAP://RootDSE")
$ConfigContext="CN=Enrollment Services,CN=Public Key Services,CN=Services,"+$RootDSE.configurationNamingContext
# Get name of Enterprise Root Certificate Autority server
$Server=Get-ADObject -SearchBase $ConfigContext -Filter "*"
if ($Server.Count -eq 1) { throw "No Enterprise Root Certificate Autority server exists" }
else { $Server=$Server[1].Name }
# Get Enrollment URL
$ConfigContext="CN=$Server,"+$ConfigContext
$EnrollmentURL=(Get-ADObject -SearchBase $ConfigContext -Filter "*" -Properties "msPKI-Enrollment-Servers" | Select-Object -ExpandProperty "msPKI-Enrollment-Servers").Split("`n") | Where-Object { $_ -like "http*" }
if ($EnrollmentURL -eq $null) { $EnrollmentURL="" }
# Get AD Enrollment Policy URL
$Server=$Server+$RootDSE.configurationNamingContext.Value.Replace("CN=Configuration","").Replace(",DC=",".")
$WMI=Get-WmiObject -ComputerName $Server -Namespace "root\WebAdministration" -Class Application | Where-Object { $_.Path -eq "/ADPolicyProvider_CEP_UsernamePassword" }
if ($WMI -ne $null) { $PolicyURL="https://"+$Server+$WMI.Path+"/service.svc/CEP" }
else { $PolicyURL="" }
Write-Output "Enrollment URL = $EnrollmentURL"
Write-Output "Policy URL = $PolicyURL"

등록 정책

대상 서버에 등록 정책을 추가합니다 (Windows 2012 이상에서만 작동합니다. GUI 지침은 아래를 참조하십시오). 비 도메인 템플릿을 생성 한 후 정책이 추가되었는지 확인하십시오. 그렇지 않으면 정책이 새로 고쳐지지 않아 표시되지 않습니다.

$User="<your domain name>\<your domain user name>"
$Pass="<Your domain password>"
$SecPass=ConvertTo-SecureString -String $Pass -AsPlainText -Force
$Cred=[System.Management.Automation.PSCredential]::new($User,$SecPass)
Add-CertificateEnrollmentPolicyServer -Url $PolicyURL -context Machine -NoClobber -AutoEnrollmentEnabled -Credential $Cred

인증서 받기

원하는 템플릿을 사용하여 인증서를 등록 할 수 있습니다

$DNS="<FQDN of your server>"
$URL=Get-CertificateEnrollmentPolicyServer -Scope All -Context Machine | Select-Object -ExpandProperty Url | Select-Object -ExpandProperty AbsoluteUri
$Enrollment=Get-Certificate -Url $URL -Template "<Template name (not display name)>" -SubjectName "CN=$DNS" -DnsName $DNS -Credential $Cred -CertStoreLocation cert:\LocalMachine\My
$Enrollment.Certificate.FriendlyName=$DNS

등록 정책 Windows 2012 R2 이전

  1. 인증서 MMC를 엽니 다
  2. 개인 인증서 저장소로 드릴 다운
  3. "인증서"를 마우스 오른쪽 단추로 클릭하고 모든 작업 / 고급 작업 / 관리를 선택하십시오.
  4. 상황에 맞는 메뉴에서 등록 정책
  5. "추가"버튼을 클릭하십시오
  6. 등록 정책의 URL 붙여 넣기
  7. 인증 유형으로 사용자 이름 / 암호를 선택하십시오.
  8. "서버 확인"버튼을 클릭하고 도메인을 포함한 도메인 자격 증명을 입력하십시오
  9. 성공적으로 확인했다면 "추가"버튼을 클릭하십시오
  10. 등록 정책을 선택하고 "속성"버튼을 클릭하십시오
  11. "자동 등록 및 갱신 가능"상자가 선택되어 있는지 확인하십시오
  12. "등록시 강력한 확인 필요"를 확인한 적이 없으므로 해당 내용이 무엇인지 모릅니다.

0

완벽한 솔루션은 없지만 시작점을 조언 할 수 있습니다. 내 PowerShell PKI 모듈 에는 Windows 7 / Windows Server 2008 R2부터 등록 서비스 끝점을 등록 할 수있는 기능이 있습니다 (Windows Server 2008은 등록 서비스를 지원하지 않습니다). 정책을 등록하는 방법의 예는 다음과 같습니다. http://en-us.sysadmins.lv/Lists/Posts/Post.aspx?ID=101

등록 관련. 이 블로그 게시물 시리즈 는 CertEnroll COM 인터페이스를 사용하여 PowerShell에서 인증서 등록을 수행하는 방법에 대한 통찰력을 제공합니다. 웹 서비스 등록에 대해서는 아무 것도 없지만 불행히도 기술은 동일합니다. 이 인터페이스로 시작해야합니다. IX509CertificateRequestPkcs10V2

HTH

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.