Windows Server Core 사용.루트에서 PowerShell을 사용하여 인증서 사용 안 함
저장소 루트의 폴더에서 인증서를 사용하지 않도록 설정하려고합니다. 나는 아래의 그림처럼 윈도우 UI를 통해 할 수있는 인증서의 지문을 비활성화하고자합니다. 그러나 나는 Powershell을 통해 그것을하고 싶다.
PowerShell을 통해 인증서를 비활성화하는 방법을 찾지 못했습니다. 어떻게 알 수 있습니까?
Windows Server Core 사용.루트에서 PowerShell을 사용하여 인증서 사용 안 함
저장소 루트의 폴더에서 인증서를 사용하지 않도록 설정하려고합니다. 나는 아래의 그림처럼 윈도우 UI를 통해 할 수있는 인증서의 지문을 비활성화하고자합니다. 그러나 나는 Powershell을 통해 그것을하고 싶다.
PowerShell을 통해 인증서를 비활성화하는 방법을 찾지 못했습니다. 어떻게 알 수 있습니까?
이 작업을 수행하는 유일한 방법은 관리되지 않는 호출하는 것입니다 : 내가 인증서
당신이 궁금해하는 경우
삭제에 관심이 아니다, 이것은 여기에서 논의하는 문제에 대한 해결책이다 CertSetCertificateContextProperty 관리되지 않는 기능 p/invoke interop을 사용하고 ASN으로 인코딩 된 빈 X509 EKU 확장 값 (2 바이트,0x30
및
0x0
)을 전달하여 속성에서 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 인증서 개체가 필요합니다.
시간을내어 작성해 주셔서 감사합니다. 네, 효과가있었습니다. – Adam
을 확인 했습니까? https://superuser.com/questions/748402/is-there-a-way-to-quickly-disable-all-trusted-root-certificates-in-windows-7? –
@MickyBalladelli 나중에 제거하지 않으려 고합니다. 특히 인증서를 저장할 장소를 예약하지 않으려 고합니다. – Adam