인증서 공급자

업데이트 날짜: 2014년 10월

적용 대상: Windows PowerShell 4.0, Windows PowerShell 5.0

공급자 이름

인증서

드라이브

인증서:

간단한 설명

Windows PowerShell에서 X.509 인증서 저장소 및 인증서에 액세스할 수 있도록 합니다.

자세한 설명

Windows PowerShell 인증서 공급자를 사용하면 인증서 네임스페이스를 검색하고 인증서 저장소와 인증서를 볼 수 있습니다. 또한 MMC(Microsoft Management Console)에 대한 인증서 스냅인을 엽니다.

참고: Windows PowerShell 3.0부터 인증서 공급자를 포함하는 Microsoft.PowerShell.Security 모듈을 자동으로 모든 세션으로 가져올 수 없습니다. Cert: 드라이브를 사용하려면 Import-Module cmdlet을 사용하여 모듈을 가져오거나 Cert: 드라이브를 사용하는 명령(예: "Set-Location Cert:")을 실행합니다.

Windows PowerShell 3.0부터 인증서 공급자는 cmdlet에 대한 지원과, LocalMachine 인증서 저장소 위치에 인증서 저장소를 생성 및 삭제하고, 인증서를 찾고 이동하고 삭제하는 새 동적 매개 변수를 추가하여 웹 호스팅에 대한 SSL(Secure Socket Layer) 인증서를 관리하기 위한 지원을 향상시킵니다.

새 동적 매개 변수인 DnsName, EKU, SSLServerAuthentication ExpiringInDays가 Cert: 드라이브의 Get-ChildItem cmdlet에 추가되었습니다. 또한 DeleteKey 동적 매개 변수가 Cert: 드라이브의 Remove-Item에 추가되었습니다. 새로운 동적 매개 변수는 Windows PowerShell 3.0 이상의 Windows PowerShell 릴리스에서 사용할 수 있으며 Windows Server 운영 체제의 Windows Server 2012 이상 릴리스에서 사용할 수 있는 IIS 8.0에서 작동합니다.

새 스크립트 속성인 DnsNameList EnhancedKeyUsageList, SendAsTrustedIssuer는 인증서를 쉽게 검색하고 관리할 수 있게 나타내는 x509Certificate2 개체에 추가되었습니다.

이러한 새 기능을 통해 DNS 이름과 만료 날짜를 기준으로 인증서를 검색하고, EKU(확장된 키 사용) 속성의 값으로 클라이언트 및 서버 인증 인증서를 구분할 수 있습니다.

이러한 향상된 기능은 IIS를 통해 만든 WebHosting 인증서 저장소를 지원하도록 디자인되었습니다. 이 인증서 저장소는 확장되도록 최적화되어 있으므로 동적 공유 호스팅에 필요한 수많은 인증서를 효율적으로 자동으로 관리할 수 있습니다. WebHosting 인증서 저장소는 Windows Server 2012 이상의 Windows Server 운영 체제 버전에서 제공되는 웹 서버(IIS)에서 사용할 수 있는 IIS 8.0부터 사용할 수 있습니다.

DnsNameList 속성을 채우기 위해 인증서 공급자는 SAN(SubjectAlternativeName) 확장에서 DNSName 항목의 내용을 복사합니다. SAN 확장이 비어 있으면 속성은 인증서의 제목 필드에 있는 내용으로 채워집니다.

EnhancedKeyUsageList 속성을 채우기 위해 인증서 공급자는 인증서에 있는 EKU(EnhancedKeyUsage) 필드의 OID 속성을 복사하고 해당 이름을 만듭니다.

인증서 공급자는 Windows PowerShell에서 인증서 네임스페이스를 Cert: 드라이브로 표시합니다. Cert: 드라이브에는 다음 세 가지 수준이 있습니다.

-- 저장소 위치(Microsoft.PowerShell.Commands.X509StoreLocation), 현재 사용자를 비롯하여 모든 사용자에 대한 인증서를 그룹화하는 상위 컨테이너입니다. 각 시스템에는 CurrentUser 및 LocalMachine(모든 사용자) 저장소 위치가 있습니다.

-- 인증서 저장소(System.Security.Cryptography.X509Certificates.X509Store), 인증서를 저장하고 관리하는 실제 저장소입니다.

-- X.509 인증서(System.Security.Cryptography.X509Certificates.X509Certificate2), 컴퓨터의 X.509 인증서를 나타냅니다. 인증서는 지문으로 식별됩니다.

Windows PowerShell 3.0에서 인증서 공급자는 Get-Location, Set-Location, Get-Item, Get-ChildItem, Invoke-Item, Move-Item, New-ItemRemove-Item cmdlet을 지원합니다.

Windows PowerShell 2.0에서 인증서 공급자는 Get-Location, Set-Location, Get-Item, Get-ChildItemInvoke-Item cmdlet을 지원합니다.

또한 인증서 공급자가 들어 있는 Windows PowerShell 보안 모듈(Microsoft.PowerShell.Security)에는 Authenticode 서명을 가져오고 설정하며 인증서를 가져오기 위한 cmdlet이 포함되어 있습니다. 보안 모듈의 cmdlet 목록에 대한 자세한 내용을 보려면 "Get-Command -module *security"를 입력하세요.

기능

ShouldProcess

예제

Cert: 드라이브 탐색

-------------------------- 예제 1 --------------------------

이 명령은 Set-Location cmdlet을 사용하여 현재 위치를 Cert: 드라이브로 변경합니다.

set-location cert:

-------------------------- 예제 2 --------------------------

이 명령은 Set-Location 명령을 사용하여 현재 위치를 LocalMachine 저장소 위치의 루트 인증서 저장소로 변경합니다. 백슬래시(\) 또는 슬래시(/)를 사용하여 Cert: 드라이브 수준을 나타낼 수 있습니다.

set-location -path LocalMachine\Root

현재 위치가 Cert: 드라이브가 아닌 경우 해당 드라이브 이름에서 경로를 시작하세요.

Cert: 드라이브 내용 표시

-------------------------- 예제 1 --------------------------

이 명령은 Get-ChildItem cmdlet을 사용하여 CurrentUser 인증서 저장소 위치의 인증서 저장소를 표시합니다.

get-childitem -path cert:\CurrentUser

현재 위치가 Cert: 드라이브인 경우 드라이브 이름을 생략할 수 있습니다.

-------------------------- 예제 2 --------------------------

이 명령은 Get-ChildItem cmdlet을 사용하여 내 인증서 저장소의 인증서를 표시합니다.

get-childitem -path cert:\CurrentUser\My

현재 위치가 Cert: 드라이브인 경우 드라이브 이름을 생략할 수 있습니다.

-------------------------- 예제 3 --------------------------

이 명령은 Get-Item cmdlet을 사용하여 "My" 인증서 저장소를 가져오고 Format-List의 Property 매개 변수를 와일드카드 문자(*)와 함께 사용하여 저장소의 모든 속성을 표시합니다.

get-item -path cert:\CurrentUser\My | format-list *

-------------------------- 예제 4 --------------------------

이 명령은 인증서를 가져와서 해당 속성을 모두 표시합니다. 이 명령은 Get-ChildItem cmdlet을 사용하여 인증서를 가져오고 Format-List의 Property 매개 변수를 와일드카드 문자(*)와 함께 사용하여 인증서의 모든 속성을 표시합니다.

인증서는 지문으로 식별됩니다.

get-childitem -path cert:\LocalMachine\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B | format-list -property *

-------------------------- 예제 5 --------------------------

이 명령은 LocalMachine 인증서 저장소 위치에 있는 모든 인증서의 웹 호스팅 속성을 표시합니다.

이 명령은 Get-ChildItem cmdlet의 Recurse 매개 변수를 사용하여 LocalMachine 저장소 위치의 모든 저장소에 있는 모든 인증서를 가져옵니다. 파이프라인 연산자는 각 인증서의 선택한 속성을 테이블에 표시하는 Format-Table 명령으로 인증서를 보냅니다.

Get-ChildItem -Path cert:\LocalMachine -Recurse | Format-Table -Property DnsNameList, EnhancedKeyUsageList, NotAfter, SendAsTrustedIssuer

인증서 MMC 스냅인 열기

-------------------------- 예제 1 --------------------------

이 명령은 지정된 인증서를 관리할 인증서 MMC 스냅인을 엽니다.

invoke-item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B

선택한 인증서 가져오기

-------------------------- 예제 1 --------------------------

이 명령은 Get-ChildItem cmdlet의 CodeSigningCert 매개 변수와 Recurse 매개 변수를 사용하여 코드 서명 기관이 있는 컴퓨터의 모든 인증서를 가져옵니다.

Get-ChildItem -Path cert: -CodeSigningCert -Recurse

-------------------------- 예제 2 --------------------------

이 명령은 Get-ChildItem cmdlet의 DNSName 매개 변수를 사용하여 도메인 이름에 "Fabrikam"이 포함된 WebHosting 저장소의 모든 인증서를 가져옵니다.

Get-ChildItem -Path cert:\LocalMachine\WebHosting -DNSName "*fabrikam*"

-------------------------- 예제 3 --------------------------

이 명령은 Get-ChildItem cmdlet의 ExpiringInDays 매개 변수를 사용하여 앞으로 30일 이내에 만료될 인증서를 가져옵니다.

Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30

-------------------------- 예제 4 --------------------------

이 명령은 Invoke-Command cmdlet을 사용하여 Srv01 및 Srv02 컴퓨터에 대해 Get-ChildItem 명령을 실행합니다. ExpiringInDays 매개 변수의 값이 0이면 만료된 Srv01 및 Srv02 컴퓨터의 인증서를 가져옵니다.

Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0}

-------------------------- 예제 5 --------------------------

이 명령은 Get-ChildItem cmdlet을 사용하여 SSLServerAuthentication 매개 변수를 사용하여

My 및 WebHosting 저장소의 모든 서버 SSL 인증서를 가져옵니다.

Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting -SSLServerAuthentication

-------------------------- 예제 6 --------------------------

이 명령은 DNS 이름에 "fabrikam"이 있고 EKU에 "Client Authentication"이 있고, SendAsTrustedIssuer 속성의 값이 $true이며, 30일 이내에 만료되지 않는 LocalMachine 저장소 위치의 모든 인증서를 가져옵니다.

Get-ChildItem -Path cert:\* -Recurse  -DNSName "*fabrikam*" -EKU "*Client Authentication*" | Where-Object {$_.SendAsTrustedIssuer -and $_.NotAfter -gt (get-date).AddDays.(30)}

NotAfter 속성은 인증서 만료 날짜를 저장합니다.

인증서 이동

-------------------------- 예제 1 --------------------------

이 명령은 Move-Item cmdlet을 사용하여 내 저장소의 인증서를 WebHosting 저장소로 이동합니다.

Move-Item은 인증서 저장소를 이동하지 않으며 인증서를 다른 저장소 위치로 이동하지 않습니다(예를 들어 LocalMachine에서 CurrentUser로 인증서를 이동하지 않음). 또한 Move-Item은 인증서를 이동하지만 개인 키는 이동하지 않습니다.

Move-Item -Path cert:\LocalMachine\My\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0 -Destination cert:\LocalMachine\WebHosting

-------------------------- 예제 2 --------------------------

이 명령은 Get-ChildItem cmdlet의 SSLServerAuthentication 매개 변수를 사용하여 내 인증서 저장소에 있는 SSL 서버 인증 인증서를 가져옵니다.

이 명령은 파이프라인 연산자를 사용하여 인증서를 WebHosting 저장소로 이동하는 Move-Item cmdlet으로 인증서를 보냅니다.

Get-ChildItem -Path cert:\LocalMachine\My -SSLServerAuthentication | Move-Item -Destination cert:\LocalMachine\WebHosting

인증서 및 개인 키 삭제

-------------------------- 예제 1 --------------------------

이 명령은 CA 인증서 저장소에서 인증서를 삭제하지만 연결된 개인 키는 그대로 둡니다.

Cert: 드라이브에서 Remove-Item cmdlet은 DeleteKey, Path, WhatIf 및 Confirm 매개 변수만 지원합니다. 다른 모든 매개 변수는 무시됩니다.

Remove-Item -Path cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0

-------------------------- 예제 2 --------------------------

이 명령 시리즈는 원격 컴퓨터에서 위임을 사용하도록 설정하고, 인증서 및 연결된 개인 키를 삭제합니다. 원격 컴퓨터에서 개인 키를 삭제하려면 위임된 자격 증명을 사용해야 합니다.

첫 번째 명령은 Enable-WSManCredSSP cmdlet을 사용하여 S1 원격 컴퓨터의 클라이언트에서 CredSSP(자격 증명 보안 서비스 공급자) 인증을 사용하도록 설정합니다. CredSSP는 대리 인증을 허용합니다.

두 번째 명령은 Connect-WSMan cmdlet을 사용하여 S1 컴퓨터를 로컬 컴퓨터의 WinRM 서비스에 연결합니다. 이 명령이 완료되면 S1 컴퓨터가 Windows PowerShell의 로컬 WSMan: 드라이브에 표시됩니다.

세 번째 명령은 WSMan: 드라이브의 Set-Item cmdlet을 사용하여 WinRM 서비스에 대한 CredSSP 특성을 사용하도록 설정합니다.

네 번째 명령은 New-PSSession cmdlet을 사용하여 CredSSP 인증으로 S1 컴퓨터에서 원격 세션을 시작합니다. 이 명령은 세션을 $s 변수에 저장합니다.

다섯 번째 명령은 Invoke-Command cmdlet을 사용하여 $s 변수의 세션에 있는 Remove-Item 명령을 실행합니다. Remove-Item 명령은 DeleteKey 매개 변수를 사용하여 지정된 인증서와 함께 개인 키를 제거합니다.

PS C:\>Enable-WSManCredSSP -Role Client -DelegateComputer S1 

PS C:\>Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01

PS C:\>Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true

PS C:\> $s  = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01

PS C:\> Invoke-Command -Session $s { Remove-Item cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 -DeleteKey  }

-------------------------- 예제 3 --------------------------

이 명령은 Get-ChildItem cmdlet의 ExpiringInDays 매개 변수 값으로 0을 사용하여 만료된 WebHosting 저장소의 인증서를 가져옵니다.

이 명령은 파이프라인 연산자를 사용하여 인증서를 삭제하는 Remove-Item cmdlet으로 인증서를 전달합니다. 이 명령은 DeleteKey 매개 변수를 사용하여 인증서와 함께 개인 키를 삭제합니다.

Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 0 | Remove-Item -DeleteKey

-------------------------- 예제 4 --------------------------

이 명령은 DNS 이름에 "Fabrikam"이 포함된 모든 인증서를 삭제합니다.

이 명령은 Get-ChildItem cmdlet의 DNSName 매개 변수를 사용하여 인증서를 가져오고 Remove-Item cmdlet을 사용하여 인증서를 삭제합니다.

Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item

인증서 저장소 만들기

-------------------------- 예제 1 --------------------------

이 명령은 LocalMachine 저장소 위치에서 이름이 "CustomStore"인 새 인증서 저장소를 만듭니다.

Cert: 드라이브에서 New-Item cmdlet은 LocalMachine 저장소 위치에 인증서 저장소를 만듭니다. 이 명령은 Name, Path, WhatIf 및 Confirm 매개 변수를 지원합니다. 다른 모든 매개 변수는 무시됩니다.

New-Item -Path cert:\LocalMachine\CustomStore

이 명령은 새 인증서 저장소를 나타내는 System.Security.Cryptography.X509Certificates.X509Store를 반환합니다.

-------------------------- 예제 2 --------------------------

이 명령은 Server01 컴퓨터의 LocalMachine 저장소 위치에 이름이 "HostingStore"인 새 인증서 저장소를 만듭니다.

이 명령은 Invoke-Command cmdlet을 사용하여 Server01 컴퓨터에서 New-Item 명령을 실행합니다.

Invoke-Command -ComputerName Server01 { New-Item -Path cert:\LocalMachine\CustomStore }

이 명령은 새 인증서 저장소를 나타내는 System.Security.Cryptography.X509Certificates.X509Store를 반환합니다.

인증서 저장소 삭제

-------------------------- 예제 1 --------------------------

이 명령은 Remove-Item cmdlet을 사용하여 Test1 인증서 저장소를 삭제합니다. Recurse 매개 변수를 사용하여 Test1 저장소의 인증서를 삭제합니다.

Cert: 드라이브에서 Remove-Item cmdlet은 LocalMachine 저장소 위치에서 사용자가 만든 인증서 저장소를 삭제합니다. Windows 시스템 인증서 저장소를 삭제하는 데는 Remove-Item cmdlet을 사용할 수 없습니다.

Cert: 드라이브에서 Remove-Item cmdlet은 Path, WhatIf 및 Confirm 매개 변수만 지원합니다. 다른 모든 매개 변수는 무시됩니다.

Remove-Item -Path cert:\LocalMachine\TestStore -Recurse

인증서 저장소에 인증서가 있고 Recurse 매개 변수를 생략하면 Remove-Item은 항목을 삭제하기 전에 확인 메시지를 표시합니다.

-------------------------- 예제 2 --------------------------

이 명령은 Invoke-Command cmdlet을 사용하여 S1 및 S2 컴퓨터에 Remove-Item 명령을 실행합니다. Remove-Item 명령은 저장소를 삭제하기 전에 저장소에서 인증서를 삭제하는 Recurse 매개 변수를 포함합니다.

Invoke-Command -ComputerName S1, S2 { Remove-Item -Path cert:\LocalMachine\TestStore  -Recurse}

-------------------------- 예제 3 --------------------------

이 명령은 이름에 "Test"가 들어 있는 LocalMachine 저장소 위치의 모든 인증서 저장소를 삭제합니다.

Remove-Item -path cert:\LocalMachine\*test* -Recurse

동적 매개 변수

동적 매개 변수는 Windows PowerShell 공급자가 추가하고 이 공급자가 사용할 수 있는 드라이브에서 cmdlet을 사용하는 경우에만 사용할 수 있는 cmdlet 매개 변수입니다.

CodeSigningCert <System.Management.Automation.SwitchParameter>

코드 서명 기관이 있는 인증서만 가져옵니다.

이 매개 변수는 EnhancedKeyUsageList 속성 값에 "Code Signing"이 포함된 인증서를 가져옵니다.

빈 EnhancedKeyUsageList가 있는 인증서는 어떤 용도로도 사용할 수 있으므로 코드 서명 인증서를 검색해도 EnhancedKeyUsageList 속성 값이 비어 있는 인증서가 반환됩니다.

이 매개 변수는 인증서 공급자의 모든 하위 디렉터리에 사용할 수 있지만 인증서에만 적용됩니다.

지원되는 cmdlet:

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

인증서의 DNSNameList 속성에 지정된 도메인 이름 또는 이름 패턴이 있는 인증서를 가져옵니다.

이 매개 변수의 값은 유니코드 또는 ASCII일 수 있습니다. Punycode 값은 유니코드로 변환됩니다. 와일드카드 문자(*)를 사용할 수 있습니다.

이 매개 변수는 인증서 공급자의 모든 하위 디렉터리에 사용할 수 있지만 인증서에만 적용됩니다.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

지원되는 cmdlet:

EKU <System.String>

인증서의 EnhancedKeyUsageList 속성에 지정된 텍스트 또는 텍스트 패턴이 있는 인증서를 가져옵니다. 와일드카드 문자(*)를 사용할 수 있습니다. EnhancedKeyUsageList 속성에는 EKU의 이름 및 OID 필드가 포함되어 있습니다.

빈 EnhancedKeyUsageList가 있는 인증서는 어떤 용도로도 사용할 수 있으므로 모든 EKU 검색은 EnhancedKeyUsageList 속성 값이 비어 있는 인증서를 반환합니다.

이 매개 변수는 인증서 공급자의 모든 하위 디렉터리에 사용할 수 있지만 인증서에만 적용됩니다.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

지원되는 cmdlet:

ExpiringInDays <System.Int32>

지정된 일 또는 그 이전에 만료되는 인증서를 가져옵니다. 정수를 입력하세요. 0값을 지정하면 만료된 인증서를 가져옵니다.

이 매개 변수는 인증서 공급자의 모든 하위 디렉터리에 사용할 수 있지만 인증서에만 적용됩니다.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

지원되는 cmdlet:

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

SSL 웹 호스팅을 위한 서버 인증서만 가져옵니다. 이 매개 변수는 EnhancedKeyUsageList 속성 값에 "Server Authentication"이 포함된 인증서를 가져옵니다.

빈 EnhancedKeyUsageList가 있는 인증서는 어떤 용도로도 사용할 수 있으므로 SSLServerAuthentication 검색도 EnhancedKeyUsageList 속성 값이 비어 있는 인증서를 반환합니다.

이 매개 변수는 인증서 공급자의 모든 하위 디렉터리에 사용할 수 있지만 인증서에만 적용됩니다.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

지원되는 cmdlet:

DeleteKey <System.Management.Automation.SwitchParameter>

인증서를 삭제할 때 연결된 개인 키도 삭제합니다.

원격 컴퓨터의 Cert:\CurrentUser 저장소에서 사용자 인증서에 연결된 개인 키를 삭제하려면 위임된 자격 증명을 사용해야 합니다. Invoke-Command cmdlet을 사용하여 Remove-Item 명령을 원격으로 실행하려면 보안 위험을 고려한 후에 CredSSP 매개 변수를 사용하여 위임을 사용하도록 설정합니다.

이 매개 변수는 인증서 공급자의 모든 하위 디렉터리에 사용할 수 있지만 인증서에만 적용됩니다.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

지원되는 cmdlet:

See Also

Concepts

about_Providers
about_Signing

Other Resources

Get-AuthenticodeSignature
Set-AuthenticodeSignature
Get-PfxCertificate