- Word и excel
- Виды сертификатов
- Другие варианты
- Инструкция по поиску и скачиванию сертификата удостоверяющего центра
- Как работает: алгоритмы шифрования
- Как узнать пароль сертификата электронной подписи
- Какую подпись можно проверить самостоятельно?
- Проверка подписи в веб-сервисах
- Промежуточные сертификаты удостоверяющих центров
- Просмотр сертификатов через certmgr
- Просмотр сертификатов через консоль управления
- Просмотр сертификатов через криптопро
- Просмотр содержимого ключей и сертификатов
- Удостоверяющие центры
- Файлы сертификатов в проводнике
- Часть 1. самоподписанный сертификат
- Заключение
- Отзыв сертификата
Word и excel
Платный плагин «КриптоПро Office Signature» дает возможность создавать и проверять электронную подписи в стандартном интерфейсе Microsoft Office Word и Excel. Для этого необходимо установить программу и средство криптографической защиты информации КриптоПро CSP в соответствии с версией операционной системы.
Для проверки подписи получателю документа нужно убедиться, что версия программы, в которой создана подпись, совместима с версией, в которой подпись буду проверять. В противном случае корректно проверить подпись не получится. Проверить совместимости версий можно с помощью таблицы.
Чтобы проверить подпись в документе Word или Excel, нужно:
- Нажать на значок подписи в документе.
- Щелкнуть правой кнопкой мыши на строке подписи и выбрать пункт «Состав подписи».
При успешной проверке в сообщении будет указана информация о владельце подписи и действительности сертификата. Если сертификат недействителен или в документ после подписания вносили изменения, появится сообщение о том, что документ содержит недействительную подпись.
Виды сертификатов
Принято подразделять сертификаты на следующие виды:
- Квалифицированный сертификат это выпущенный дополнительно к усиленной квалифицированной ЭЦП. Он содержит всю необходимую информацию, так как она не фиксируется в самой ЭЦП. Данный сертификат используется для подтверждения подлинности эцп, а также для шифрования и расшифрования данных документов, сформированных в среде Microsoft Office.
- Децентрализованный сертификат — это выпущенный дополнительно к квалифицированному сертификат, который не проходит процедуру регистрации в Минкомсвязи. Он применяется для построения конфиденциальной системы документооборота между определенными лицами.
Другие варианты
Есть ещё масса других сторонних программ, которые точно так же позволяют работать с сертификатами, установленными в операционной системе. Но вот пользоваться ими не рекомендуется – никто не может гарантировать, что в исходном коде подобного приложения нет команды отправки сертификата на внешний сервер.
Единственная сертифицированная в Минкомсвязи программа для работы с электронными подписями – это именно КриптоПРО CSP (на текущий момент актуальны версии 3.5 или старше). Её использование – это своего рода гарантия защиты от возможной компрометации ЭЦП.
Итого, где находится сертификат электронной подписи на компьютере? В системной папке пользователя, а удобней всего с ключами работать при помощи программы КриптоПРО CSP. С её помощью можно совершить быстрый перенос электронной подписи с одного компьютера на другой даже без использования USB-рутокена. А для быстрого просмотра самих ключей или удаления некоторых из них удобней всего использовать Internet Explorer.
Инструкция по поиску и скачиванию сертификата удостоверяющего центра
Если у вас нет сертификата своего удостоверяющего центра или вы не смогли скачать сертификат на официальном сайте, то рекомендуем вам обратиться к нашим специалистам за помощью в установке и настройке ЭЦП. А можете воспользоваться этой инструкцией и найти сертификат удостоверяющего центра самостоятельно.
- Если вы не знаете ОГРН своего удостоверяющего центра, то необходимо открыть свой сертификат или запустить КриптоПро CSP, предварительно вставив носитель с ЭЦП.
- Перейдите во вкладку “Сервис”.
- Нажмите на кнопку “Просмотреть сертификаты в контейнере”.
- В открывшемся окне “Сертификаты в контейнере закрытого ключа” нажмите кнопку “Обзор…” или кнопку “По сертификату…”.
- Мы нажали кнопку “Обзор” и у нас появилось окно “Выбор контейнера”.
- Выберите свою действующую ЭЦП и нажмите кнопку “ОК”.
- Появится окно с информацией о сертификате: кому выдан (субъект), кем выдан (Поставщик), срок действия (действителен с и по), а также серийный номер.
- Нажмите кнопку “Свойства”.
- В открывшемся окне “Сертификат” перейдите во вкладку “Состав”, нажмите на строку “Издатель” и скопируйте ОГРН удостоверяющего центра из нижней области окна.
- В этом же окне “Сертификат” во вкладке “Состав” нажмите на строку “Идентификатор ключа центра сертификатов” и скопируйте значение “Идентификатор ключа”.
- Перейдите наофициальный Портал уполномоченного федерального органа в области использования электронной подписи.
- Вставьте в пустое поле ранее скопированный ОГРН удостоверяющего центра. Мы рекомендуем вводить ОГРН, а не наименование, чтобы исключить установку сертификатов “чужих” удостоверяющих центров.
- Нажмите на наименование удостоверяющего центра, обозначенного синим цветом.
- На открывшейся странице нажмите на знаки , обведённые в круг, как показано на скриншоте.
- Сделайте поиск по странице, нажав кнопки на клавиатуре Ctrl F. Введите в поисковую строку ранее скопированный идентификатор ключа удостоверяющего центра.
- Нажмите на строку отпечаток, обведённую в красный прямоугольник на скриншоте. Это запустит процедуру скачивания сертификата удостоверяющего центра, выдавшего вам электронную подпись.
- После скачивания файла, вы можете установить сертификат удостоверяющего центра.
Как установить сертификат удостоверяющего центра? Инструкция.
Если не знаете, как правильно установить сертификат и выбрать хранилище для него.
Как проверить, установились ли сертификаты, и как их найти? Инструкция.
Если возникают ошибки и установка сертификата удостоверяющего центра не решила проблему.
Как установить сертификат Минкомсвязи России? Инструкция.
Если возникает ошибка цепочки сертификатов, и установка сертификата удостоверяющего центра не решила проблему.
Как установить сертификат своей ЭЦП? Инструкция.
Если возникает ошибка цепочки сертификатов, и установка сертификата удостоверяющего центра не решила проблему.
Как работает: алгоритмы шифрования
Допустим, вы уже сходили в удостоверяющий центр и получили на флешке сертификат и ключ электронной подписи. Теперь нужно скачать специальный софт, который и будет подписывать ваши документы и проверять чужие на подлинность.
Проблема в том, что ЭП основана на алгоритмах асимметричного шифрования, а их много: разложение на простые множители, дискретное логарифмирование, эллиптические кривые и множество других. Ключ из одного алгоритма не подойдёт для использования в другом, поэтому в России договорились использовать стандарт шифрования ГОСТ Р 34.
Это значит, что нам нужен специальный софт, в котором уже есть этот алгоритм. Чаще всего используют КриптоПРО, реже — ViPNet CSP. С помощью этих программ можно подписать документы и проверить сертификаты на подлинность.
Как узнать пароль сертификата электронной подписи
В данной ситуации может возникнуть две ситуации — сертификат не был установлен на компьютер и нужно узнать пароль от рутокена либо сертификат был установлен и на него был поставлен пароль.
В первом случае, если пароль не менялся, нужно попробовать стандартный пароль — 12345678. Если же была произведена смена пароля, то восстановить его уже никак не получится.
В целях защиты сертификата и данных пользователя от вмешательства третьих лиц у рутокена нет никакого механизма сброса забытого пароля. Поэтому, в данной ситуации остается только приобрести новый носитель с новым ключом.
Если при установке сертификата с систему был установлен пароль, который в дальнейшем был потерян, необходимо выполнить следующие действия:
- На компьютере должна быть установлена «Крипто Про» версии не ниже 3.6. Необходимо перейти в каталог с программой, который находится в папке «Program Files».
- В папке найти файл-программу с именем «csptest» и запустить его.
- В открывшемся окне с клавиатуры ввести команду cd «C:/Program Files/Crypto ProCSP» соблюдая регистр и все знаки.
- На следующем шаге ввести команду csptest -keyset -enum_cont -fqcn –verifycontext Она выведет все контейнеры, которые установлены на компьютер. Необходимо найти требуемый и записать его имя в точности с учетом регистра.
- Ввести в окно команду csptest -passwd -showsaved -container «имя». Где «имя» – это записанное на предыдущем шаге имя контейнера. В ответ будет выведена сервисная информация, в том числе и пароль.
Какую подпись можно проверить самостоятельно?
Самостоятельная проверка подписи нужна, когда участники электронного документооборота (далее — ЭДО) взаимодействуют друг с другом вне информационных систем, например:
- Работодатель получает трудовой договор от физического лица.
- Контрагенты заключают сделку в электронном виде вне системы ЭДО.
- Заказчик принимает котировочные заявки от участников тендера на почту, а не через электронную торговую площадку.
- Банк проверяет подпись инспектора ФНС на электронной выписке из ЕГРЮЛ и т.д.
В этих случаях получателю документа необходимо обратиться к специальным программам и сервисам, в которых есть возможность проверить электронную подпись. Проверить можно подписи, которые базируются на инфраструктуре закрытых и открытых ключей:
Получить электронную подпись
Закрытый ключ используется для создания подписи, а открытый — для проверки. Подробнее о видах подписи по федеральному закону от 06.04.2021 № 63-ФЗ «Об электронной подписи» можно прочитать в отдельной статье.
По своему типу усиленная электронная подпись может быть отсоединенной и присоединенной:
- При создании присоединенной подписи формируется один файл, который содержит и саму подпись, и документ, для которого она была создана. Проверять нужно этот единый файл.
- Отсоединенная подпись формируется в отдельном от подписываемого документа файле с расширением.sig. В этом случае нужно проверять оба документа: файл с электронной подписью и подписанный ею файл.
Успешная проверка подписи подтверждает следующее:
Какие средства проверки подписи использовать, участники ЭДО выбирают по своему усмотрению.
Проверка подписи в веб-сервисах
Контур.Крипто — бесплатный сервис от Удостоверяющего центра СКБ Контур для создания и проверки подписи, шифрования и расшифрования электронных документов. Удобство сервиса в том, что его не нужно скачивать и устанавливать, легко разобраться, как в нем работать. Настройка компьютера для работы с электронной подписью проходит автоматически.
В сервисе можно бесплатно проверить отсоединенную подпись, выпущенную любым удостоверяющим центром. В программе можно работать с файлами любого вида весом до 100 Мб.
Проверка подписи проходит по простому алгоритму:
В результате проверки Контур.Крипто:
- Подтверждает, что подпись соответствует документу и он не был изменен. Укажет владельца подписи, дату подписания, наименование удостоверяющего центра.
- Или не подтверждает подпись. В этом случае он назовет причину, по которой подпись не подтверждена.
Проверить электронную подпись в Контур.Крипто
Промежуточные сертификаты удостоверяющих центров
Промежуточные сертификаты удостоверяющих центров—это сертификаты на
ключи удостоверяющих центров, не являющиеся корневыми. Т.е. это
сертификаты удостоверяющих центров, подписанные на других сертификатах
удостоверяющих центров.
Промежуточные сертификаты могут возникнуть, к примеру:
- Если удостоверяющий центр по какой-то причине (например, окончание
срока действия сертификата) создал новые ключи, выпустил сертификат на
них и подписал его на старом сертификате; - Если ключи удостоверяющего центра заверены на ключах какого-то
другого удостоверяющего центра. Такая схема удобна, например, для
небольших удостоверяющих центров, обслуживающих небольшое количество
абонентов. Такие удостоверяющие центры могут заверить свои ключи на
сертификате крупного, хорошо известного и пользующегося доверием
удостоверяющего центра, корневой сертификат которого установлен у многих
пользователей.
Если в цепочке доверия присутствует промежуточный сертификат
удостоверяющего центра, она оказывается трехзвенной:
Корневой сертификат УЦ—промежуточный сертификат УЦ—сертификат
пользователя.
Более длинные цепочки (с несколькими промежуточными сертификатами) возможны, но встречаются очень редко.
Просмотр сертификатов через certmgr
В операционных системах семейства Windows также имеется встроенный менеджер для работы с установленными сертификатами. Через него можно просмотреть и личные ключи, и сертификаты удостоверяющих центров, партнеров Microsoft (для предоставления привилегий определенным программам).
Где на компьютере найти сертификат цифровой подписи при помощи менеджера? Для этого необходимо:
- открыть меню «Пуск»;
- ввести команду «certmgr.msc» (без кавычек) и нажать клавишу «Enter»;
- в левой части появившегося окна будут вкладки «Личное» и «Корневые сертификаты удостоверяющего центра» — вот там и можно найти все необходимые ключи.
Для запуска менеджера, а также удаления или копирования файлов сертификатов необходимо обладать правами администратора. В противном случае – программа даже не запустится, ссылаясь на недостаточный уровень прав доступа.
Данное приложение также имеет ряд ограничений по работе с шифрованными сертификатами (со специальной кодировкой данных). Поэтому она не всегда корректно отображает все установленные пользовательские цифровые подписи.
Просмотр сертификатов через консоль управления
Это ещё один встроенный в Windows инструмент, позволяющий на компьютере найти ключ ЭЦП.
Для просмотра сертификатов через консоль управления необходимо выполнить:
- запустить командную строку (нажать комбинацию клавиш Win R, ввести «cmd» и нажать клавишу Enter);
- ввести в терминале команду mmc и нажать Enter;
- кликнуть на «Файл» и выбрать «Добавить или удалить оснастку»;
- выбрать «Добавить», затем «Добавить изолированную оснастку»;
- выбрать «Сертификаты».
Затем также можно выбрать просмотр сертификатов по определенной учетной записи, зарегистрированной в Windows. Чтобы таким методом найти ЭЦП на компьютере также нужно обладать правами администратора.
Через MMC (Просмотр сертификатов в консоли управления) также можно добавлять, удалять, копировать контейнеры с электронной подписью (включая сертификат удостоверяющего центра), но далеко не всем такой метод покажется удобным, так как некоторые команды также придется вводить именно через командную строку.
Просмотр сертификатов через криптопро
Как найти сертификат ЭЦП на компьютере через КриптоПРО (программа-дистрибутив, который используется для работы с электронными подписями)? Для этого необходимо:
- открыть меню «Пуск»;
- перейти на вкладку «Все программы», далее – «КриптоПРО»;
- кликнуть на «Сертификаты».
После этого появится диалоговое окно со списком всех установленных сертификатов на жестком диске. Там же можно посмотреть информацию по каждому из них, удалить из системы, скопировать весь контейнер (связка открытого ключа и сертификата удостоверяющего центра – это позволит пользоваться ЭЦП на другом компьютере).
Опять же, для доступа к данному меню необходимо, чтобы у пользователя имелись права администратора (или предоставлена возможность пользоваться программой от администратора ПК). В противном случае – программа выдаст сообщение о невозможности получить доступ к списку установленных в системе сертификатов.
Можно редактировать список сертификатов и непосредственно из программы КриптоПРО (запустить можно из «Панели управления»). Там доступен более широкий функционал для работы с ЭЦП, а также сертификатами удостоверяющих центров.
Просмотр содержимого ключей и сертификатов
Мы можем подробно изучить содержимое всех созданных в OpenSSL файлов, а также при необходимости конвертировать их в другие форматы.
В следующих командах используются тестовые файлы со следующими именами:
Обратите внимание на расширения файлов — они могут отличаться от тех, которые используются в других инструкциях. Например, вместо .key и .crt может использоваться расширение .pem. Расширение файла не имеет особого значения кроме как служить подсказкой пользователю, что именно находится в этом файле. Это же самое касается и имён файлов — вы можете выбирать любые имена.
Все эти файлы являются текстовыми:
cat rootCA.key
Там мы увидим примерно следующее:
-----BEGIN PRIVATE KEY----- MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDJBKkr6XzzAcXD eyDQdvB0SWE2Fl3nqlX/c2RgqMgScXtgidEzOu9ms3Krju5UKLokkQJrZFPMtiIL MuPJFdYjVyfkfnqlZiouBVgJ60s8NQBBI8KnyyAoJCIFdASoW4Kv5C5LT8pX9eRa /huJaRJL5XsFUGnTOLvW2ZLN52iAux9CoZlmH6ZF4nuQpblwN0MHULAhze52VNFT ………………………………………………….. ………………………………………………….. ………………………………………………….. ………………………………………………….. ………………………………………………….. ………………………………………………….. -----END PRIVATE KEY-----
Удостоверяющие центры
Создает (выпускает) сертификаты специальный административный центр,
называемый удостоверяющим центром (УЦ) или центром сертификации (ЦС).
Удостоверяющий центр устанавливает определенные требования к работе
пользователей. Например, удостоверяющий центр определяет максимальный
срок действия сертификатов, совокупность необходимых данных запросе на
сертификат, способы передачи запроса от пользователя в УЦ, способы проверки корректности запросов пользователей и т.д.
Совокупность требований удостоверяющего центра называется регламентом
удостоверяющего центра.
Удостоверяющий центр имеет собственные ключи подписи и подписывает на
них все электронные документы, которые он выпускает.
Удостоверяющий центр выпускает сертификат на собственный открытый ключ.
Такой сертификат называется сертификатом удостоверяющего центра.
Таким образом, каждый пользователь в любой момент может,
воспользовавшись сертификатом удостоверяющего центра, проверить корректность любого сертификата.
Взаимодействие пользователя с удостоверяющим центром происходит следующим образом:
- Пользователь создает ключевую пару (открытый и закрытый ключи).
- Пользователь отправляет в удостоверяющий центр запрос на
сертификат, в который включает открытый ключ и всю необходимую
информацию о себе и о ключах. Набор необходимых сведений определяется
регламентом удостоверяющего центра, но всегда необходимо
указывать имя владельца, назначение ключей, дату создания. - Удостоверяющий центр получает запрос и проверяет его подлинность и
корректность. Как именно это делается, определяется регламентом
удостоверяющего центра. - Если результат проверки запроса положительный, удостоверяющий
центр создает сертификат на открытый ключ, подписывает его, заносит в
свою базу данных и отправляет пользователю. - Пользователь получает сертификат и устанавливает его у себя в
системе.
Удостоверяющий центр и пользователи, чьи сертификаты зарегистрированы в
удостоверяющем центре, вместе составляют криптосеть.
Файлы сертификатов в проводнике
А вот закрытый сертификат ЭЦП не копируется на жесткий диск – он хранится исключительно на защищенном USB-рутокене и используется как раз для генерации открытых ключей (при этом нужно ещё вводить секретный пароль, который предоставляет удостоверяющий центр).
Если же физически скопировать открытый сертификат на другой компьютер, то пользоваться им можно будет лишь в том случае, если там же установлен корневой сертификат удостоверяющего центра, выдавшего ЭЦП. В противном случае – сертификат не пройдет проверку подлинности.
Где ещё на компьютере хранится сертификат электронной подписи? Ещё одна копия, для программного использования, хранится в шифрованном виде в папке Windows, но получить доступ туда или даже скопировать сам файл сертификата не получится – операционная система не предоставит таких прав доступа.
Ещё следует учесть, что для просмотра файлов сертификатов пользователь должен обладать правами администратора. Если же он вошел в систему как «Гость», то к системным папкам на диске С (или другом, где установлена сама система) он не сможет получить доступ.
Сам файл сертификата имеет расширение .cer или .csr (в зависимости от кодировки), занимает буквально несколько килобайт памяти. Точно такие же файлы используются в дистрибутивах Linux, в MacOS – это уже стандартизированный формат электронных подписей.
Часть 1. самоподписанный сертификат
Для начала рассмотрим вариант самоподписанного сертификата корневого уровня.
Для упрощения задачи сгенерируем сертификат, который будет содержать только необходимые параметры:
- Версия сертификата
- Серийный номер
- Алгоритм подписи
- Сведения об издателе
- Дата начала действия сертификата
- Дата окончания действия сертификата
- Сведения о владельце
- Открытый ключ
Сделать это можно с помощью библиотеки Bouncy Castle, следующим образом:
private void button1_Click(object sender, EventArgs e) { var KeyGenerate = new RsaKeyPairGenerator(); KeyGenerate.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024)); AsymmetricCipherKeyPair kp = KeyGenerate.GenerateKeyPair(); var gen = new X509V3CertificateGenerator(); var certName = new X509Name("CN=CA"); var serialNo = new BigInteger("1",10); gen.SetSerialNumber(serialNo); gen.SetSubjectDN(certName); gen.SetIssuerDN(certName); gen.SetNotAfter(DateTime.Now.AddYears(100)); gen.SetNotBefore(DateTime.Now); gen.SetSignatureAlgorithm("SHA1WITHRSA"); gen.SetPublicKey(kp.Public); var myCert = gen.Generate(kp.Private); byte[] result = DotNetUtilities.ToX509Certificate(myCert).Export(X509ContentType.Cert); FileStream fs = new FileStream("D:\test1.crt", FileMode.CreateNew); fs.Write(result, 0, result.Length); fs.Flush(); fs.Close(); }В результате выполнения данной процедуры будет создан стандартный x.509 сертификат, который, будучи открытым с помощью hex-редактора, выглядит вот таким чудесным образом:
30 82 01 8F 30 81 F9 A0 03 02 01 02 02 01 01 30
0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 30 0D
31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 20 17
0D 31 33 30 39 31 35 31 35 33 35 30 32 5A 18 0F
32 31 31 33 30 39 32 32 31 35 33 35 30 32 5A 30
0D 31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 81
9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00
03 81 8D 00 30 81 89 02 81 81 00 8D 80 B5 8E 80
8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B
82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70
C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34
1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4
0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9
C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8
7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60
27 2E D7 56 04 8B 1B 59 64 77 5F 02 03 01 00 01
30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 03
81 81 00 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09
61 F7 00 C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B
3C A9 92 B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3
17 53 E1 BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B
AC C6 FB CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69
5E 20 68 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80
99 5E DD 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3
BB 3E 2B A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18
1B 72 1CТот же самый сертификат, но уже открытый с помощью стандартных средств windows:
Имя сертификата CA
Издатель CA
Версия сертификата 3
Серийный номер 0x1
Недействителен до... 15.09.2021 15:35:00 GMT
Недействителен после... 22.09.2113 15:35:00 GMT
Цифровая подпись (SHA-1) F9 AD 58 B5 50 3D F6 36 5E B8 89 D4 DC C8 5F CC 25 4B 93 A2
Цифровая подпись (SHA-256) 42 02 24 20 4E 8F 3A 3E 31 38 88 E5 C5 E7 C3 03 14 3A A6 52 EA 78 B9 77 42 5B 99 EB 4B BA 23 82
Открытый ключ(1024 битный) Алгоритм открытого ключа rsaEncryption
Модуль
00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E
10: EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08
20: C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8
30: 41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9
40: E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21
50: 7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23
60: 08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B
70: 92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F
Экспонента 01 00 01
Подпись Алгоритм подписи sha1WithRSAEncryption
Подпись
00: 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09 61 F7 00
10: C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B 3C A9 92
20: B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3 17 53 E1
30: BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B AC C6 FB
40: CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69 5E 20 68
50: 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80 99 5E DD
60: 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3 BB 3E 2B
70: A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18 1B 72 1CИмея два этих файла, один с двоичными данными, а другой с описанием сертификата, попробуем разобраться что здесь к чему.
Прежде всего, нужно отметить, что файл *.crt хранит информацию о сертификате в закодированном виде. Для кодирования применяется особый язык, называемый ASN.1.
ASN.1 — стандарт записи, описывающий структуры данных для представления, кодирования, передачи и декодирования данных. Wikipedia
С помощью языка ASN.1 можно описывать сложные структуры, состоящие из данных различных типов. Типичный пример ASN.1-файла выглядит как-то так:
Однако ASN.1 разрабатывался в те светлые времена, когда «640 КБ должно было хватать каждому» и тратить место на такую громоздкую запись не было никакой возможности. Поэтому, в целях экономии места, а также более удобной обработки хранимой в ASN.1-форме информации, был разработан специальный метод кодирования — DER.
DER-кодировка описывается следующим правилом. Первым записывается байт, характеризующий тип данных, затем последовательность байтов хранящих сведения о длине данных и затем уже записываются сами данные.
К примеру, для кодировки целого числа INTEGER 65537 используется следующая форма: 0203 01 00 01.Здесь первый байт 02, определяет тип INTEGER (полную таблицу типов вы можете найти например тут), второй байт 03 показывает длину блока. А следующие за этим байты 01 00 01, являются шестнадцатеричной записью нашего числа 65537.
В нашем случае, для описание простейшего самоподписаного сертификата, достаточно 9 типов данных. Приведем таблицу кодирования для этих типов:
| Наименование типа | Краткое описание | Представление типа в DER-кодировке |
|---|---|---|
| SEQUENCE | Используется для описания структуры данных, состоящей из различных типов. | 30 |
| INTEGER | Целое число. | 02 |
| OBJECT IDENTIFIER | Последовательность целых чисел. | 06 |
| UTCTime | Временной тип, содержит 2 цифры для определения года | 17 |
| GeneralizedTime | Расширенный временной тип, содержит 4 цифры для обозначения года. | 18 |
| SET | Описывает структуру данных разных типов. | 31 |
| UTF8String | Описывает строковые данные. | 0C |
| NULL | Собственно NULL | 05 |
| BIT STRING | Тип для хранения последовательности бит. | 03 |
Зная как кодируется каждый из этих типов, мы можем попытаться распарсить наш *.crt файл.
3082 01 8F3081 F9A0030201 02 0201 01 30
0D0609 2A 86 48 86 F7 0D 01 01 05 0500300D
310B30090603 55 04 03 0C02 43 41 302017
0D 31 33 30 39 31 35 31 35 33 35 30 32 5A 180F
32 31 31 33 30 39 32 32 31 35 33 35 30 32 5A 30
0D310B30090603 55 04 03 0C02 43 41 3081
9F 300D0609 2A 86 48 86 F7 0D 01 01 01 0500
0381 8D 00 3081 890281 81 00 8D 80 B5 8E 80
8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B
82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70
C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34
1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4
0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9
C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8
7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60
27 2E D7 56 04 8B 1B 59 64 77 5F 0203 01 00 01
300D0609 2A 86 48 86 F7 0D 01 01 05 050003
81 81 00 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09
61 F7 00 C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B
3C A9 92 B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3
17 53 E1 BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B
AC C6 FB CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69
5E 20 68 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80
99 5E DD 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3
BB 3E 2B A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18
1B 72 1C
Преобразуя байты-идентификаторы типов и убирая байты описывающие длину блоков получим следующую структуру:
SEQUENCE(3 elem) SEQUENCE(7 elem) [0](1 elem) INTEGER 2 INTEGER 1 SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.5 NULL SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) UTCTime 13-09-15 15:35:02 UTC GeneralizedTime 2113-09-22 15:35:02 UTC SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.1 NULL BIT STRING(1 elem) SEQUENCE(2 elem) INTEGER 00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F INTEGER 65537 SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.5 NULL BIT STRING 00: 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09 61 F7 00 C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B 3C A9 92 B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3 17 53 E1 BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B AC C6 FB CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69 5E 20 68 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80 99 5E DD 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3 BB 3E 2B A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18 1B 72 1CЭто уже более похоже на то, что мы видим при открытии сертификатов в браузере или Windows. Пробежимся по каждому элементу:
- INTEGER 2 — целое число, описывающее версию сертификата. Для сертификатов версии 1 равно 0.
- INTEGER 1 — серийный номер нашего сертификата.
- OBJECT IDENTIFIER 1.2.840.113549.1.1.5 — последовательность, описывающая алгоритм цифровой подписи. Данная последовательность описывает sha1WithRSAEncryption.
- OBJECT IDENTIFIER 2.5.4.3 — служит индикатором того, что следующее поле описывает какое либо сведение об издателе. Последовательность 2.5.4.3, описывается свойство CN(common name) — общепринятое имя.
- UTF8String CA — имя издателя.
- UTCTime 13-09-15 15:35:02 UTC — дата начала действия сертификата.
- GeneralizedTime 2113-09-22 15:35:02 UTC — дата окончания действия сертификата.
- OBJECT IDENTIFIER 2.5.4.3 — описывает тип информации о владельце.
- UTF8String CA — имя владельца.
- OBJECT IDENTIFIER 1.2.840.113549.1.1.1 — характеризует алгоритм ключа, в данном случае rsaEncryption.
- INTEGER 00: — открытый ключ сертификата.
- BIT STRING 00: — подпись сертификата.
Важным моментом, о котором стоит особенно упомянуть являются данные, для которых вычисляется подпись. Интуитивно может показаться, что подписываются все данные идущие до последнего поля BIT STRING, содержащего подпись. Но на самом деле это не так. В стандарте x.
SEQUENCE(7 elem) [0](1 elem) INTEGER 2 INTEGER 1 SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.5 NULL SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) UTCTime 13-09-15 15:35:02 UTC GeneralizedTime 2113-09-22 15:35:02 UTC SEQUENCE(1 elem) SET(1 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 2.5.4.3 UTF8String CA SEQUENCE(2 elem) SEQUENCE(2 elem) OBJECT IDENTIFIER 1.2.840.113549.1.1.1 NULL BIT STRING(1 elem) SEQUENCE(2 elem) INTEGER 00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F INTEGER 65537
Т.о. если перед вами будет стоять задача проверить ЭЦП x.509 сертификата, то для этого сперва необходимо извлечь TBS-сертификат.
Еще одно замечание относится к отпечатку сертификата. Как видите сам сертификат не содержит никаких сведений об отпечатке. Это объясняется тем, что отпечаток представляет собой обычное хеш-значение SHA-1 от всего файла сертификата, со всеми его полями, включая подпись издателя. Поэтому хранить отпечаток не обязательно, можно просто вычислять хеш при каждом просмотре сертификата.
Заключение
Тех усидчивых людей, которые продрались сквозь все эти ASN.1 выражения и шестнадцатеричные наборы данных, я хотел бы поблагодарить за прочтение. Надеюсь вам было хоть немного интересно. И стало чуточку понятнее, что же такое на самом деле X.509 сертификат.
Ну и как всегда немного ссылок для тех, кому хочется больше подробностей.
- RFC5280 — спецификация x.509 сертификата и списка отзывов сертификатов.
- Руководство по выживанию — SSL/TLS и сертификаты X.509
- ASN.1 простыми словами, вариант статьи для хабра
- on-line утилита для декодирования DER-файлов
- Первичный стандарт ITU-T X.509 ( русский перевод). Спасибо ystr за ссылку.
Отзыв сертификата
Существует ряд причин, по которым действие сертификата бывает необходимо
прекратить до окончания его срока действия.
Такими причинами, в частности, могут быть:
- Компрометация соответствующего закрытого ключа. Если несанкционированный доступ к закрытому ключу все же имел место или
обнаружена хотя бы возможность такого доступа, закрытый ключ, а также
парный к нему открытый считаются скомпрометированными. Работать с такими
ключами нельзя. - Замена сертификата (например, в связи с изменением адреса
электронной почты пользователя). - Задержка действия сертификата.
В таких ситуациях удостоверяющий центр отзывает соответствующий
сертификат.
Если владелец ключей считает нужным отзыв имеющегося у него
сертификата, ему необходимо сообщить об этом в удостоверяющий центр.
Особенно это важно при компрометации ключей. Если владельцу ключей
становится известно о факте их компрометации, ему необходимо сообщить о
факте компрометации в удостоверяющий центр как можно скорее.
Удостоверяющий центр отзывает соответствующий сертификат, т.е. заносит
его в так называемый список отзыва сертификатов (CRL — Certificate
Revocation List). Все сертификаты, числящиеся в списке отзыва
сертификатов, недействительны. Список отзыва сертификатов доводится до сведения всех пользователей в соответствии с регламентом удостоверяющего центра.
Владелец отозванного сертификата отправляет в удостоверяющий центр
запрос на новый сертификат. Необходимость создания новых ключей в этом
случае определяется конкретной ситуацией: если старые ключи
скомпрометированы, необходимо создать новые; если речь идет о замене
сертификата вследствие изменения актуальной информации о владельце,
достаточно создать запрос на новый сертификат на имеющиеся ключи.
Для того чтобы быть полностью уверенным в подлинности и корректности
подписи под сообщением, необходимо проверить, не отозван ли сертификат
на ключ, на котором выработана проверяемая подпись, т.е. не включен ли
этот сертификат в список отзыва сертификатов.
Результат такой проверки учитывается при проверке подписи. Т.е. даже
если подпись формально корректна, но сертификат, на котором выработана
подпись, включен в список отзыва сертификатов, то подпись не может считаться корректной.








