I manage the Domain Controllers centrally, but the site admins manage their own digital senders locally. I can easily export an X509 certificate (private key not needed) with the whole chain from a Windows Server 2008 R2 Domain Controller to a p7b file through the wizard:
~~~~~~~~~~~~~~~~~
...5. The Certificate Export Wizard opens. Click Next.
In the Export File Format dialog box, do the following:
a. Select Cryptographic Message Syntax Standard – PKCS #7 Certificates (.P7B).
b. Check Include all certificates in the certification path if possible.
c. Click Next.
In the File to Export dialog box, click Browse.
In the Save As dialog box, do the following:
a. In the File Name box, type ciroots.p7b.
b. In the Save as type box, select PKCS #7 Certificates (*.p7b).
c. Click Save.
In the File to Export dialog box, click Next.
[証明書のエクスポート ウィザードの完了] ページで、[完了] をクリックします。
~~~~~~~~~~~~~~~~~
それはうまくいきます。結果のファイルは、認証のためにデジタル送信者に問題なくインポートされます。サイト管理者がまだインポートしていない場合、チェーン内の他の証明書へのアクセスが許可されます。秘密鍵がなくても正常に機能するため、秘密鍵を含める必要はありません。
問題は、これを手動で、文字通り何十回も、ビジネス サイトごとに 1 回実行する必要があることです。これは、それぞれが独自の証明書を持つ独自のドメイン コントローラーを持っているためです。この証明書のエクスポートを自動化できる方法が必要です (PowerShell w/.NET、certutil.exe など)。System.Security.Cryptography.X509Certificates X509IncludeOption を WholeChain で使用するものかもしれませんが、動作させることができません。
$Cert = (dir Cert:\localmachine\my)[0]
# .p7b ファイル拡張子を持つ PKCS7 証明書のエクスポート。
$CertCollection = 新しいオブジェクト
System.Security.Cryptography.X509Certificates.X509Certificate2Collection
$証明書 | %{[void]$CertCollection.Add($_)}
$Exported_pkcs7 = $CertCollection.Export('Pkcs7')
$out_FileName = $ENV:COMPUTERNAME + ".p7b"
$My_Export_Path = 'd:\CertFiles\' + $out_FileName
Set-Content -path $My_Export_Path -Value $Exported_pkcs7 -encoding Byte
このコードでは、チェーン内の残りの証明書ではなく、証明書のみを取得します。スクリプト全体は必要ありません。既に GUI を使用して手動で実行できるチェーン付きのエクスポートを複製する部分だけです。