web-dev-qa-db-ja.com

WindowsのpfxファイルからCAルート証明書を削除する方法は?

Windows 2012R2およびWindows10マシンには、サーバーの証明書チェーンを含むpfxファイルがあります。 Windowsを使用してこのファイルを作成しましたMMC証明書エクスポートツール。選択肢は、可能な場合はチェーン内のすべての証明書をエクスポートするか、1つの証明書のみをエクスポートすることでした。チェーンにはルート、2つの中間、そしてサーバー証明書が含まれています。

クライアントがすでに持っているはずなので、CAルート証明書を削除したいのですが、中間証明書は残しておきます。

1つのルート証明書を削除するためにpfxファイルをどのように編集しますか?

3
ciso

これは、数行のPowerShellコードで実行できます(OpenSSLは必要ありません)。

$path = "Put the path to a pfx file here"
$password = "Put password here"
$pfx = New-Object Security.Cryptography.X509Certificates.X509Certificate2Collection
# import pfx to X509Certificate2 collection
$pfx.Import([IO.File]::ReadAllBytes($path), $password, "Exportable")
# remove first root (self-signed) certificate
if ($pfx.Count -gt 1) {
    for ($i = 0; $i -lt $pfx.Count; $i++) {
        if ($pfx[$i].Issuer -eq $pfx[$i].Subject) {
            [void]$pfx.RemoveAt($i); break
        }
    }
}
# write back pfx to a file
$bytes = $pfx.Export("pfx", $password)
[IO.File]::WriteAllBytes($path, $bytes)
6
Crypt32