- Начальные настройки
- Бесплатный code signing для open source от certum
- Как проверяется доверие на практике?
- Настройка apache 2 для использования сертификатов
- Настройка аутентификации клиентов
- Номенклатура сертификатов
- Откуда берутся сертификаты?
- Разворачиваем собственный цс
- Сертификат для переболевших коронавирусом будет действовать год
- Словарный запас
- Сценарий №1 — найти следующего в связке
- Центры сертификации: как они используются
- Эпидемиолог оценил идею увеличить действие сертификата для перенесших covid-19
Начальные настройки
Сперва заполним файл /root/.rnd, который используется как источник начальных случайных значений в генераторе псевдослучайных чисел OpenSSL. Суть использования этого файла описана на сайте OpenSSL. Нам надо заполнить свой файл случайными данными, как вариант — скопировав из /dev/urandom 32768 байт в файл .rnd таким образом:
Далее создадим сертификат для CA:
root@shpc:/opt/simple_CA# openssl req -newkey rsa:4096-keyform PEM -keyout ca.key -x509-days3650-outform PEM -out ca.cer
Опции для сертификата берутся из файла /etc/ssl/openssl.cnf. Сам файл довольно большой, мы не будем приводить здесь его содержимое. В реальности стоит создать свой конфигурационный файл с необходимыми опциями и блоками — и использовать его для генерации сертификатов.
На выходе получим два файла: ключ и сертификат.
Оба файла надо беречь. Если они попадут к злоумышленнику, он сможет использовать их для генерации сертификатов. Посмотреть сертификат можно при помощи этой команды (вывод обрезан для краткости):
root@shpc:/opt/simple_CA# openssl x509 -text-noout-in ca.cer
Далее на основе полученного сертификата (напомним, что это сертификат корневого CA) можно сгенерировать сертификат для сервера. Вначале генерируем закрытый ключ для сервера:
root@shpc:/opt/simple_CA# openssl genrsa -out server.key 4096
Теперь используем этот ключ для генерации запроса на выдачу сертификата (CSR):
root@shpc:/opt/simple_CA# openssl req -new-key server.key -out server.req -sha256
Отметим, что данные, которые вы вводите в поля, должны совпадать со значениями в тех полях, что указывались при создании сертификата корневого сервера. Теперь возьмём корневой сертификат CA и запрос — и сгенерируем на их основе сертификат для сервера:
root@shpc:/opt/simple_CA# openssl x509 -req-in server.req -CA ca.cer -CAkey ca.key -set_serial 100-extensions server -days1460-outform PEM -out server.cer -sha256
Должно получиться 5 файлов.
Файл server.req можно удалить — а при необходимости создать заново. Теперь надо перенастроить веб-сервер для работы с сертификатами.
Бесплатный code signing для open source от certum
Запустив сегодня программу, описанную в
статье
, я увидел следующее предупреждение:
Бросается в глаза необычный префикс,
Open source developer
. Кроме того, несколько дней назад я уже видел точно такой же префикс, с другим именем. Напрашивается вывод, что, скорее всего, существует какая-то программа выдачи подобных сертификатов.
Несложный поиск показал следующее:
Как известно, пренебрегать безопасностью не стоит. (Если кто не в курсе: цифровая подпись файла защищает его от несанкционированных изменений. Сертификат удостоверяет, что автор подписанного файла — это вы, и никто другой.)
В современном мире практически невозможно встретить программу от крупного вендора без цифровой подписи. Все больше моих знакомых начинает обращать внимание на наличие ЦП у запускаемой или устанавливаемой программы, благодаря тому, что Windows выводит эту информацию (см. КДПВ).
На Хабре затрагивали тему подписывания кода несколько раз: общий обзор, советы по упрощению процедуры. Не так давно рассматривался вариант от StartSSL, тем не менее, требующий подтверждения личности class 2 (в терминах StartSSL), уже являющейся платной (в отличие от бесплатной class 1 для доменов).
Сумма в 60-500 долларов — не деньги для хоть сколько-нибудь крупной компании. Но как быть в случае с Open Source? Зачастую подобные проекты (если речь не идет об именах, которые у всех на слуху) не имеют достаточного финансирования либо разрабатываются исключительно на энтузиазме и других нематериальных ценностях.
Для таких случаев можно воспользоваться предложением от польской компании Certum:
Для этого необходимо зарегистрироваться (форма доступна также на русском языке) и отослать на email следующие документы:
Как видим, процедура достаточно простая и не занимает много времени (по заявлениям компании — до 24 часов).
Для сертификатов заявляется следующее (перевел только существенные пункты, полную версию см. на сайте):
- Упрощенная процедура идентификации личности
- Соответствие WebTrustSM/TM
- Корневой сертификат CERTUM входит в список доверенных во всех популярных браузерах и продуктах Microsoft
- Выдача в течение 24 часов после проверки
- Хэш SHA1 (на 04.11.2021). Скорее всего, в ближайшем будущем будет предлагаться SHA2.
- Подпись для расширений .docm, xlsm, .pptm, .xpi, .jar, .war, .ear, exe, .dll, .ocx, .cab, .msi.
- Бесплатные отзыв или перевыпуск
- Возможность хранения ключа на smart card
- Бесплатный time stamp
- Possible internal and external signatures creation
- Среди поддерживаемых продуктов: MS Office 2000 , ToolSign.sh и openSSL for UNIX/Linux, Firefox, Key Manager, Jarsigner and verifier из Java JDK 1.5 , SignTool, SignCode, Visual Studio Express
- Поддержка certificate revocation list (CRL) и Online Certificate Status Protocol (OCSP)
- Срок выдачи: 1 год
- Техподдержка 24h
- Рекомендуемая длина ключа 2048 – 4096 бит, минимальная: RSA/DSA — 2048 бит, EC — 571 бит (NIST K-571 и NIST B-571).
Похоже, что безопасность становится трендом, и появляется все больше некоммерческих предложений в разных сферах. Интересно, что нам предложат следующим?
UPD: сертификат перестал быть бесплатным, текущая стоимость — €14.00 / €17.22 (пока не ясно, на какой срок выдается сертификат)
Тем не менее, это все равно ниже, чем у ближайшего конкурента — StartSSL ($60)
Как проверяется доверие на практике?
Для каждого сертификата в соответствии с его назначением определяется хранилище в системе — туда его можно установить вручную. Например, есть хранилище доверенных сертификатов: если поместить в него сертификат, то система будет доверять ему.
В Windows сертификаты можно просмотреть через оснастку certmgr.msc:
Если поместить сертификат в хранилище «Доверенные корневые центры сертификации», то такому центру система будет доверять. А поскольку это хранилище корневых центров сертификации, система потом будет доверять и всем объектам, которые подписаны этим сертификатом.
В ОС Ubuntu Linux сертификаты хранятся в каталоге /etc/ssl/cetrs. Причём часть из них — ссылки на другой объект:
Настройка apache 2 для использования сертификатов
Переходим в каталог /etc/apache2:
root@shpc:/mnt# cd/etc/apache2/
Создаём каталог для хранения сертификатов:
root@shpc:/etc/apache2# mkdir ssl
Включаем модуль SSL для веб-сервера. Тестирование проводилось на ОС Ubuntu Linux, поэтому модуль достаточно просто включить:
a2enmod headers
Перезапускаем веб-сервер:
root@shpc:/etc/apache2# systemctl restart apache2Аналогично нужно включить поддержку заголовков:
Теперь создадим конфигурационный файл для модуля SSL. Пример содержимого для него можно взять на Syslink.pl. Команды такие:
root@shpc:/mnt# cd /etc/apache2/conf-available root@shpc:/etc/apache2/conf-available# nano ssl-params.conf
Сам файл будет содержать следующие параметры (чтобы было проще работать, мы отключили заголовки Strict-Transport-Securrity, X-Frame-Options и X-Content-Type-Options):
Далее созданный конфиг надо активировать:
root@shpc:/etc/apache2/conf-available# a2enconf ssl-paramsТеперь переходим в каталог /etc/apache2/sites-available:
root@shpc:/etc/apache2/conf-available# cd/etc/apache2/sites-available
И делаем на всякий случай резервные копии всех хранящихся там файлов:
root@shpc:/etc/apache2/sites-available# cp 000-default.conf 000-default.conf.bak root@shpc:/etc/apache2/sites-available# cp default-ssl.conf default-ssl.conf.bak
Теперь ещё раз проверяем подключённые модули headers и SSL:
Далее нам надо перенести созданные сертификаты (сертификат CA и сертификат сервера) в каталог /etc/ssl/certs, а ключ сертификата сервера — в каталог /etc/ssl/private:
root@shpc:/opt/simple_CA# cp ca.cer /etc/ssl/certs/ root@shpc:/opt/simple_CA# cp server.cer /etc/ssl/certs/server.crt root@shpc:/opt/simple_CA# cp server.key /etc/ssl/private/server.key
Далее откроем конфиг сайта (/etc/apache2/sites-available/000-default-ssl.conf) и добавим туда следующие опции:
SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key SSLCACertificateFile /etc/ssl/certs/ca.cer
Теперь перезагружаем веб-сервер:
root@shpc:/etc/apache2# a2ensite default-ssl root@shpc:/etc/apache2/sites-available# service apache2 restart
Проверяем доступность сайта:
Видим, что Firefox не может проверить сертификат сайта. Чтобы смог, надо импортировать цепочку сертификатов, подтверждающих сертификат сервера, в список доверенных. Создадим цепочку:
root@shpc:/opt/simple_CA# openssl crl2pkcs7 -nocrl-certfile ca.cer -certfile server.cer -out serve-and-ca-chain.p7c -outform der
У полученного файла не забываем сменить атрибуты на 555:
root@shpc:/opt/simple_CA# chmod555 serve-and-ca-chain.p7c
Теперь откроем в браузере менеджер сертификатов и импортируем полученную цепочку (кнопка Import):
Далее можно просмотреть сертификаты и настроить доверие — вдруг что-то упущено:
Когда сертификаты добавлены в список доверенных, можно снова зайти на сайт и увидеть, что соединение помечается как доверенное:
Сейчас время настроить аутентификацию для клиентов.
Настройка аутентификации клиентов
Веб-сервер Apache поддерживает аутентификацию клиента. Это значит, что мы можем выписать клиенту сертификат SSL, а сервер сможет его проверить. Если у пользователя не будет сертификата — аутентификация не пройдёт. Для активации такой возможности надо добавить в конфиг default-ssl.conf такие опции:
SSLCACertificateFile /opt/simple_CA/ca.cer SSLVerifyClient require SSLVerifyDepth 2
После этого к сайту сможет подключиться только тот пользователь, сертификат которого:
- установлен в браузере, если клиентом является браузер, — тогда сертификат будет предъявлен при подключении к серверу;
- подписан сертификатом доверенного УЦ.
Сначала сгенерируем сертификат для клиента. Первым делом создаём ключ:
root@shpc:/opt/simple_CA# openssl genrsa -out client.key 4096
Затем на основе ключа сгенерируем CSR:
root@shpc:/opt/simple_CA# openssl req -new-key client.key -out client.req
Теперь на базе запроса сгенерируем сам сертификат:
root@shpc:/opt/simple_CA# openssl req -new-key client.key -out client.req
И импортируем сертификат в формате p12:
root@shpc:/opt/simple_CA# openssl pkcs12 -export-inkey client.key -in client.cer -out client.p12
В итоге у нас должен получиться файл client.p12. Нужно поменять права на файл, иначе сертификат не импортируется:
root@shpc:/opt/simple_CA# chmod555 client.p12
Теперь можно импортировать его в браузер по аналогии с корневыми сертификатами:
После импорта должно получиться примерно так:
После этого перезапускаем веб-сервер и возвращаемся на сайт. Видим окно выбора сертификата того пользователя, которого мы импортировали в браузер:
Номенклатура сертификатов
Давайте рассмотрим, какие сертификаты X.509 встречаются в природе, если рассматривать их по расположению в
пищевой
цепочке доверия.
По степени
крутизны
дороговизны и надежности сертификаты делятся на 3 вида:
DVOVEV
Откуда берутся сертификаты?
Еще совсем недавно было всего 2 способа заполучить X.509 сертификат, но времена меняются и с недавнего времени есть и третий путь.
- Создать свой собственный сертификат и самому же его подписать. Плюсы — это бесплатно, минусы — сертификат будет принят лишь вами и, в лучшем случае, вашей организацией.

- Приобрести сертификат в УЦ. Это будет стоить денег в зависимости от различных его характеристик и возможностей, указанных выше.
- Получить бесплатный сертификат LetsEncrypt, доступны только самые простые DV сертификаты.
Для первого сценария достаточно пары команд и чтобы 2 раза не вставать создадим сертификат с алгоритмом эллиптических кривых. Первым шагом нужно создать закрытый ключ. Считается, что шифрование с алгоритмом эллиптических кривых дает больший выхлоп, если измерять в тактах CPU, либо байтах длины ключа. Поддержка ECC не определена однозначно в TLS < 1.2.
openssl ecparam -name secp521r1 -genkey -param_enc explicit -out private-key.pemДалее, создает CSR — запрос на подписание сертификата.
openssl req -new -sha256 -key private.key -out server.csr -days 730И подписываем.
openssl x509 -req -sha256 -days 365 -in server.csr -signkey private.key -out public.crtРезультат можно посмотреть командой:
openssl x509 -text -noout -in public.crtOpenssl имеет огромное количество опций и команд. Man страница не очень полезна, справочник удобнее использовать так:
openssl -help
openssl x509 -help
openssl s_client -helpРовно то же самое можно сделать с помощью java утилиты keytool.
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048Следует серия вопросов, чтобы было чем запомнить поля owner и issuer
What is your first and last name?
What is the name of your organizational unit?
What is the name of your organization?
What is the name of your City or Locality?
What is the name of your State or Province?
What is the two-letter country code for this unit?
Is CN=Johnnie Walker, OU=Unknown, O=Unknown, L=Moscow, ST=Moscow, C=RU correct?Конвертируем связку ключей из проприетарного формата в PKCS12.
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12Смотрим на результат:
Alias name: selfsigned
Creation date: 20.01.2021
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Johnnie Walker, OU=Unknown, O=Unknown, L=Moscow, ST=Moscow, C=RU
Issuer: CN=Johnnie Walker, OU=Unknown, O=Unknown, L=Moscow, ST=Moscow, C=RU
Serial number: 1f170cb9
Valid from: Sat Jan 20 18:33:42 MSK 2021 until: Tue Jan 15 18:33:42 MSK 2021
Certificate fingerprints:
MD5: B3:E9:92:87:13:71:2D:36:60:AD:B5:1F:24:16:51:05
SHA1: 26:08:39:19:31:53:C5:43:1E:ED:2E:78:36:43:54:9B:EA:D4:EF:9A
SHA256: FD:42:C9:6D:F6:2A:F1:A3:BC:24:EA:34:DC:12:02:69:86:39:F1:FC:1B:64:07:FD:E1:02:57:64:D1:55:02:3D
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 30 95 58 E3 9E 76 1D FB 92 44 9D 95 47 94 E4 97 0.X..v...D..G...
0010: C8 1E F1 92 ....
]
]Значению ObjectId: 2.5.29.14 соответствует определение ASN.1, согласно RFC 3280 оно всегда non-critical. Точно так же можно узнать смысл и возможные значения других ObjectId, которые присутствуют в сертификате X.509.
subjectKeyIdentifier EXTENSION ::= {
SYNTAX SubjectKeyIdentifier
IDENTIFIED BY id-ce-subjectKeyIdentifier
}
SubjectKeyIdentifier ::= KeyIdentifierРазворачиваем собственный цс
Чтобы лучше понять все процессы, лежащие в основе PKI, рассмотрим на практике развёртывание небольшого ЦС на виртуальной машине под управлением Ubuntu 18 (без выхода в глобальную сеть). Мы не будем жёстко придерживаться правил и стандартов выдачи сертификатов — просто разберём работу с ними.
С учетом того, что. все эксперименты мы проводим в виртуальной среде (без выхода в глобальную сеть), мы можем использовать любое доменное имя — например www.simple.org. Однако надо помнить, что в глобальной сети такое имя вполне может быть зарегистрировано за каким-нибудь сайтом.
Сертификат для переболевших коронавирусом будет действовать год
У вас есть интересная информация? Думаете, мы могли бы об этом написать? Нам интересно все. Поделитесь информацией и обязательно оставьте координаты для связи.
Координаты нужны, чтобы связаться с вами для уточнений и подтверждений.
Ваше сообщение попадет к нам напрямую, мы гарантируем вашу конфиденциальность как источника, если вы не попросите об обратном.
Мы не можем гарантировать, что ваше сообщение обязательно станет поводом для публикации, однако обещаем отнестись к информации серьезно и обязательно проверить её.
Словарный запас
Определение X.509 сертификатов есть в архиве ITU-T
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING }
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version MUST be v2 or v3Для того, чтобы досконально понять обозначения и синтаксис, придется читать спеки X.680 редакции 2008 г., где есть полное описание ASN.1. В понятиях ASN.1SEQUENCE обозначает примерно то же самое, что и struct в Си. Это может сбить с толку, ведь по семантике оно должно было соответствовать скорее массиву. И тем не менее.
Стандарт X.690 определяет следующие правила кодирования структур данных, созданных в соответствии с ASN.1: BER (Basic Encoding Rules), CER (Canonical Encoding Rules), DER (Distinguished Encoding Rules). Есть даже XER (XML Encoding Rules), который на практике мне никогда не встречался.
Да, но для чего нужны сертификаты X.509, которые доставляют столько головной боли? Первая и основная функция сертификатов X.509 — служить хранилищем открытого или публичного ключа PKI (public key infrastructure). К этой функции нареканий нет, а вот со второй не все так однозначно.
Вторая функция сертификатов X.509 заключается в том, чтобы предъявитель сего был принят человеком, либо программой в качестве истинного владельца некоего цифрового актива: доменного имени, веб сайта и пр. Это получается по-разному, далеко не все сертификаты имеют высокую ликвидность, если пользоваться финансовой терминологией.
Сценарий №1 — найти следующего в связке
Связка сертификатов — Объединение нескольких X.509 сертификатов в один файл, чаще всего в формате PEM. Связка передается по сети в момент протокола рукопожатия SSL/TLS.
Самый сок начинается, когда имеете дело со связкой сертификатов, a. k. a certificate chain. Часто просматривая лапшу в связке ключей jks непросто понять как найти родительский сертификат, когда там россыпь новых и старых сертификатов на несколько доменных имен.
Центры сертификации: как они используются
Задача центра сертификации — подтверждать подлинность ключей шифрования с помощью сертификатов электронной подписи. Логику работы ЦС, как правило, можно описать тезисом «никто не доверяет друг другу, но все доверяют ЦС».
Допустим, условная сущность Аlice имеет сертификат, подписанный ЦС Comp, а сущность Bob пытается проверить подлинность этого сертификата. Проверка будет успешной, если Bob и Alice доверяют одному и тому же ЦС. Для решения такой проблемы в ОС Alice и ОС Bob установлено множество сертификатов различных ЦС.
Эпидемиолог оценил идею увеличить действие сертификата для перенесших covid-19
Академик РАН, эпидемиолог Вадим Покровский в среду, 24 ноября, прокомментировал предложение вице-премьера РФ Татьяны Голиковой об увеличении срока действия сертификата о вакцинации для переболевших COVID-19 с полугода до года.
«Это, конечно, логично, потому что после перенесенного заболевания получается, что у нас меньше период, так сказать, ожидаемого иммунитета, чем после вакцинации, что довольно странно. Как правило, можно приравнять перенесенное заболевание к вакцинации», — указал он.
Говоря о сроках ревакцинации переболевших COVID-19, Покровской отметил, что рекомендация в настоящий момент пока такая же — через полгода. Однако она может быть в будущем изменена, например, на срок четыре месяца или семь месяцев. В настоящее время этот вопрос изучается экспертами, подчеркнул он.
При этом эпидемиолог рекомендовал всем, в том числе и перенесшим заболевание и вакцинированным, продолжать носить маски и соблюдать эпидемиологические меры. Он отметил, что поведение коронавируса еще не до конца изучено и на данный момент такой вакцины, которая дает 100% защиту, нет.
«Поэтому лучше, конечно, еще подстраховаться — соблюдать дистанцию, носить маски», — заключил он.
Голикова выступила с предложением продлить действие сертификатов для тех, кто перенес COVID-19, с полугода до года ранее в этот же день на совещании президента России Владимира Путина с членами правительства.
Российский лидер, в свою очередь, поддержал данное предложение. Вице-премьер добавила, что после одобрения президентом соответствующего предложения в методические рекомендации Минздрава РФ будут внесены необходимые изменения.
Ранее в ноябре Минздрав РФ утвердил сроки действия QR-кодов для переболевших после прививки. В приказе министерства сказано, что после вакцинации QR-код действителен год, после болезни — полгода. При этом, в случае если у привитого выявляется коронавирус, его цифровой пропуск аннулируется, а после завершения болезни начинает действовать на полгода. Справку о вакцинации, перенесенной болезни или противопоказаниях граждане могут получить по запросу в больнице или в МФЦ. Электронная версия документа будет доступна на портале «Госуслуги».
На фоне ухудшения эпидемиологической ситуации российские власти призывают жителей вакцинироваться, чтобы обезопасить свое здоровье и позаботиться о своих близких. Граждан прививают бесплатно. В стране зарегистрировано пять вакцин от коронавируса: «Спутник V», ставший первой в РФ и мире вакциной от COVID-19, а также «Спутник Лайт», «ЭпиВакКорона», «ЭпиВакКорона-Н» и «КовиВак».
Вся актуальная информация по ситуации с коронавирусом доступна на сайтах стопкоронавирус.рф и доступвсем.рф, а также по хештегу #МыВместе. Телефон горячей линии по вопросам коронавируса: 8 (800) 2000-112.
