2017-11-24 21 views
0

Windows Serverコアを使用する。PowerShellを使用してルート内の証明書を無効にする

ストアルートのフォルダ内の証明書を無効にしたいとします。私は無効にしたい証明書の拇印を持っています。下の図に示すように、私はWindowsの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バイト、0x30および0x0)を渡して、プロパティのEKUを明示的に無効にします。

コードは次のようになります。関数呼び出しが$cert変数に有効なX509Certificate2証明書オブジェクトが必要であることを

# 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) 

注意。

+0

これを書いていただきありがとうございます。はい、それは働いた。 – Adam

関連する問題