Спасение сертификатов ЭЦП
Потребовалось на днях произвести замену Windows XP на Windows 10. С одной стороны задача простая, но проблема в том, что старая и добрая XP была напичкана сертификатами.
По началу думал, что можно будет просто взять и экспортнуть их через консоль. Выбрал разом все сертификаты и произвел экспорт, а после импорт на новой машине.
Эффект данный метод не произвел, пришлось выгружать под одному сертификату.
Потом встала проблема, что данные сертификаты хоть и ставятся, но требуют наличие рутокена. В принципе можно было и так оставить, а можно было потом и руками проставить все сертификаты, но хотелось сделать красиво.
В итоге начал изучать реестр, так как сертификаты у нас стоят в реестре (это отдельная тематика для безопасности эцп), то значит там и должны быть записи.
1 |
HKEY_LOCAL_MACHINE\SOFTWARE\Crypto Pro\Settings\USERS\ |
Ищем по sid пользователю где есть сертификаты и находим список сертификатов плюс так же получаем список сохраненных паролей от ЭЦП. Выгружаем кусок реестра и импортируем его на новую машину. Есть одно НО, действия данные надо совершать под пользователем и не ошибиться с sid записью на новом компьютере. Я перед импортом удалил все свои сертификаты из контейнера Личные.
Дальше потребовалось уже использовать КриптоПро в работе, а именно выгрузки которые я делал через консоль, тоже пригодились.
Производим установку личного сертификата.
Метод конечно не логичный, обычно установка сертификата в хранилище занимает меньше 5 минут! Но в данном случае, человек даже и не замечает, что было сделано и не ломает себе голову вспоминая pin от ключа эцп. Кстати, данный метод может подойти для умершей windows, главное добраться до файла реестра (C:\Windows\System32\config\).
И напоследок 2 bat файла которые так же помогли, авторов указать не могу, так как они у меня уже давно были, но в работу пошли только не давно.
Поиск ключа для КриптоПро
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
@echo off Set xOS="x64" If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS="x86" cls & @echo. @echo ------------------------------------------------------------------------------- @echo Keys from: "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products" @echo. for /F "UseBackQ " %%B in (`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products" /f "cryptopro" /s ^|Find /I "InstallProperties"`) do ( For /F "UseBackQ Tokens=3,*" %%D In (`Reg Query "%%B"^|Find /I "DisplayName"`) Do ( For /F "UseBackQ Tokens=3" %%F In (`Reg Query "%%B"^|Find /I "DisplayVersion"`) Do ( For /F "UseBackQ Tokens=3" %%H In (`Reg Query "%%B"^|Find /I "ProductID"`) Do ( echo %%D %%E v%%F ^- %%H )))) @echo. If NOT %xOS%=="x86" ( @echo ------------------------------------------------------------------------------- @echo Keys from: "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products" @echo. for /F "UseBackQ " %%B in (`reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products" /f "cryptopro" /s ^|Find /I "InstallProperties"`) do ( For /F "UseBackQ Tokens=3,*" %%D In (`Reg Query "%%B"^|Find /I "DisplayName"`) Do ( For /F "UseBackQ Tokens=3" %%F In (`Reg Query "%%B"^|Find /I "DisplayVersion"`) Do ( For /F "UseBackQ Tokens=3" %%H In (`Reg Query "%%B"^|Find /I "ProductID"`) Do ( echo %%D %%E v%%F ^- %%H )))) @echo. ) @echo ------------------------------------------------------------------------------- @echo Keys from: "HKLM\SOFTWARE\Crypto Pro" @echo. for /F "UseBackQ delims=-" %%O in (`reg query "HKLM\SOFTWARE\Crypto Pro" /f "ProductID" /s ^|Find /I "HKEY"`) do ( For /F "UseBackQ Tokens=4 delims=\" %%Q In (`Reg Query "%%O" /f "ProductID" ^|Find /I "HKEY"`) Do ( For /F "UseBackQ Tokens=3" %%S In (`Reg Query "%%O" ^|Find /I "ProductID"`) Do ( echo %%Q ^- %%S ))) echo. If NOT %xOS%=="x86" ( @echo ------------------------------------------------------------------------------- @echo Keys from: "HKLM\SOFTWARE\WOW6432Node\Crypto Pro" @echo. for /F "UseBackQ delims=-" %%O in (`reg query "HKLM\SOFTWARE\WOW6432Node\Crypto Pro" /f "ProductID" /s ^|Find /I "HKEY"`) do ( For /F "UseBackQ Tokens=5 delims=\" %%Q In (`Reg Query "%%O" /f "ProductID" ^|Find /I "HKEY"`) Do ( For /F "UseBackQ Tokens=3" %%S In (`Reg Query "%%O" ^|Find /I "ProductID"`) Do ( echo %%Q ^- %%S ))) echo. ) @echo ------------------------------------------------------------------------------- pause |
Поиск сохраненных паролей от эцп
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
@echo off SetLocal EnableExtensions EnableDelayedExpansion copy "C:\Program Files\Crypto Pro\CSP\csptest.exe" >nul chcp 1251 if exist %computername%.txt del /f /q %computername%.txt if exist temp.txt del /f /q temp.txt set NameK="" for /f "usebackq tokens=3,4* delims=\" %%a in (`csptest -keyset -enum_cont -fqcn -verifycontext` ) do ( set NameK=%%a ;csptest -passwd -showsaved -container "!NameK!" >> temp.txt ) del /f /q csptest.exe set/a $ai=-1 set/a $bi=2 for /f "usebackq delims=" %%a in ("temp.txt") do @(set "$a=%%a" if "!$a:~,14!"=="AcquireContext" echo:!$a! >> %computername%.txt if "!$a:~,8!"=="An error" echo:¢ë, ª«î祢®© ®ášâ¥«ì ®âáãâáâ¢ã¥â š«š ¯ à®«ì ¥ ¡ë« á®åà ¥. >> %computername%.txt & echo: >> %computername%.txt if "!$a:~,5!"=="Saved" set/a $ai=1 if !$ai! geq 0 set/a $ai-=1 & set/a $bi-=1 & echo:!$a! >> %computername%.txt if !$bi!==0 echo: >> %computername%.txt & set/a $bi=2 ) del /f /q temp.txt EndLocal echo on |
Один комментарий
Андрей
😎 Красавчик