Экспортируйте установленный сертификат и закрытый ключ из командной строки удаленно в Windows, используя что-то помимо инструмента certmgr.MSC

Экспортируйте установленный сертификат и закрытый ключ из командной строки удаленно в Windows, используя что-то помимо инструмента certmgr.MSC

Мне нужно иметь возможность удаленно экспортировать установленный сертификат компьютера с полной цепочкой сертификатов и закрытыми ключами на сервере Windows. Сертификат используется для IIS, и я хочу использовать его для экземпляра Apache, работающего на том же сервере.

Я знаю, как сделать это вручную с помощью инструмента certmgr.MSC mmc snap in, но как это сделать из командной строки или с удаленной машины в том же домене?

Я также знаю, как просмотреть только сертификат с помощью openssl s-client. Можно ли это использовать для сохранения как сертификата, так и закрытого ключа для импорта в файл хранилища ключей Java?

Certmgr через RDP слишком медленный для того, что мне нужно. Мне нужно скриптовое решение.

Моя среда – это всеWindows Server 2008R2. Удалённое взаимодействие PowerShell не включено, но я могу его включить.

Я подтвердил, что не могу использовать PowerShell Export-PfxCertificate, поскольку мои серверы недостаточно новые...

Итак, если я могу использовать PowerShell для получения отпечатка нужного мне сертификата, я могу затем передать его команде "certutil -exportpfx". Я подтвердил, что это сработает.

Как мнережхранилище сертификатов, например, "dir cert:\localmachine\my | Where-Object { $_.hasPrivateKey } | " И затем передать это в экспорт certutil с отпечатком?

ИЛИ, могу ли я сначала сделать dir и сказать ему, чтобы он распечатал только отпечаток, а не все? Затем сохранить это в файл и прочитать файл и сделать команду certutil?

решение1

См. вопрос Stack OverflowЭкспорт сертификата из IIS с помощью PowerShell.

Если ответ вас удовлетворил, то вы можете запустить код PowerShell на удаленном сервере, используя PSRemoting(Enter-PSSessionилиВызов-Команды) илиpsexec.

Кто-нибудь знает, как создать каталог хранилища сертификатов, например, "dir cert:\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")
         }

Остерегайтесь, чтоиногда вы не сможете использовать 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

  1. Откройте mmc как администратор
  2. Менюфайл-> Добавить/удалить оснастку ( Ctrl+ M)
  3. ВыберитеСертификатыоснастку на левой панели и нажмитеДобавлять
  4. ВыбиратьУчетная запись компьютера(третий вариант)
  5. ВыбиратьДругой компьютери введите имя удаленной системы, сертификатами которой вы хотите управлять
  6. Завершите диалог и нажмите ОК.

Названия могут немного отличаться. У меня немецкая ОС, поэтому я примерно все перевел.

Связанный контент