Мне нужно иметь возможность удаленно экспортировать установленный сертификат компьютера с полной цепочкой сертификатов и закрытыми ключами на сервере 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
- Откройте mmc как администратор
- Менюфайл-> Добавить/удалить оснастку ( Ctrl+ M)
- ВыберитеСертификатыоснастку на левой панели и нажмитеДобавлять
- ВыбиратьУчетная запись компьютера(третий вариант)
- ВыбиратьДругой компьютери введите имя удаленной системы, сертификатами которой вы хотите управлять
- Завершите диалог и нажмите ОК.
Названия могут немного отличаться. У меня немецкая ОС, поэтому я примерно все перевел.