web-dev-qa-db-ja.com

certmgr.MSCツール以外のものを使用して、インストールされた証明書と秘密鍵をWindowsのコマンドラインからリモートでエクスポートします

インストールされているコンピューター証明書を、完全な証明書チェーンと秘密鍵を使用してWindowsサーバーにリモートでエクスポートできる必要があります。証明書はIISに使用されており、同じサーバーで実行されているApacheインスタンスに使用したいと思います。

Certmgr.MSC mmcスナップインツールを使用してこれを手動で行う方法を知っていますが、コマンドラインまたは同じドメインのリモートマシンからこれを行うにはどうすればよいですか?

また、openssl s-clientを使用して証明書のみを表示する方法も知っています。 Javaキーストアファイルにインポートするために、証明書と秘密キーの両方を保存するために使用できますか?

RDP経由のCertmgrは、私が必要とするものには遅すぎます。スクリプトソリューションが必要です。

私の環境はすべて Windows Server 2008 R2です。 PowerShellリモーティングはオンになっていませんが、オンにすることはできます。

サーバーが十分に新しくないため、PowerShell Export-PfxCertificateを使用できないことを確認しました...

したがって、PowerShellを使用して必要な証明書の拇印を取得できる場合は、それを "certutil -exportpfx"コマンドにフィードできます。私はそれがうまくいくことを確認しました。

dirのように証明書ストアを実行するには、「dir cert:\ localmachine\my | Where-Object {$ _。hasPrivateKey} | "ANDを入力してから、それを拇印付きのcertutilエクスポートに?

または、最初にdirを実行して、全体ではなく拇印のみを印刷するように指示できますか?それをファイルに保存し、ファイルを読み取ってcertutilコマンドを作成しますか?

4
user1991791

Stack Overflowの質問から証明書をエクスポートするIIS PowerShellを使用)を参照してください。

答えがうまくいけば、PSRemotingEnter-PSSession または Invoke-Command)を使用してリモートサーバーでPowerShellコードを実行できます )または psexec

「dircert:\ localmachine\my | Where-Object {$ _。hasPrivateKey} |」のように証明書ストアを方向付けて、拇印を使用してcertutilエクスポートにフィードする方法を知っている人はいますか?

これを試してください、私のために働きます:

Get-ChildItem -Path 'Cert:\localmachine\My' |
    Where-Object { $_.hasPrivateKey } |
        Foreach-Object {
            &certutil.exe @('-exportpfx', '-p', 'secret',  $_.Thumbprint, "$($_.Subject).pfx")
         }

Unicodeの外国語の文字が無効なため、 ファイル名 としてSubjectを使用できない場合があることに注意してください。

3
beatcracker

PowerShellでこれを実行して、Windowsサーバーの長いリストから証明書をリモートでエクスポートします。 $ serversはサーバーのリストです。

foreach ($server in $servers){
Invoke-command $server {
Get-ChildItem -Path 'Cert:\localmachine\My' |
Where-Object { $_.hasPrivateKey } |
Foreach-Object {&certutil.exe @('-exportpfx', '-f', '-p','your_password',$_.Thumbprint, "d:\$($_.Subject).pfx")}
    }
    Move-Item -Path \\$server\d$\*.pfx -Destination C:\$server.pfx -Force
}

Java keytool.exeを使用して各pfxファイルをJKSキーストアファイルに変換します。KeytoolはすべてのJavaインストールの一部です。これはローカルで実行できます。マシンまたはリモートサーバーの1つ(すでにJava)がインストールされている場合)。

keytool.exe -importkeystore -srckeystore C:\server1.pfx -destkeystore C:\server1.jks -srcstoretype pkcs12 -deststoretype JKS -srcstorepass your_password -deststorepass your_password

これはPowershellで実行することもできます($ serverはサーバーの名前です)($ pwdは、ファイルの暗号化に使用するパスワードを保持する変数です):

foreach ($server in $servers){
& "C:\Program Files\Java\jre6\bin\keytool.exe" -importkeystore -srckeystore C:\$server.pfx -destkeystore C:\$server.jks -srcstoretype pkcs12 -deststoretype JKS -srcstorepass $pwd -deststorepass $pwd

}

2
user1991791