|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - перенос личных сертификатов КриптоПро |
|
|
Любой язык - перенос личных сертификатов КриптоПро
|
Новый участник Сообщения: 6 |
Профиль | Отправить PM | Цитировать Здравствуйте уважаемые специалисты.
задумался над автоматизацией переноса личных сертификатов КриптоПро, либо на другой комп, либо на новую windows. Сейчас это приходится делать ручками так: Выгружаем куст реестра на старой машине HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings (для x86) | HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings (для X64), затем на новой машине смотрим SID и через notepad++ производим поиск и замену старого SID на новый SID в этих файлах, после чего импортируем измененные файлы в реестр, все - сертификаты перенесены )) Можно ли как-то автоматизировать поиск и замену SID в выгруженных файлах??? |
|
Отправлено: 21:11, 13-03-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать meir, Вы полагаете, у всех и каждого установлен Crypto Pro? И причём тут «куст реестра»?
Покажите образец содержимого HKLM\SOFTWARE\Crypto Pro\Settings, укажите про какой именно SID идёт речь, где именно смотрите SID на новой машине. |
Отправлено: 07:11, 14-03-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings] "Version"="4.0.9708" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings\KeyDevices] "LicErrorLevel"=dword:00000006 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings\Keys] @="" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings\Users] @="" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings\Users\S-1-5-21-1365644562-2568224515-950490703-1000] [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Crypto Pro\Settings\Users\S-1-5-21-1365644562-2568224515-950490703-1000\KeyDevices] На старом компе я вижу установленные Контур, Сбис и другие установленные программы использующие шифрование КриптоПро, экспортирую ключ реестра (выше приведено начало ключа sid в данном случае S-1-5-21-1365644562-2568224515-950490703-1000) На новом компе первым делом я устанавливаю криптоПро, затем получаю SID напирмер он S-1-5-21-1365644562-2568224515-950490703-2222 и через notepad ++ заменяю sid, затем импортирую получившийся файл. Загвоздка тока в замене sid, пытался сделать так: получаем sid в текстовый файл командой wmic useraccount where name='%username%' get sid > C:\sid\oldPK.txt , так же на новом wmic useraccount where name='%username%' get sid > C:\sid\newPK.txt , получается значение из двух строчек SID S-1-5-21-1365644562-2568224515-950490703-1000 искать значение 2й строки из oldPK.txt в файле key.reg и заменить его значением из 2й строки файла newPK.txt Не хватает головы на скрипт (( |
Отправлено: 10:31, 14-03-2017 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать И тот, и другой SID представляют собой SID текущего пользователя, так?
|
Отправлено: 12:36, 14-03-2017 | #4 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Да, текущего пользователя
|
|
Отправлено: 14:30, 14-03-2017 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Тогда попробуйте так:
Скрытый текст
Option Explicit Const strExportedCryptoProFile = "Exported Crypto Pro.reg" Const strReplacePatternForCurrentUserSID = "@@@CurrentUserSID@@@" Const HKEY_LOCAL_MACHINE = &H80000002 Const ForReading = 1 Const TristateTrue = -1 Const SystemFolder = 1 Dim objSWbemLocator Dim objFSO Dim strContent Dim strValue Dim strCurrentUserSID If WScript.Arguments.Count = 1 Then Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator") Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Select Case LCase(WScript.Arguments.Item(0)) Case "/export" With objSWbemLocator.ConnectServer(".", "root\default").Get("StdRegProv") If .GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Crypto Pro\Settings", "Version", strValue) = 0 Then WScript.CreateObject("WScript.Shell").Run """reg.exe"" export ""HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro"" """ & strExportedCryptoProFile & """ /y", 0, True ElseIf .GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Wow6432Node\Crypto Pro\Settings", "Version", strValue) = 0 Then WScript.CreateObject("WScript.Shell").Run """reg.exe"" export ""HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro"" """ & strExportedCryptoProFile & """ /y /reg:32", 0, True Else WScript.Echo "Can't find [Crypto Pro] subkey in registry." WScript.Quit 2 End If End With With WScript.CreateObject("WinNTSystemInfo") strCurrentUserSID = objSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_UserAccount.Domain='" & .DomainName & "',Name='" & .UserName & "'").SID End With With objFSO.OpenTextFile(strExportedCryptoProFile, ForReading, False, TristateTrue) strContent = Replace(.ReadAll(), strCurrentUserSID, strReplacePatternForCurrentUserSID) .Close End With With objFSO.CreateTextFile(strExportedCryptoProFile, True, True) .Write strContent .Close End With Case "/import" If objFSO.FileExists(strExportedCryptoProFile) Then With WScript.CreateObject("WinNTSystemInfo") strCurrentUserSID = objSWbemLocator.ConnectServer(".", "root\cimv2").Get("Win32_UserAccount.Domain='" & .DomainName & "',Name='" & .UserName & "'").SID End With With objFSO.OpenTextFile(strExportedCryptoProFile, ForReading, False, TristateTrue) strContent = Replace(.ReadAll(), strReplacePatternForCurrentUserSID, strCurrentUserSID) .Close End With With objFSO.CreateTextFile(strExportedCryptoProFile, True, True) .Write strContent .Close End With WScript.CreateObject("WScript.Shell").Run """reg.exe"" import """ & strExportedCryptoProFile & """ /reg:32", 0, True Else WScript.Echo "Can't find exported Crypto Pro file [" & strExportedCryptoProFile & "]." WScript.Quit 3 End If Case Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ /export|/import" WScript.Quit 1 End Select Set objFSO = Nothing Set objSWbemLocator = Nothing Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ /export|/import" WScript.Quit 1 End If WScript.Quit 0 Для экспорта запускаете скрипт с параметром «/export», для импорта — «/import». При экспорте производится экспорт раздела «HKLM\SOFTWARE\Crypto Pro» утилитой reg.exe в определённое в скрипте имя файла реестра — «Exported Crypto Pro.reg», затем в полученном файле реестра SID текущего пользователя заменяется на определённое в скрипте заданное значение — «@@@CurrentUserSID@@@». При импорте сначала производится замена в файле реестра строки с заданным в скрипте значением на SID текущего пользователя, затем производится импорт данного файла реестра той же утилитой reg.exe. Для версий ОС от Windows XP/Windows Server 2003 и до Vista/Windows Server 2008 могут потребоваться хотфиксы: You cannot use the Reg.exe utility to access 64-bit registry keys on a 64-bit computer from a computer that is running a 32-bit version of Windows Server 2003, Windows XP, Windows Server 2008, or Windows Vista. Начиная с Windows 7/Windows Server 2008 R2 хотфиксы не нужны. |
Последний раз редактировалось Iska, 14-03-2017 в 20:23. Отправлено: 18:41, 14-03-2017 | #6 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Фантастика!! крутой код! подскажите когда запускаю с ключом /export выскакивает ошибка (прикладываю скрин)
|
Отправлено: 19:45, 14-03-2017 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Это строка:
If objSWbemObjectEx.GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Crypto Pro\Settings", "Version", strValue) = 0 Then |
Отправлено: 20:19, 14-03-2017 | #8 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Невероятно!!!!! завтра проверю на рабочих, но на моем сработало!!!! Спасибо огромное, даже не верится)))
|
Отправлено: 20:36, 14-03-2017 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Так, тут попутно выяснил вроде бы как можно ограниченно реализовать IsWow64Process на WSH , оставлю для себя для памяти на будущее:
Скрытый текст
Option Explicit Dim objSWbemObjectEx For Each objSWbemObjectEx In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").InstancesOf("Win32_Process") With objSWbemObjectEx WScript.Echo Left(.Name & Space(24), 24), Right(Space(12) & CStr(.ProcessID), 12), Array("32-bit", "64-bit")(CInt(IsWow64Process(.ProcessID)) + 1) End With Next WScript.Quit 0 Function IsWow64Process(lngProcessID) Const SystemFolder = 1 Dim objSWbemObjectEx IsWow64Process = False For Each objSWbemObjectEx In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").Get("Win32_Process.Handle='" & CStr(lngProcessID) & "'").Associators_(, "CIM_DataFile") With WScript.CreateObject("Scripting.FileSystemObject") If StrComp(.BuildPath(.GetSpecialFolder(SystemFolder), "wow64.dll"), objSWbemObjectEx.Name, vbTextCompare) = 0 Then IsWow64Process = True Exit Function End If End With Next End Function Понятно, что это ни разу не натуральная IsWow64Process и близко. Просто тупо смотрим — есть ли у заданного процесса библиотека %SystemRoot%\System32\wow64.dll. Если есть — с некоторой долей вероятности это x86 процесс под x64 ОС. Разумеется, подобный упрощённый подход чреват ошибками, скажем, дочерний procexp64.exe (являющийся вполне себе x64) будет некорректно определён как x86. |
Отправлено: 09:03, 15-03-2017 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2012 R2 - Перенос сервера сертификатов на другой сервер с другим именем | sacredboy | Windows Server 2012/2012 R2 | 0 | 10-08-2016 08:10 | |
2008 R2 - Настройка личных папок пользователей | guff007 | Windows Server 2008/2008 R2 | 9 | 13-06-2012 14:16 | |
Доступ - Перенос сертификатов между пользователями | mindguru | Microsoft Windows 2000/XP | 0 | 05-08-2011 14:42 | |
Доступ - Скрытие личных данных пользователя | reutovo | Microsoft Windows 7 | 2 | 17-04-2011 12:01 | |
Ошибка - Проблема с импортом личных сертификатов | sat812 | Microsoft Windows 2000/XP | 1 | 31-01-2010 16:35 |
|