|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - перенос личных сертификатов КриптоПро |
|
||||
|
|
Любой язык - перенос личных сертификатов КриптоПро
|
|
Новый участник Сообщения: 6 |
Здравствуйте уважаемые специалисты.
задумался над автоматизацией переноса личных сертификатов КриптоПро, либо на другой комп, либо на новую 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 | |
|