インストールされているコンピューター証明書を、完全な証明書チェーンと秘密鍵を使用して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コマンドを作成しますか?
Stack Overflowの質問から証明書をエクスポートするIIS PowerShellを使用)を参照してください。
答えがうまくいけば、PSRemoting
( Enter-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
を使用できない場合があることに注意してください。
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
}