2017-11-24 9 views
0

Windows Server Core 사용.루트에서 PowerShell을 사용하여 인증서 사용 안 함

저장소 루트의 폴더에서 인증서를 사용하지 않도록 설정하려고합니다. 나는 아래의 그림처럼 윈도우 UI를 통해 할 수있는 인증서의 지문을 비활성화하고자합니다. 그러나 나는 Powershell을 통해 그것을하고 싶다.

PowerShell을 통해 인증서를 비활성화하는 방법을 찾지 못했습니다. 어떻게 알 수 있습니까?

N.B. https://www.namecheap.com/support/knowledgebase/article.aspx/9774/2238/incomplete-certificate-chain-on-windows-servers

enter image description here

+0

을 확인 했습니까? https://superuser.com/questions/748402/is-there-a-way-to-quickly-disable-all-trusted-root-certificates-in-windows-7? –

+0

@MickyBalladelli 나중에 제거하지 않으려 고합니다. 특히 인증서를 저장할 장소를 예약하지 않으려 고합니다. – Adam

답변

1

이 작업을 수행하는 유일한 방법은 관리되지 않는 호출하는 것입니다 : 내가 인증서

당신이 궁금해하는 경우

삭제에 관심이 아니다, 이것은 여기에서 논의하는 문제에 대한 해결책이다 CertSetCertificateContextProperty 관리되지 않는 기능 p/invoke interop을 사용하고 ASN으로 인코딩 된 빈 X509 EKU 확장 값 (2 바이트, 0x300x0)을 전달하여 속성에서 EKU를 명시 적으로 비활성화합니다.

코드는 다음과 같습니다

# define unmanaged function interop signatures 
$signature = @" 
[DllImport("Crypt32.dll", SetLastError = true, CharSet = CharSet.Auto)] 
public static extern bool CertSetCertificateContextProperty(
    IntPtr pCertContext, 
    uint dwPropId, 
    uint dwFlags, 
    IntPtr pvData 
); 
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)] 
public struct CRYPTOAPI_BLOB { 
    public uint cbData; 
    public IntPtr pbData; 
} 
"@ 
Add-Type -MemberDefinition $signature -Namespace PKI -Name Crypt32 
# create empty X509 EKU extension value. Empty value literally disables all EKU 
$bytes = New-Object byte[] -ArgumentList 2 
$bytes[0] = 48 
$bytes[1] = 0 
# do unmanaged stuff 
$pbData = [Runtime.InteropServices.Marshal]::AllocHGlobal(2) 
[Runtime.InteropServices.Marshal]::Copy($bytes, 0, $pbData, 2) 
# fill pvData structure 
$blob = New-Object PKI.Crypt32+CRYPTOAPI_BLOB -Property @{ 
    cbData = 2; 
    pbData = $pbData; 
} 
# do more unmanaged stuff 
$pvData = [Runtime.InteropServices.Marshal]::AllocHGlobal([Runtime.InteropServices.Marshal]::SizeOf([type][PKI.Crypt32+CRYPTOAPI_BLOB])) 
# copy data value to unmanaged memory 
[Runtime.InteropServices.Marshal]::StructureToPtr($blob, $pvData, $false) 
# call CertSetCertificateContextProperty function 
[PKI.Crypt32]::CertSetCertificateContextProperty($Cert.Handle,9,0,$pvData) 
# release unmanaged memory to prevent memory leak 
[Runtime.InteropServices.Marshal]::FreeHGlobal($pbData) 
[Runtime.InteropServices.Marshal]::FreeHGlobal($pvData) 

참고 그 함수 호출이 $cert 변수에 유효한 X509Certificate2 인증서 개체가 필요합니다.

+0

시간을내어 작성해 주셔서 감사합니다. 네, 효과가있었습니다. – Adam