about_Certificate_Provider

공급자 이름

인증서

드라이브

Cert:

기능

ShouldProcess

간단한 설명

PowerShell에서 X.509 인증서 저장소 및 인증서에 대한 액세스를 제공합니다.

자세한 설명

이 정보는 Windows에서 실행되는 PowerShell에만 적용됩니다.

PowerShell 인증서 공급자를 사용하면 PowerShell에서 인증서 및 인증서 저장소를 가져오기, 추가, 변경, 지우고 삭제할 수 있습니다.

인증서 드라이브는 컴퓨터의 인증서 저장소 및 인증서를 포함하는 계층 구조 네임스페이스입니다.

인증서 공급자는 다음 cmdlet을 지원합니다.

이 공급자가 노출하는 형식

인증서 드라이브는 다음 형식을 노출합니다.

  • Microsoft.PowerShell.Commands.X509StoreLocation- 현재 사용자 및 모든 사용자에 대한 인증서를 그룹화한 상위 수준 컨테이너입니다. 각 시스템에는 및 CurrentUserLocalMachine (모든 사용자) 저장소 위치가 있습니다.
  • System.Security.Cryptography.X509Certificates.X509Store- 인증서가 저장되고 관리되는 물리적 저장소입니다.
  • 컴퓨터의 X.509 인증서를 나타내는 System.Security.Cryptography.X509Certificates.X509Certificate2. 인증서는 지문으로 식별됩니다.

인증서 공급자는 인증서 네임스페이스를 PowerShell의 Cert: 드라이브로 노출합니다. 이 명령은 이 명령을 사용하여 Set-Location 현재 위치를 저장소 위치의 Root 인증서 저장소로 LocalMachine 변경합니다. 드라이브 수준을 Cert: 나타내려면 백슬래시(\) 또는 슬래시(/)를 사용합니다.

Set-Location Cert:

다른 PowerShell 드라이브의 인증서 공급자와 함께 작업할 수도 있습니다. 다른 위치에서 별칭을 참조하려면 경로에서 Cert: 드라이브 이름을 사용합니다.

PS Cert:\> Set-Location -Path LocalMachine\Root

파일 시스템 드라이브로 돌아가려면 드라이브 이름을 입력합니다. 예를 들어 입력 합니다.

Set-Location C:

참고 항목

PowerShell은 별칭을 사용하여 공급자 경로를 사용하는 친숙한 방법을 허용합니다. Get-ChildItemcd의 별칭ls 같은 dir 명령은 Set-Location별칭이며 pwd Get-Location별칭입니다.

인증서의 내용 표시: 드라이브

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

드라이브에 Cert: 없는 경우 절대 경로를 사용합니다.

PS Cert:\CurrentUser\> Get-ChildItem

인증서: 드라이브 내에 인증서 속성 표시

이 예제에서는 인증서와 함께 Get-Item 인증서를 가져오고 변수에 저장합니다. 이 예제에서는 다음을 사용하는 새 인증서 스크립트 속성(DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer)을 보여 Select-Object줍니다.

$c = Get-Item cert:\LocalMachine\My\52A149D0393CE8A8D4AF0B172ED667A9E3A1F44E
$c | Format-List DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer
DnsNameList          : {SERVER01.contoso.com}
EnhancedKeyUsageList : {WiFi-Machine (1.3.6.1.4.1.311.42.2.6),
                       Client Authentication (1.3.6.1.5.5.7.3.2)}
SendAsTrustedIssuer  : False

모든 CodeSigning 인증서 찾기

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

Get-ChildItem -Path cert: -CodeSigningCert -Recurse

만료된 인증서 찾기

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

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

서버 SSL 인증서 찾기

이 명령은 cmdlet의 SSLServerAuthentication 매개 변수를 사용하여 모든 서버 SSL 인증서 My 를 저장합니다WebHosting.Get-ChildItem

$getChildItemSplat = @{
    Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
    SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat

원격 컴퓨터에서 만료된 인증서 찾기

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

$invokeCommandSplat = @{
    ComputerName = 'Srv01', 'Srv02'
    ScriptBlock = {
        Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
    }
}
Invoke-Command @invokeCommandSplat

필터를 결합하여 특정 인증서 집합 찾기

이 명령은 다음 특성이 있는 저장소 위치의 LocalMachine 모든 인증서를 가져옵니다.

  • fabrikam DNS 이름에
  • Client Authentication EKU에서
  • SendAsTrustedIssuer 속성의 값 $true
  • 은 다음 30일 이내에 만료되지 않습니다.

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

[DateTime] $ValidThrough = (Get-Date) + (New-TimeSpan -Days 30)
$getChildItemSplat = @{
    Path = 'cert:\*'
    Recurse = $true
    DnsName = "*fabrikam*"
    Eku = "*Client Authentication*"
}
Get-ChildItem @getChildItemSplat |
    Where-Object {$_.SendAsTrustedIssuer -and $_.NotAfter -gt $ValidThrough }

인증서 MMC 스냅인 열기

cmdlet은 Invoke-Item 기본 애플리케이션을 사용하여 지정한 경로를 엽니다. 인증서의 경우 기본 애플리케이션은 인증서 MMC 스냅인입니다.

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

Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B

인증서 복사

인증서 복사는 인증서 공급자에서 지원되지 않습니다. 인증서를 복사하려고 하면 이 오류가 표시됩니다.

$path = "Cert:\LocalMachine\Root\E2C0F6662D3C569705B4B31FE2CBF3434094B254"
PS Cert:\LocalMachine\> Copy-Item -Path $path -Destination .\CA\
Copy-Item : Provider operation stopped because the provider doesn't support
this operation.
At line:1 char:1
+ Copy-Item -Path $path -Destination .\CA\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotImplemented: (:) [Copy-Item],
                              PSNotSupportedException
    + FullyQualifiedErrorId : NotSupported,
                              Microsoft.PowerShell.Commands.CopyItemCommand

인증서 이동

모든 SSL 서버 인증 인증서를 WebHosting 저장소로 이동

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

Move-Item인증서 저장소를 이동할 수 없으며 인증서를 다른 저장소 위치로 이동할 수 없습니다(예: 인증서를 다른 저장소 위치로 이동)LocalMachineCurrentUser. cmdlet은 Move-Item 저장소 내에서 인증서를 이동할 수 있지만 프라이빗 키는 이동하지 않습니다.

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

반환된 인증서는 cmdlet에 Move-Item 파이프되어 인증서를 저장소로 WebHosting 이동합니다.

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

인증서 및 프라이빗 키 삭제

cmdlet은 Remove-Item 지정한 인증서를 삭제합니다. DeleteKey 동적 매개 변수는 프라이빗 키를 삭제합니다.

CA 저장소에서 인증서 삭제

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

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

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

DNS 이름에 와일드 카드 사용하여 인증서 삭제

이 명령은 DNS 이름이 포함된 모든 인증서를 삭제합니다 Fabrikam. cmdlet의 Get-ChildItem DNSName 매개 변수를 사용하여 인증서와 cmdlet을 Remove-Item 가져와 삭제합니다.

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

원격 컴퓨터에서 프라이빗 키 삭제

이 일련의 명령은 위임을 사용하도록 설정한 다음 원격 컴퓨터에서 인증서 및 연결된 프라이빗 키를 삭제합니다. 원격 컴퓨터에서 프라이빗 키를 삭제하려면 위임된 자격 증명을 사용해야 합니다.

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

Enable-WSManCredSSP -Role Client -DelegateComputer S1

cmdlet을 Connect-WSMan 사용하여 S1 컴퓨터를 로컬 컴퓨터의 WinRM 서비스에 연결합니다. 이 명령이 완료되면 PowerShell의 로컬 WSMan: 드라이브에 S1 컴퓨터가 나타납니다.

Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01

이제 드라이브의 Set-Item cmdlet을 WSMan: 사용하여 WinRM 서비스에 CredSSP 특성을 사용하도록 설정할 수 있습니다.

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

cmdlet을 사용하여 S1 컴퓨터에서 New-PSSession 원격 세션을 시작하고 CredSSP 인증을 지정합니다. 세션을 변수에 $s 저장합니다.

$s  = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01

마지막으로, cmdlet을 Invoke-Command 사용하여 변수의 Remove-Item 세션에서 $s 명령을 실행합니다. 이 Remove-Item 명령은 DeleteKey 매개 변수를 사용하여 지정된 인증서와 함께 프라이빗 키를 제거합니다.

Invoke-Command -Session $s {
    $removeItemSplat = @{
        Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
        DeleteKey = $true
    }
    Remove-Item @removeItemSplat
}

만료된 인증서 삭제

이 명령은 만료된 저장소에서 인증서를 가져오는 값과 함께 cmdlet의 0 ExpiringInDays WebHosting 매개 변수를 사용합니다.Get-ChildItem

반환된 인증서를 포함하는 변수는 cmdlet에 Remove-Item 파이프되어 삭제됩니다. 이 명령은 DeleteKey 매개 변수를 사용하여 인증서와 함께 프라이빗 키를 삭제합니다.

$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey

인증서 만들기

cmdlet은 New-Item 인증서 공급자에 새 인증서를 만들지 않습니다. New-SelfSignedCertificate cmdlet을 사용하여 테스트 목적으로 인증서를 만듭니다.

인증서 저장소 만들기

드라이브에서 Cert: cmdlet은 New-Item 저장소 위치에 인증서 저장소를 LocalMachine 만듭니다. 이름, 경로, WhatIfConfirm 매개 변수를 지원합니다. 다른 모든 매개 변수는 무시됩니다. 이 명령은 새 인증서 저장소를 나타내는 System.Security.Cryptography.X509Certificates.X509Store 를 반환합니다.

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

New-Item -Path cert:\LocalMachine\CustomStore

원격 컴퓨터에 새 인증서 저장소 만들기

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

이 명령은 cmdlet을 Invoke-Command 사용하여 Server01 컴퓨터에서 명령을 실행 New-Item 합니다. 이 명령은 새 인증서 저장소를 나타내는 System.Security.Cryptography.X509Certificates.X509Store 를 반환합니다.

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

WS-Man용 클라이언트 인증서 만들기

이 명령은 WS-Management 클라이언트에서 사용할 수 있는 ClientCertificate 항목을 만듭니다. 새 ClientCertificate는 ClientCertificate 디렉터리 아래에 다음과 같이 ClientCertificate_1234567890표시됩니다. 모든 매개 변수는 필수입니다. 발급자 인증서의 지문이어야 합니다.

$newItemSplat = @{
    Path = 'WSMan:\localhost\ClientCertificate'
    Credential = Get-Credential
    Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
    URI = 'wmicimv2/*'
}
New-Item @newItemSplat

인증서 저장소 삭제

원격 컴퓨터에서 인증서 저장소 삭제

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

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

동적 매개 변수

동적 매개 변수는 PowerShell 공급자에 의해 추가되는 cmdlet 매개 변수이며 공급자 사용 드라이브에서 cmdlet을 사용하는 경우에만 사용할 수 있습니다. 이러한 매개 변수는 인증서 공급자의 모든 하위 디렉터리에서 유효하지만 인증서에만 적용됩니다.

참고 항목

EnhancedKeyUsageList 속성에 대해 필터링을 수행하는 매개 변수는 빈 EnhancedKeyUsageList 속성 값이 있는 항목도 반환합니다. EnhancedKeyUsageList가 비어 있는 인증서는 모든 용도로 사용할 수 있습니다.

다음 인증서 공급자 매개 변수는 PowerShell 7.1에서 다시 도입되었습니다.

  • DNSName
  • DocumentEncryptionCert
  • Eku
  • ExpiringInDays
  • SSLServerAuthentication

CodeSigningCert <System.Management.Automation.SwitchParameter>

지원되는 Cmdlet

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

DeleteKey <System.Management.Automation.SwitchParameter>

지원되는 Cmdlet

이 매개 변수는 인증서를 삭제할 때 연결된 프라이빗 키를 삭제합니다.

Important

원격 컴퓨터의 저장소에서 Cert:\CurrentUser 사용자 인증서와 연결된 프라이빗 키를 삭제하려면 위임된 자격 증명을 사용해야 합니다. cmdlet은 Invoke-Command CredSSP 매개 변수를 사용하여 자격 증명 위임을 지원합니다. 자격 증명 위임과 함께 Invoke-Command 사용하기 Remove-Item 전에 보안 위험을 고려해야 합니다.

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

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

지원되는 Cmdlet

이 매개 변수는 인증서의 DNSNameList 속성에 지정된 do기본 이름 또는 이름 패턴이 있는 인증서를 가져옵니다. 이 매개 변수의 값은 다음과 같습니다 UnicodeASCII. Punycode 값은 유니코드로 변환됩니다. 와일드카드 문자(*)가 허용됩니다.

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

DocumentEncryptionCert <System.Management.Automation.SwitchParameter>

지원되는 Cmdlet

이 매개 변수는 EnhancedKeyUsageList 속성 값에 있는 Document Encryption 인증서를 가져옵니다.

EKU <System.String>

지원되는 Cmdlet

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

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

ExpiringInDays <System.Int32>

지원되는 Cmdlet

이 매개 변수는 지정된 일 수 또는 그 이전에 만료되는 인증서를 가져옵니다. 값 0은 만료된 인증서를 가져옵니다.

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

ItemType <System.String>

이 매개 변수는 .에서 만든 New-Item항목의 형식을 지정하는 데 사용됩니다. cmdlet은 New-ItemStore만 지원합니다. New-Item cmdlet은 새 인증서를 만들 수 없습니다.

지원되는 Cmdlet

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

지원되는 Cmdlet

SSL 웹 호스팅에 대한 서버 인증서만 가져옵니다. 이 매개 변수는 EnhancedKeyUsageList 속성 값에 있는 Server Authentication 인증서를 가져옵니다.

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

스크립트 속성

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

  • DnsNameList: DnsNameList 속성을 채우기 위해 인증서 공급자는 SAN(SubjectAlternativeName) 확장의 DNSName 항목에서 콘텐츠를 복사합니다. SAN 확장이 비어 있으면 인증서의 주체 필드의 콘텐츠로 속성이 채워집니다.
  • EnhancedKeyUsageList: EnhancedKeyUsageList 속성을 채우려면 인증서 공급자가 인증서에 EKU(EnhancedKeyUsage) 필드의 OID 속성을 복사하고 이를 위한 이름을 만듭니다.
  • SendAsTrustedIssuer: SendAsTrustedIssuer 속성을 채웁니다. 인증서 공급자는 인증서에서 SendAsTrustedIssuer 속성을 복사합니다. 자세한 내용은 클라이언트 인증에 대한 신뢰할 수 있는 발급자 관리를 참조하세요.

이러한 새로운 기능을 사용하면 DNS 이름 및 만료 날짜에 따라 인증서를 검색하고 클라이언트 및 서버 인증 인증서를 EKU(고급 키 사용량) 속성 값으로 구분할 수 있습니다.

파이프라인 사용

공급자 cmdlet은 파이프라인 입력을 허용합니다. 파이프라인을 사용하여 공급자 데이터를 한 cmdlet에서 다른 공급자 cmdlet으로 전송하여 작업을 간소화할 수 있습니다. 공급자 cmdlet에서 파이프라인을 사용하는 방법에 대한 자세한 내용은 이 문서 전체에서 제공하는 cmdlet 참조를 참조하세요.

도움말 가져오기

PowerShell 3.0부터 파일 시스템 드라이브에서 해당 cmdlet이 작동하는 방식을 설명하는 공급자 cmdlet에 대한 사용자 지정된 도움말 항목을 가져올 수 있습니다.

파일 시스템 드라이브에 대해 사용자 지정된 도움말 항목을 얻으려면 파일 시스템 드라이브에서 Get-Help 명령을 실행하거나 파일 시스템 드라이브를 지정하는 매개 변수 Get-Help 를 사용합니다-Path.

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert:

참고 항목