Windows サーバーにインストールされたコンピュータ証明書を、完全な証明書チェーンと秘密キーとともにリモートでエクスポートできるようにする必要があります。証明書は IIS に使用され、同じサーバーで実行されている Apache インスタンスに使用したいと考えています。
certmgr.MSC mmc スナップイン ツールを使用してこれを手動で行う方法はわかっていますが、コマンド ラインまたは同じドメイン上のリモート マシンからこれを行うにはどうすればよいですか?
で証明書だけを表示する方法も知っていますopenssl s-client
。これを使用して、証明書と秘密鍵の両方を保存し、Java キーストア ファイルにインポートできますか?
RDP 経由の Certmgr は、必要な処理には遅すぎます。スクリプト ソリューションが必要です。
私の環境はすべてWindows Server 2008R2. PowerShell リモート処理はオンになっていませんが、オンにすることはできます。
PowerShell Export-PfxCertificate
私のサーバーが十分に新しくないため、を使用できないことを確認しました...
したがって、PowerShell を使用して必要な証明書のサムプリントを取得できれば、それを「certutil -exportpfx」コマンドに渡すことができます。これが機能することを確認しました。
どうすればディレクトリ証明書ストアを「dir cert:\localmachine\my | Where-Object { $_.hasPrivateKey } | 」のように設定し、それを拇印とともに certutil エクスポートに渡しますか?
または、最初に dir を実行して、サムプリントのみを印刷し、全体を印刷しないように指示できますか? 次に、それをファイルに保存し、そのファイルを読み取って certutil コマンドを作成しますか?
答え1
Stack Overflowの質問を参照PowerShell を使用して IIS から証明書をエクスポートする。
答えがうまくいけば、PSRemoting
(を使用してリモートサーバー上でPowerShellコードを実行できます。入力-PSSessionまたは呼び出しコマンド) またはpsexec。
「dir cert:\localmachine\my | Where-Object { $_.hasPrivateKey } | 」のように証明書ストアを dir し、それをサムプリントとともに certutil エクスポートに渡す方法を誰か知っていますか?
これを試してみてください。私の場合はうまくいきました:
Get-ChildItem -Path 'Cert:\localmachine\My' |
Where-Object { $_.hasPrivateKey } |
Foreach-Object {
&certutil.exe @('-exportpfx', '-p', 'secret', $_.Thumbprint, "$($_.Subject).pfx")
}
注意してくださいSubject
ファイル名として使用できない場合がありますUnicode に無効な外国語文字が含まれているためです。
答え2
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 インストールの一部です。ローカル マシンまたはリモート サーバー (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
}
答え3
- 管理者としてmmcを開く
- メニューファイル-> スナップインの追加と削除 ( Ctrl+ M)
- を選択証明書左ペインでスナップインして追加
- 選択するコンピュータアカウント(3番目のオプション)
- 選ぶ別のコンピュータ証明書を管理するリモートシステムの名前を入力します。
- ダイアログを完了して[OK]をクリックします
名前が若干異なる可能性があります。私の OS はドイツ語なので、すべてを大まかに翻訳しました。