Как сохранить файл ключей в enum

Обновлено: 07.07.2024

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

Перенести закрытые ключи и сертификаты КриптоПро на другой компьютер можно двумя способами:

  1. Перенести или скопировать контейнер закрытого ключа через стандартную оснастку CryptoPro в панели управления. Это самый простой и быстрый способ, если у вас не много сертификатов и ключей. Если же их несколько десятков, а это не такая уж и редкость, то такой путь вам не подходит.
  2. Скопировать сертификаты и ключи непосредственно через перенос самих исходных файлов и данных, где все это хранится. Объем работы одинаков и для 5 и для 50-ти сертификатов, но требуется больше усилий и знаний.

Я опишу оба этих способа, но подробно остановлюсь именно на втором способе. В некоторых ситуациях он является единственно возможным. Важное замечание. Я буду переносить контейнеры закрытого ключа, которые хранятся в реестре. Если вы храните их только на токене, то переносить контейнеры вам не надо, только сертификаты.

Копирование закрытого ключа через оснастку КриптоПро

Для того, чтобы скопировать контейнер для хранения закрытого ключа сертификата штатным средством, необходимо в Панели управления открыть оснастку CryptoPro, перейти в раздел Сервис и нажать Скопировать.

Копирование закрытого ключа сертификата через оснастку КриптоПро

Далее вы выбираете текущий контейнер, который хотите скопировать. Это может быть либо токен, либо реестр компьютера. Затем новое имя и новое расположение контейнера. Опять же, это может быть как реестр, так и другой токен.

Ошибка копирования контейнера

Но тут есть важный нюанс. Если во время создания закрытого ключа он не был помечен как экспортируемый, скопировать его не получится. У вас будет ошибка:

Ошибка копирования контейнера

Ошибка копирования контейнера. У вас нет разрешений на экспорт ключа, потому что при создании ключа не был установлен соответствующий флаг. Ошибка 0x8009000B (-2146893813) Ключ не может быть использован в указанном состоянии.

Если получили такую ошибку, то для вас этот способ переноса не подходит. Можно сразу переходить к следующему.

Отдельно расскажу, как скопировать сертификат и закрытый ключ к нему в файл, чтобы перенести на другой компьютер без использования токена. Штатные возможности CryptoPro не позволяют скопировать закрытый ключ в файл.

Запускаем Internet Explorer, открываем его настройки и переходим на вкладку Содержание. Там нажимаем на Сертификаты.

Посмотреть список сертификатов в системе

Выбираем нужный сертификат и нажимаем Экспорт.

Экспорт сертификата CryptoPro

Если у вас после слов «Экспортировать закрытый ключ вместе с сертификатом» нет возможности выбрать ответ «Да, экспортировать закрытый ключ«, значит он не помечен как экспортируемый и перенести его таким способом не получится. Можно сразу переходить к другому способу, который описан ниже.

Невозможно экспортировать закрытый ключ

Если же такая возможность есть, то выбирайте именно этот пункт и жмите Далее. В следующем меню ставьте все галочки, так вам будет удобнее и проще в будущем, если вдруг опять понадобится копировать ключи уже из нового места.

Формат экспортируемого ключа

Укажите какой-нибудь пароль и запомните его! Без пароля продолжить нельзя. В завершении укажите имя файла, куда вы хотите сохранить закрытый ключ. Теперь вам нужно скопировать сам сертификат. Только что мы копировали закрытый ключ для него. Не путайте эти понятия, это разные вещи. Опять выбираете этот же сертификат в списке, жмите Экспорт и выберите файл формата .CER.

Перенос сертификата

Сохраните сертификат для удобства в ту же папку, куда сохранили закрытый ключ от него.

В итоге у вас должны получиться 2 файла с расширениями:

Вам достаточно перенести эти 2 файла на другой компьютер и кликнуть по каждому 2 раза мышкой. Откроется мастер по установке сертификатов. Вам достаточно будет выбрать все параметры по-умолчанию и понажимать Далее. Сертификат и контейнер закрытого ключа к нему будут перенесены на другой компьютер.

Я описал первый способ переноса в ручном режиме. Им можно воспользоваться, если у вас немного сертификатов и ключей. Если их много и руками по одному переносить долго, то переходим ко второму способу.

Массовый перенос ключей и сертификатов CryptoPro с компьютера на компьютер

В интернете достаточно легко находится способ переноса контейнеров закрытых ключей КриптоПро через копирование нужной ветки реестра, где это все хранится. Я воспользуюсь именно этим способом. А вот с массовым переносом самих сертификатов у меня возникли затруднения и я не сразу нашел рабочий способ. Расскажу о нем тоже.

Для дальнейшей работы нам надо узнать SID текущего пользователя, у которого мы будем копировать или переносить сертификаты с ключами. Для этого в командной строке выполните команду:

Как узнать SID пользователя

В данном случай zerox — имя учетной записи, для которой узнаем SID.

Далее скопируем контейнеры закрытых ключей в файл. Для этого на компьютере открываем редактор реестра и переходим в ветку:

где S-1-5-21-4126079715-2548991747-1835893097-1000 — SID пользователя, у которого копируем сертификаты. Выбираем папку Keys и экспортируем ее.

Массовый перенос закрытых ключей сертификатов с компьютера на компьютер

Сохраняем ветку реестра в файл. В ней хранятся закрытые ключи.

Теперь нам нужно скопировать сразу все сертификаты. В Windows 7, 8 и 10 они живут в директории — C:\Users\zerox\AppData\Roaming\Microsoft\SystemCertificates\My. Сохраняйте эту директорию.

Для переноса ключей и сертификатов нам надо скопировать на другой компьютер сохраненную ветку реестра и директорию с сертификатами My. Открываем файл с веткой реестра в текстовом редакторе и меняем там SID пользователя со старого компьютера на SID пользователя нового компьютера. Можно прям в блокноте это сделать поиском с заменой.

Замена SID пользователя

После этого запускаем .reg файл и вносим данные из файла в реестр. Теперь скопируйте папку My с сертификатами в то же место в профиле нового пользователя. На этом перенос сертификатов и контейнеров закрытых ключей КриптоПро завершен. Можно проверять работу.

Я не раз пользовался этим методом, на текущий момент он 100% рабочий. Написал статью,чтобы помочь остальным, так как сам не видел в интернете подробной и понятной с первого раза статьи на эту тему. Надеюсь, моя таковой получилась.

E-num – это система авторизации, предоставляющая доступ к сервисам системы WebMoney Transfer посредством секретного ключа (уникального шифроблокнота), который хранится в мобильном устройстве (телефон, смартфон, планшет) участника. Система позволяет хранить ключи программы WM Keeper в своей базе данных (E-num Storage), что дает возможность безопасно пользоваться своими электронными кошельками, а также сервисами WebMoney практически на любом компьютере.

Система E-num проста и удобна. Авторизация происходит по схеме "Вопрос-ответ" следующим образом.

  1. На странице сайта (или в программе), предусматривающей защищённый доступ, участник видит свой email, далее отображается число-вопрос;
  2. Участник запускает в своем телефоне мобильный клиент E-num, приложение WM Keeper для Android или WM Keeper для iOS и вводит число-вопрос. После ввода, на дисплее телефона отображается число-ответ;
  3. Участник вводит число-ответ в поле авторизации на сайте (или в программе WM Keeper) и получает доступ к защищённым разделам сайтов или подтверждает выполнение операции (перевод средств, добавление корреспондента и др.).

Сервис E-num дает участникам следующие возможности.

  • Регистрироваться в системе, проводить настройку, восстанавливать доступ;
  • Использовать дополнительный безопасный способ входа в WM Keeper;
  • Подтверждать авторизацию на сервисах WebMoney при выполнении важных операций;
  • Подтверждать переводы средств, оплату услуг и проведение других операций в WM Keeper;

Для регистрации в системе E-num необходимо иметь E-mail, номер мобильного телефона и как минимум одно из устройств:

  • смартфон или планшет с ОС Android;
  • iPhone, iPad или iPod Touch с Apple iOS;
  • мобильное устройство, работающее на ОС Windows Phone и BlackBerry.

Адрес электронной почты, указываемый в Аттестате Вашего WMID WebMoney Transfer, необходимо использовать и в сервисе E-num.

Зарегистрироваться в системе E-num можно тремя способами:

Реализация возможностей системы E-num осуществляется с использованием мобильного клиента или мобильного приложение WM Keeper для Android. Описание процедур установки и настройки E-num клиентов для различных платформ смотрите в статье E-num клиент и Подтверждение операций в Keeper Android.

Инструкцию по установке параметров E-num аккаунта смотрите в статье Настройка учетной записи E-num.

При утере доступа к E-num аккаунту воспользуйтесь инструкциями по восстановлению.

Enum-авторизацию можно использовать как дополнительный безопасный способ входа в WM Keeper WinPro (Classic). В этом случае ключи доступа к WMID записываются в специальное хранилище сервиса - E-num Storage, и необходимость хранить их на локальном компьютере отпадает.

3. Дополнительная авторизация на сервисах WebMoney¶

Авторизация на сайтах системы WebMoney с использованием E-num представляет собой дополнительный этап аутентификации при выполнении наиболее важных операций в системе:

  • изменение ключевых персональных данных;
  • настройка безопасности;
  • перевод средств по доверию на сервисах системы;
  • оплата через сервис Merchant;
  • размещение заявки и выдача средств на кредитной бирже;
  • открытие лимита доверия в Долговом сервисе;
  • и другие операции.

О подключении данной функции и особенностях ее использования читайте статью Дополнительная авторизация при помощи E-num.

4. Подтверждение операций с помощью E-num¶

Функция подтверждения операций с помощью E-num позволяет участникам значительно повысить безопасность ключевых операций при работы со своим WM Keeper. К таким операциям относятся:

  • прямой перевод WM с кошелька на кошелек;
  • оплата счета;
  • добавление корреспондента; ;
  • смена места хранения ключей WM Keeper WinPro (Classic); .

При подключении функции подтверждения с помощью E-num для проведения всех подобных операций будет требоваться дополнительное подтверждение с использованием мобильного E-num клиента или приложения WM Keeper для Android.

Последовательность действий при подключении и использовании данной функции смотрите в статье Подтверждение операций при помощи сервиса E-num и Подтверждение операций в Keeper Android

Я собираюсь создать новый проект с более чем 100 перечислениями, и большинство из них нужно будет сохранить в базе данных. Создание конвертеров для каждого из них было бы долгим процессом, поэтому мне интересно, есть ли у Visual Studio или у кого-то какие-либо методы для этого, о которых я не слышал.

Работает как шарм! Нет необходимости преобразовывать (int) Enum или (Enum) int в код. Просто используйте сначала код enum, и ef сохранит для вас int. p.s .: Атрибут "[EnumDataType (typeof (PhoneTypes))]" не требуется, просто дополнительный, если вам нужны дополнительные функции.

В качестве альтернативы вы можете:

Мы храним наши как целые или длинные, а затем можем просто перебрасывать их туда и обратно. Возможно, не самое надежное решение, но то, что мы делаем.

Мы используем типизированные DataSet, например:

Если вам нужно сохранить в БД строковые значения поля перечисления, лучше сделать как показано ниже. Например, это может понадобиться, если вы используете SQLite, который не поддерживает поля enum.

Что касается структуры . с сотнями перечислений, я бы сначала подумал о том, чтобы попытаться организовать данные в единую таблицу, которая может выглядеть примерно так: (псевдо sql)

Это позволит вам хранить информацию о перечислении в одной таблице. EnumType также может быть внешним ключом к таблице, которая определяет различные перечисления.

Ваши бизнес-объекты будут связаны с этой таблицей через EnumId. Тип перечисления используется только для организации и фильтрации в пользовательском интерфейсе. Использование всего этого, конечно, зависит от структуры вашего кода и предметной области.

Кстати, в этом сценарии вам нужно установить кластерный индекс для EnumType, а не оставлять идентификатор кластера по умолчанию, созданный на PKey.

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

Некоторые вещи следует принять во внимание.

Будет ли столбец перечисления использоваться напрямую другими приложениями, например, в отчетах. Это ограничит возможность сохранения перечисления в целочисленном формате, потому что это значение не будет иметь смысла, если оно присутствует в отчете, если отчеты не имеют настраиваемой логики.

Что нужно i18n для вашего приложения? Если он поддерживает только один язык, вы можете сохранить перечисление как текст и создать вспомогательный метод для преобразования из строки описания. Вы можете использовать для этого [DescriptionAttribute] , и методы преобразования, вероятно, можно найти, выполнив поиск SO.

Если, с другой стороны, у вас есть потребность в поддержке доступа к вашим данным на нескольких языках и внешних приложений, вы можете подумать, действительно ли перечисление является ответом. Другой вариант, например таблицы поиска, может быть рассмотрен, если сценарий более сложен.

Перечисления превосходны, когда они самодостаточны в коде . когда они пересекают эту границу, все становится немного запутанным.

Обновление:

Вы можете преобразовать из целого числа с помощью метода Enum.ToObject . Это означает, что вы знаете тип перечисления при преобразовании. Если вы хотите сделать его полностью универсальным, вам необходимо сохранить тип перечисления вместе со значением в базе данных. Вы можете создать вспомогательные таблицы словаря данных, чтобы сообщить вам, какие столбцы являются перечислениями и какого они типа.

Вам не нужно ничего делать, если вы хотите хранить целые числа. Просто нанесите карту своей собственности в EF. Если вы хотите сохранить их в виде строк, используйте конвертер.

Int (тип базы данных smallint):

Строка (тип базы данных - varchar (50)):

Если вы хотите сохранить использование данных db, используйте smallint в качестве столбца в db. Но данные не будут удобочитаемы, и вам следует установить индекс для каждого элемента перечисления и никогда не связываться с ними:

Если вы хотите сделать данные в db более читабельными, вы можете сохранить их в виде строк (например, varchar (50)). Вам не нужно беспокоиться об индексах, и вам просто нужно обновить строки в db при изменении имен перечислений. Минусы: размер столбца увеличивает стоимость использования данных. Это означает, что если у вас есть таблица в пределах 1 000 000 строк, это может повлиять на размер и производительность базы данных.

Также в качестве решения вы можете использовать короткие имена перечислений:

Или используйте свой собственный конвертер, чтобы сделать имена в db короче:

Я не уверен, что он самый гибкий, но вы можете просто хранить их строковые версии. Это, конечно, читается, но, возможно, трудно поддерживать. Перечисления довольно легко конвертируются из строк и обратно:

Почему бы не попробовать полностью отделить перечисления от БД? Я нашел эту статью отличным справочником при работе над чем-то похожим:

Идеи в нем должны применяться независимо от того, какую БД вы используете. Например, в MySQL вы можете использовать тип данных enum для обеспечения соответствия вашим закодированным перечислениям:

Подход «сначала БД» может быть использован путем создания согласованной таблицы для каждого перечисления, где имя столбца Id совпадает с именем таблицы. Для поддержки ограничений внешнего ключа и удобных столбцов в представлениях полезно иметь значения перечисления, доступные в базе данных. В настоящее время мы поддерживаем около 100 типов перечислений, разбросанных по многочисленным версиям баз данных.

Для предпочтения Code-First стратегию T4, показанную ниже, вероятно, можно было бы отменить для записи в базу данных.

  1. Создайте «Проект перечисления». Добавьте файл .tt, показанный ниже.
  2. Создайте подпапку для каждого имени схемы базы данных.
  3. Для каждого типа перечисления создайте файл с именем SchemaName.TableName.tt. Содержимое файла всегда одно и то же, одна строка:
  4. Затем, чтобы создать / обновить перечисления, щелкните правой кнопкой мыши один или несколько файлов и выберите «Запустить настраиваемый инструмент» (у нас еще нет автоматического обновления). Он добавит / обновит файл .cs в проект:

Не так давно я уже описывал основные правила безопасности при активном использовании платежной системы Web-Money - их несколько и комплексное применение позволит с высокой степенью надежности обезопасить свои деньги в онлайн. Сейчас я расскажу о наиболее "продвинутом" способе защитить свои вебмани - использовании системы Enum-авторизации. Что же это такое?

Сервис ENum Storage позволяет хранить персональный ключ от Webmoney в зашифрованном виде на своем сервере, а Вам дает возможность авторизоваться по методу "Вопрос-Ответ" с разнообразных мобильных устройств (например, мобильного телефона). На мобильник устанавливается java-приложение, которое каждый раз при авторизации выдает Вам уникальный ответный код доступа. И уже после его принятия кипером Вы вводите пароль к кошельку. Т.е. получается своего рода вторая степень защиты. Плюс этот сервис позволяет платить с ваших кошельков даже на чужих компьютерах, где не установлен WebMoney Keeper – т.е. везде, где есть Интернет. В итоге, с помощью этого сервиса Вы приобретаете такие вот серьезные возможности, которые существенно увеличат безопасность и удобство использования:

  • сможете запускать свой WebMoney Keeper, не храня ключи у себя на компьютере;
  • производить платежи в системе WebMoney, даже не запуская свой кипер;
  • авторизовываться на любых сайтах и сервисах системы WebMoney, также без запуска своего кипера;
  • безопасно запускать свой WM Keeper на любом компьютере, где есть интернет;
  • производить вебмани-платежи в системе, используя авторизацию только с помощью своего ENum-клиента;
  • производить SMS-подтверждения своих транзакций в системе WebMoney.

Если Вас заинтересовали такие возможности Enum-авторизации и Вам не безразлична безопасность средств, находящихся на ваших WM-кошельках, смотрите видеоролик, с более подробным и наглядным объяснением принципа работы сиcтемы:

Итак, как Вы уже наверное поняли, на сегодня существует три вида ENum-авторизации в системе WebMoney:

  • идентификация по методу "Вопрос-Ответ" с мобильных устройств;
  • идентификация по отпечаткам пальцев с ПК и ноутбуков;
  • идентификация по методу "Вопрос-Ответ" через SMS.

Второй вариант видимо является максимально надежным, но и дорогостоящим, поскольку сканер отпечатка пальцев все таки еще редкость, а вот мобильный телефон есть уже, фактически, у каждого. Третий вариант тоже рассматривать не будем - там достаточно все просто, но есть ряд ограничений по количеству отосланных СМС в сутки, да и задержка в приходе SMS может быть. Следовательно, рассмотрим вариант по методу "Вопрос-Ответ" с мобильных устройств как самый комфортный. Мобильный телефон должен поддерживать Java-приложения, но, впрочем, этим отличаются все более-менее современные мобильники.

Нужно отметить, что после установки такого Enum-клиента на мобильном телефоне Вы можете работать совершенно автономно - подключение к интернет этому шифроблокноту не нужно! Просто вводите одни цифры, сгенерированные кипером при авторизации - получаете ответные цифры, соответствующие вбитым, и вводите их в кипер или на сайт. Очень удобно - и ни от кого не зависите! Да, не забудьте также "запаролить" свой клиент - чтобы при запуске он спрашивал пароль на вход.

Следующий шаг - Вам потребуется залогиниться на сайт безопасности системы WM Security.WebMoney.ru и в разделе Enum-авторизация разрешить авторизацию на сайтах системы WebMoney Transfer и оплату через сервис Merchant.WebMoney для своего E-num аккаунта. Далее, необходимо внести соответствующие настройки локально в своем Webmoney Keeper. На вкладке БЕЗОПАСНОСТЬ (Инструменты -> Параметры программы -> Безопасность) Вы можете сгенерировать новые ключи для входа (чтобы быть уверенным, что старые ни у кого не останутся), сохранить этот новый ключ в файл где-то у себя в специальном месте на случай форс-мажора и указать новое место хранения ключей - Enum Storage (чтобы убрать ключи для кипера с вашего компьютера). После этого файл ключей отправляется прямиком в защищенное хранилище Enum-Storage, которое невозможно взломать, и будет храниться теперь там вечно, а с вашего ПК удалится автоматически. Само собою, желательно все эти телодвижения производить на "чистом" компьютере, свободном от вирусов и прочей билеберды!

Вот и все! Теперь при очередном входе в кипер, выбирайте на постоянной основе место хранения ключей - Enum-Storage, вводите свой емэйл и способ авторизации "Вопрос-ответ, используя приложение", ставьте галочку "Запомнить email и способ авторизации". На втором этапе Ваш кипер генерирует цифровой код, который Вам нужно ввести в запущенном Enum-клиенте (раздел Авторизация). Шифроблокнот сгенерирует Вам ответный код, который Вы соответственно вводите в Keeper. Если не ошиблись, то кипер попросит уже непосредственно обычный пароль для входа в него. Т.е. сейчас у Вас получилась такая двухступенчатая система защиты.

Кроме того, такая система позволит Вам теперь логиниться на все сайты, который так или иначе требуют авторизации через вебмани. Везде, где раньше Вам нужно было запускать свой WebMoney Keeper, теперь будет достаточно выбрать метод авторизации ENum, достать телефон, запустить приложение и опять в разделе авторизации сделать все вышеуказанные телодвижения. Таким образом попасть в запароленный раздел можно будет с любого компьютера, даже если Кипер там не установлен - например из Интернет-кафе.

Ну и как следствие, еще более продвинутая фишка - возможность расплачиваться вебманями или производить обмен webmoney, не запуская кипера, т.е. абсолютно с любого компьютера! При любой оплате через мерчант WebMoney Вам нужно будет выбрать способ E-Num авторизации, ввести свой емэйл, сгенерировать число-вопрос, запустить приложение на телефоне, и теперь уже в разделе "Платеж" получить ответный код. Там вводить придется немного побольше информации - еще сумму и цифры кошелька-получателя. Но тем не менее - таким способом Вы сможете получить доступ к своему кошельку откуда угодно, не рискуя его безопасностью!

Ну, это, пожалуй, и все! Возможно с первого раза показалось достаточно сложно, но. перечитайте еще раз, просмотрите видео, и на подключение к этому замечательному сервису уйдет не так много времени и сил! А голова о сохранности титульных знаков на ваших WebMoney-кошельках болеть станет не в пример меньше!

Вы знаете, что каждую секунду вашему компьютеру угрожает тысяча опасностей! Как противостоять им? Есть такой видеокурс! «Киберсант-Оборона. Как превратить компьютер в неприступную крепость!»

Понравилась публикация!? Получайте новые прямо в свой почтовый ящик!

Читайте также: