X 509 версія 3. Електронний сертифікат X.509

Формат сертифіката Х.509

Х.509 – це інший дуже поширений формат. Усі сертифікати Х.509 відповідають міжнародному стандарту ITU-T X.509; таким чином (теоретично) сертифікат Х.509, створений для однієї програми, може бути використаний в будь-якому іншому, що підтримує цей стандарт. Насправді, однак, склалася ситуація, що різні компанії створюють власні розширення для Х.509, не всі з яких між собою сумісні.

Будь-який сертифікат вимагає, щоб хтось запевнив взаємозв'язок відкритого ключа та ідентифікує власника ключа інформації. Маючи справу з PGP-сертифікатом, кожен може виступати як завірювач відомостей, що містяться в ньому (за винятком випадків, коли ця можливість навмисно обмежена політикою безпеки). Але у разі сертифікатів Х.509 завірювачем може бути лише Центр сертифікації або хтось спеціально уповноважений ним на цю роль. (Майте на увазі, що PGP-сертифікати також повністю підтримують ієрархічне структурування системи довіри, що використовує ЦС для посвідчення сертифікатів.)

Сертифікат Х.509 - це набір стандартних полів, що містять відомості про користувача або пристрій, та їхній відповідний відкритий ключ. Стардарт Х.509 визначає, які відомості входять у сертифікат і як кодуються (формат даних).

Сертифікат Х.509 містить такі відомості:

Версія Х.509 - вказує, на основі якої версії стандарту Х.509 побудований цей сертифікат, що визначає, яка інформація може міститися в ньому.

Відкритий ключ власника сертифіката - відкритий ключ поряд з ідентифікатором алгоритму (що вказує криптосистему, до якої належить даний ключ) та інша інформація про параметри ключа.

Серійний номер сертифіката - організація-видавець сертифіката зобов'язана надати йому унікальний серійний (порядковий) номер для його розпізнавання серед інших сертифікатів, виданих цією організацією. Ця інформація застосовується у ряді випадків; наприклад, при анулюванні сертифіката, його серійний номер міститься в список анульованих сертифікатів(Certificate Revocation List, CRL).

Унікальний розпізнавець власника ключа (або DN, distinguished name- Унікальне ім'я) - це ім'я має бути унікальним і єдиним у всьому Інтернеті. DN складається з декількох підпунктів і може виглядати приблизно так:

CN=Bob Davis, [email protected], OU=PGP Engineering,

O=PGP Corporation, C=US

(Що означає Зрозуміле ім'я суб'єкта, Електронну пошту, Підрозділ організації, Організацію та Країну відповідно.)

Період дії сертифіката – дата початку дії сертифіката та дата закінчення його дії; вказує на те, коли сертифікат стане недійсним.

Унікальне ім'я видавця – унікальне ім'я організації, яка підписала сертифікат. Як правило, це найменування Центру сертифікації. Використання сертифіката має на увазі довіру організації, яка його підписала. (У випадках з кореневими сертифікатами організація, що видала - цей же ЦС - підписує його сама.)

ЕЦП видавця - електронний підпис, створений закритим ключем організації, що видала сертифікат. Ідентифікатор алгоритму підпису – вказує алгоритм, використаний ЦС для підписання сертифіката.

Існує ряд фундаментальних відмінностей між форматами сертифікатів Х.509 та PGP:

Ви можете особисто створити власний сертифікат PGP;

ви повинні запросити та отримати сертифікат Х.509 від Центру сертифікації; сертифікати Х.509 містять лише одне ім'я власника сертифікату;

сертифікати Х.509 містять лише одну ЕЦП, що підтверджує справжність сертифіката.

Щоб отримати сертифікат Х.509, ви маєте попросити ЦС видати його вам. Ви надаєте системі свій відкритий ключ, чим доводите, що володієте відповідним закритим, а також деякі відомості, що вас ідентифікують. Потім ви електронно підписуєте цю інформацію та відправляєте весь пакет - запит сертифіката - до Центру сертифікації. ЦС виконує певний процес перевірки автентичності наданої інформації і, якщо все сходиться, створює сертифікат, підписує і повертає вам.

Ви можете представити сертифікат Х.509 як звичайний паперовий сертифікат або атестат із приклеєним до нього відкритим ключем. На ньому вказано ваше ім'я, а також деякі відомості про вас плюс підпис видавця сертифіката.

Ймовірно, найбільша користь від сертифікатів Х.509, це їхнє застосування у Веб-браузерах.

З книги Мистецтво програмування для Unix автора Реймонд Ерік Стівен

З книги Windows Script Host для Windows 2000/XP автора Попов Андрій Володимирович

Способи отримання цифрового сертифікатаРозрізняються цифрові сертифікати трьох типів: створені розробником, видані розробнику організацією та отримані від центру сертифікації. Цифровий сертифікат, створений розробником, зазвичай використовують ті користувачі,

З книги Інфраструктури відкритих ключів автора Полянська Ольга Юріївна

Створення власного сертифіката Найбільш швидким способом створення власного цифрового сертифіката є використання програми SelfCert.exe, що входить до складу Microsoft Office 2000/ХР. Запустивши цю утиліту, ми отримаємо діалогове вікно, що дозволяє задати ім'я створюваного

З книги Яндекс для всіх автора Абрамзон М. Г.

Додатки сертифіката Важлива інформація міститься також у додатках сертифіката. Вони дозволяють включати в сертифікат інформацію, яка відсутня в основному змісті, визначати валідність сертифіката та наявність у власника сертифіката прав доступу до цієї або

З книги Вступ до криптографії автора Циммерманн Філіп

Онлайновий протокол статусу сертифіката Онлайновий протокол статусу сертифіката OCSP - відносно простий протокол (типу "запит-відповідь") отримання інформації про анулювання від довіреного суб'єкта, званого OCSP-респондером. OCSP-запит складається з номера версії

Із книги Операційна система UNIX автора Робачевський Андрій М.

Базовий контроль сертифіката Базовий контроль сертифіката виконується всім сертифікатів послідовності і складається з низки перевірок . Перевірки, що використовують кожну з чотирьох груп змінних стану, виконуються, щоб визначити, чи не є

З книги автора

Перевірка терміну дії сертифіката Ця перевірка завершується успішно, якщо поточна дата та час на момент валідації знаходяться в межах терміну дії

З книги автора

Перевірка статусу сертифіката Ця перевірка завершується успішно, якщо видавець не анулював цей сертифікат. Основним засобом перевірки статусу сертифіката є списки САС, але можуть використовуватись інші альтернативні засоби

З книги автора

Перевірка підпису сертифіката Підпис сертифіката може бути перевірена на базі першої групи змінних стану за допомогою відкритого ключа видавця сертифіката, використання коректних параметрів та алгоритму цифрової

З книги автора

Підготовка наступного сертифіката Спершу виконується деяка проста перевірка сертифіката УЦ. Потім оновлюються змінні стани, щоб вони могли відображати значення полів додатків сертифіката. Існує кілька доповнень, що зустрічаються

З книги автора

Завершення обробки сертифіката Коли завершується обробка сертифіката кінцевого суб'єкта, на підставі значень змінних стану встановлюються вихідні значення. Коригування змінних стану верифікації цифрового підпису. У полі інформації про

З книги автора

3.3.1. Формат RSS Читати новини можна по-різному. Найпростіший спосіб – заходити час від часу на сайт та переглядати нові повідомлення. Можна поставити програму, яка підключається до каналу новин і сама отримує заголовки або анотації новин, за

З книги автора

Формат сертифіката Х.509 Х.509 – це інший дуже поширений формат. Усі сертифікати Х.509 відповідають міжнародному стандарту ITU-T X.509; таким чином (теоретично) сертифікат Х.509, створений для однієї програми, може бути використаний в будь-якому іншому,

З книги автора

Анулювання сертифіката Застосування сертифіката допустиме, доки він достовірний. Небезпечно сподіватися, що сертифікат буде захищений і надійний вічно. У більшості організацій і всіх PKI сертифікат має обмежений термін "життя". Це звужує період, коли

З книги автора

Повідомлення про анулювання сертифіката Після анулювання сертифіката дуже важливо сповістити всіх потенційних кореспондентів, що він є недійсним. Найпростіший спосіб оповіщення у середовищі PGP - це розміщення анульованого сертифіката на

З книги автора

Формат ELF Формат ELF має файли кількох типів, які досі ми називали по-різному, наприклад виконуваний файл або об'єктний файл. Проте стандарт ELF розрізняє такі типи:1. Переміщуваний файл (relocatable file), що зберігає інструкції та дані, які можуть бути

Існують два види криптографічних систем: системи із секретним ключем (симетричні) та системи з відкритим ключем (несиметричні). Говорячи досить грубо, але зрозуміло, симетричні системи використовують один і той же ключ для операцій шифрування і розшифровки, а несиметричні системи — різні.

У симетричних системах існує проблема розподілу секретного ключа захищеним способом: обидві сторони, що обмінюються інформацією, повинні знати цей ключ, але ніхто інший цим ключем не повинен володіти.

Несиметричні системи влаштовані так, що в них є два числа:

  • "відкритий ключ користувача A", який використовується для зашифрування повідомлення, призначеного користувачеві A,
  • "закритий ключ користувача A", який використовується цим користувачем для розшифровки спрямованих йому повідомлень.
Ці числа утворюю ключову пару і мають таку хорошу властивість: при досить великій довжині цих чисел дуже складно, знаючи тільки відкритий ключ, відновити значення закритого ключа.

Остання обставина дуже важлива: користувач може публікувати свій відкритий ключ у загальнодоступних місцях, щоб будь-хто міг скористатися і зашифрувати повідомлення для A. Тому проблема розподілу секретного ключа зникає.

Користувач повинен тримати свій закритий ключ у секреті від сторонніх: хочеться, щоб користувач міг розшифровувати повідомлення, які йому були направлені. Більше того, вимога секретності закритого ключа дуже важлива у зв'язку з поняттям цифрового підпису, який обговорюється трохи нижче. Забігаючи вперед, скажемо, що секретність закритого ключа важлива і тому що тільки користувач повинен мати можливість створювати свій цифровий підпис, який залежить від значення закритого ключа.

Досить часто закритий ключ зберігається на носії в зашифрованому вигляді і розшифровується тільки на час виконання якихось дій, що вимагають знання закритого ключа. Це трохи підвищує надійність зберігання закритого ключа, але створює незручність, якщо закритий ключ потрібен якомусь автоматичному сервісу: (щонайменше) при кожному запуску цього сервісу потрібно вводити пароль для розшифровки ключа.

Ще існують смарт-карти, які вміють робити криптографічні операції в собі, віддаючи на вихід тільки результат, але не розкриваючи вміст закритого ключа. Викрасти закритий ключ із правильно реалізованої смарт-картки має бути дуже складно. Закритий ключ, навіть збережений на смарт-карті, може бути захищений паролем. Якщо пароля немає, то будь-хто, хто має смарт-карту у себе в руках, може зробити дії, для яких потрібно знання закритого ключа: значення закритого ключа залишиться секретом, але буде можливо проводити з ним будь-які передбачені дії.

Цифровий підпис

У систем з відкритим ключем є ще одна приємна можливість: користувач може створювати цифровий підпис, який поставлено на цифровий документ, може бути гарантією того, що користувач, а не хтось інший, дійсно підписав цей документ.

Схема концептуально проста: користувач A, використовуючи свій закритий ключ, робить деяку операцію над даними, які хоче підписати і передає результат разом із вихідними даними будь-якому іншому об'єкту. І цей об'єкт, використовуючи лише відкритий ключ користувача A, може легко переконатися, що цифровий підпис вірний.

Ще раз підкреслимо, що умова доступності даного закритого ключа лише його власнику, відіграє дуже важливу роль: якщо воно виконується, то користувач не може відмовитись від свого цифрового підпису. Це називається non-repudiation.

Одне із застосувань цифрового підпису – автентифікація об'єкта. Аутентифікація — це встановлення «особистості» об'єкта. Зрозуміло, що якщо об'єкт може поставити цифровий підпис, цей підпис може бути перевірена, а об'єкт пов'язаний зі своїм відкритим ключем. Останній інгредієнт, якого не вистачає в цій схемі для аутентифікації, - це момент зв'язування відкритого ключа і самого об'єкта: ми повинні точно знати, хто володіє цим відкритим ключем.

Центр, що засвідчує (Certification Authority)

Проблема зв'язування відкритого ключа і об'єкта може вирішуватися різними способами. Один із найпростіших підходів – це скласти список відповідності відкритих ключів та «імен» об'єктів. Як ім'я може бути будь-який ідентифікатор, наприклад доменне ім'я машини, повні ім'я, прізвище та по батькові людини тощо; проблема унікальності імен, яка обов'язково має з'являється - це окрема труднощі, яка зазвичай вирішується адміністративними способами типу ієрархічної системи простору імен та деякою системою вирішення конфліктів імен усередині одного підпростору імен. Тут ця проблема більше не висвітлюватиметься.

Але підхід, заснований на списку відповідностей, має дуже слабке масштабування, оскільки ці списки повинні бути синхронізовані всюди у світі (вірніше, в тій частині світу, де ці списки використовуються).

Тому було введено поняття X.509-сертифіката та центру, що засвідчує. X.509-сертифікат (далі, просто сертифікат) - це конгломерат з відкритого ключа користувача, інформації користувача, імені сертифіката, званого Distungiushed Name (DN) і цифрового підпису засвідчувального центру, яка скріплює всі ці дані один з одним. Тобто з'являється можливість зв'язати відкритий ключ і DN користувача, що може бути шуканим інгредієнтом процесу аутентифікації, якщо як ідентифікатор користувача використовується Distinguished Name його сертифіката. До речі, сертифікат має термін дії, який обмежує термін відповідності, що створюється посвідчувальним центром.

Звичайно, проблема просто переноситься в інше місце — замість підтримки великого списку відповідності ми тепер маємо тримати значно менший список відкритих ключів центрів, що засвідчують. При цьому ключу центру, що засвідчує, виявляється досить велика довіра: засвідчуючий центр підтверджує зв'язок тисяч імен користувача з відповідними відкритими ключами.

Навіщо потрібна автентифікація? Одного шифрування недостатньо?

Ну, по-перше, аутентифікація цінна сама по собі: комп'ютерним системам потрібно аутентифікувати своїх користувачів, щоб потім вирішувати питання авторизації їх доступу до різних ресурсів.

Але якщо ви берете відкритий ключ якогось користувача і хочете надіслати йому зашифроване повідомлення, то вам швидше за все захочеться переконатися, що ви шифруєте повідомлення правильним відкритим ключем, особливо якщо ви берете цей ключ із загальнодоступних джерел. Адже атакуючий може помістити свій відкритий ключ, але вказати, що ключ належить вашому адресату. І якщо ви не аутентифікуєте відкритий ключ, атакуючий, перехопивши ваше зашифроване повідомлення, зможе його без проблем розшифрувати.

Тобто введення посвідчувального центру дозволяє нам аутентифікувати об'єкт, який володіє цим сертифікатом. Звичайно, перед цим ми повинні довіритися відкритого ключа центру, що засвідчує. Це має на увазі дві речі:

  1. довіра засвідчувальному центру взагалі, тобто довіра його репутації,
  2. впевненість у тому, що той відкритий ключ, який до вас потрапив, дійсно є відкритим ключем цього центру, що засвідчує.
З останнього пункту видно, що знову постає проблема аутентифікації відкритих ключів центрів, що засвідчують. Але оскільки цих центрів істотно менше, ніж користувачів, можна вдаватися до адміністративних заходів:
  • дзвонити в центр, що засвідчує, і звіряти вміст відкритого ключа по телефону,
  • приїжджати в сам посвідчувальний центр і забирати відкритий ключ на якомусь носії,
  • довірятися тим відкритим ключам центрів, що засвідчують, які вже присутні у складі якогось програмного пакету
  • і безліч інших способів, які ще незручніші вже названих;))

Proxy-сертифікати

Відмінно: тепер у нас є довірені центри, що їх засвідчують, їх відкриті ключі, сертифікати користувачів і їх закриті ключі. Ми можемо шифрувати повідомлення і може створювати цифрові підписи, відмовитися від виробництва яких досить складно.

Що ще? У багатокомпонентних системах дуже зручно те, що називається Single Sign-On - можливість аутентифікуватися вручну лише один раз, а решта операцій аутентифікації будуть проводитися автоматично. Зазвичай, це актуально в системах, які спочатку вас аутентифікують, а потім система починає виконувати дії від вашої особи, наприклад, отримувати дані, запускати завдання, публікувати їх результати і т.д. Це називається делегуванням.

Делегування, засноване на proxy-сертифікатах, функціонує так: після взаємної автентифікації користувача та сервісу, який надалі працюватиме від імені користувача, сервіс створює нову ключову пару та відправляє відкритий ключ на підпис користувачеві. Користувач підписує цей відкритий ключ так само, як це робить центр посвідчення, але при цьому використовується закритий ключ користувача. Сертифікат, що з'явився в результаті, і називається proxy-сертифікатом.

Після цього сервіс, який виступає від імені користувача, може автентифікуватися, використовуючи свій (лише створений) закритий ключ і сертифікат, підписаний користувачем. Процес аутентифікації відбувається приблизно так.

  1. Перевіряється підпис, створений сервісом. При цьому використовується відкритий ключ, який було передано разом із підписом.
  2. Аутентифікується відкритий ключ, яким було перевірено підпис. Спочатку перевіряється підпис на proxy-сертифікаті, який був створений за допомогою закритого ключа користувача. Це робиться за допомогою відкритого ключа користувача.
  3. Так само аутентифікується відкритий ключ самого користувача, але тут вже використовуються дані про центр, що засвідчує.
В результаті цього будується те, що називається ланцюжком довіри (chain of trust), який починається на якомусь цифровому підписі і закінчується на цифровому підписі центру, що засвідчує.

За допомогою такого ж механізму, сервіс, якому спочатку було видано proxy-сертифікат, може підписати ще один proxy-сертифікат, делегувавши повноваження користувача по ланцюжку іншого сервісу. Саме так і реалізується Single Sign-On.

  • X.509 Style Guide, написаний Пітером Гутманом. Там багато технічних деталей, але декому почитати варто.

Формат та структура сертифіката ключа підпису

Детальний опис структури сертифіката, включаючи перелік обмежень використання СКП та порядок використання полів кваліфікованого сертифікату ЕП, виданого УЦ ФК (далі – Опис СКП), затверджується УЦ ФК у вигляді окремого документа, що є невід'ємною частиною цього Регламенту.

Сертифікат ключа перевірки електронного підписув електронній формі являє собою електронний документ, що має структуру, що відповідає стандарту Міжнародного союзу телекомунікацій ITU-T X.509 версії 3 та рекомендацій IETF (Internet Engineering Task Force) RFC 3280 та 5280 та представлений у кодуванні Base64.

Структура сертифікатів ключів підпису, що виготовляються УЦ, визначається такою таблицею:

сертифіката » у вигляді деревоподібної структуриз можливістю... Підпис запитів на видання сертифікатівключівпідписи». 4. Для переходу на... Ідентифікатор ключа». «Ім'я По батькові» – ім'я та по батькові власника сертифікатав форматі « ...
  • Керівництво адміністратора (2)

    Керівництво

    Системами. «Підпис запитів на видання сертифікатів ключів підписи» – дозволяє керівнику підписувати передані до ТОФК... Структура файлу ЕЦПФормування ЕЦП відбувається з використанням криптопровайдера. КриптоПро CSP», версія 2.0 с форматом ...

  • Назва

    Опис

    Заявник

    Організація-заявник

    Базові поля сертифікату

    Унікальний номер

    Унікальний номер сертифікату

    SignatureAlgorithm

    Алгоритм підпису

    1.2.643.2.2.3 (ГОСТ Р 34.11-2001, ГОСТ Р 34.10-2001)

    Видавець сертифікату

    Validity Period

    Термін дії сертифіката

    Дійсно з: дд.мм.гггг чч:мм:сс GMT

    Дійсно: дд.мм.гггг чч:мм:сс GMT

    Власник сертифікату

    CN = Прізвище, Ім'я, По батькові;

    CN = Назва організації

    SN=Прізвище;

    SN=Прізвище;

    GN=Ім'я, По батькові;

    GN=Ім'я, По батькові;

    О = найменування Організації-заявника;

    О = Найменування автоматизованої системи/Служби/Сервісу/ /Сервера Організації заявника для використання якими видано сертифікат.;

    OU = Структурний підрозділ;

    T = Посада;

    T = Посада;

    L = Найменування населеного пункту;

    STREET = Назва вулиці, номер будинку, корпусу, будови, квартири, приміщення;

    S = суб'єкт федерації;

    S = суб'єкт федерації;

    E = EMail = Адреса електронної поштиВласника СКП

    E = EMail = Адреса електронної пошти служби експлуатації автоматизованої системи

    1.2.643.100.1 = OGRN = 00000000000000

    1.2.643.3.131.1.1 = INN = 000000000000

    1.2.643.100.3 = SNILS = 00000000000

    Subject Alternative Name

    Додаткові відомості про власника сертифіката

    Розширення (детальний опис представлено в Таблиці 3 - Опис СКП)

    Відкритий ключ

    Відкритий ключ (алгоритм підпису)

    Issuer Signature Algorithm

    Алгоритм підпису видавця сертифіката

    ГОСТ Р 34.11/34.10-2001

    ЕЦП видавця сертифіката

    Підпис видавця відповідно до ГОСТ Р 34.11/34.10-2001

    Розширення сертифікату

    Private Key Validity Period

    Термін дії закритого ключа, що відповідає сертифікату

    Дійсно з (notBefore): дд.мм.гггг чч:мм:сс GMT

    Дійсно (notAfter): дд.мм.гггг чч:мм:сс GMT

    Використання ключа

    Розширення (детальний опис представлений у Таблиці 3, Таблиці 4 – Опис СКП)

    Extended Key Usage

    Покращений ключ

    Розширення (детальний опис представлено в Таблиці 3 - Опис СКП)

    Application Policy

    Політика застосування

    Не застосовується

    Certificate Policies

    Політики сертифікатів

    Набір областей використання ключів та сертифікатів із переліку областей використання, зареєстрованих у засвідчувальному центрі (детальний опис наведено в Таблиці 3)

    Subject Key Idendifier

    Ідентифікатор ключа Власника СКП

    Розширення (детальний опис наведено в Таблиці 3 – Опис СКП)

    Authority Key Identifier

    Ідентифікатор ключа видавця сертифіката

    Ідентифікатор закритого ключа Уповноваженої особиПосвідчувального центру, на якому підписано цей сертифікат (детальний опис представлений у Таблиці 3 – Опис СКП)

    CRL Distribution Point

    Точка розповсюдження списку відкликаних сертифікатів

    Безліч точок розповсюдження списків анульованих сертифікатів у вигляді URL (детальний опис представлений у Таблиці 3 – Опис СКП).

    Authority Information Access

    Адреса Служби актуальних статусів сертифікатів

    URL-адреса веб-програм Служби актуальних статусів сертифікатів. Заноситься до сертифікатів, статус яких може бути встановлений за протоколом OCSP (детальний опис представлений у Таблиці 3 – Опис СКП).

    Common Name або CN використовується в SSL Certificates. CN is used to define the name server which will be used for secure SSL connection. Зазвичай цей SSL certificate використовується для надійного зв'язку між HTTP/S-сервером і клієнтом браузера як Chrome, Explorer, Firefox.

    Common Name використовується як спеціаліст з host or server identity. Коли клієнт намагається підключитися до remote server як HTTP-сервер це буде першим отримати SSL certificate of this server. Коли compare the Host name або domain name it want to connect with the Name Name, що надається в SSL certificate. Якщо вони самі використовуються, буде використовувати SSL certificate для підключення до екрана.

    Common name technicalle represented as commonName field в X.509 certificate specification. X.509 specification is used в SSL certificates which is the same.

    We can formulate Command Name like below.

    Common Name = Domain Name + Host Name

    Common Name = Domain Name + Host Name

    Ви можете використовувати наступний домашній і host names as Common Name.

    сайт www.сайт *.сайт

    poftut. com

    www. poftut. com

    *. poftut. com

    Fully Qualified Domain Name (FQDN)

    Fully Qualified Domain Name або FQDN використовується з Command Name interchangeable. Fully qualified name is used to define the host name in a strict manner. Більше details про FQDN може бути зроблено в наступному візерунку.

    Organization Name

    Organization name може бути сприйнятою з Common Name. Організація Name is the name of the organization where the IT infrastrure belongs. Organization name shouldn't be used for common name, який буде створювати security problems.

    OS: Linux Debian/Ubuntu.
    Application: OpenSSL, Nginx, Apache2.

    Тут найпростіша шпаргалка процедури підготовки до придбання SSL/TLS-сертифіката, перевірки його коректності та застосування у web-сервісі, розширена деякими поясненнями.

    Генеруємо закритий та відкритий ключі.

    Роботи з компонентами сертифіката дуже бажано проводити в місці, закритому від сторонніх доступу:

    $ mkdir -p ./make-cert


    Насамперед необхідно створити "закритий" (він же "приватний") і "відкритий" (він же "публічний") RSA-ключі шифрування, які надалі будуть використовуватися при створенні решти всіх компонентів сертифіката і підтвердження справжності такого на стороні web-сервера :

    $ cd ./make-cert
    $ openssl genrsa -des3 -out ./example.net.key 2048


    Мішанина символів, яку ми бачимо в текстовому файлі ключів насправді є контейнером обфусцованого набору блоків згенерованих відповідно до алгоритму RSA унікальних шифрів, і один з цих блоків - "modulus" - є "відкритим" ключем зв'язування асиметричного шифрування, що використовується у всіх компоненти сертифіката. Весь інший вміст - "закритий" ключ.


    Для ознайомлення з вмістом блоків контейнера ключів його код можна розкрити у більш структурованому вигляді:

    $ openssl rsa -noout -text -in ./example.net.key


    Ключ (закритий) шифрування за визначенням є найтаємнішим, що є в компонентах SSL-сертифіката - тому за умовчанням він захищається паролем. Обов'язково запам'ятовуємо введений на запит утиліти генерації пароль, він нам знадобиться.

    Треба відзначити, що на практиці, коли SSL-сертфікат застосовується лише для перекладу на HTTPS ряду сайтів, більшість воліє не возитися з запароленим контейнером ключів, а одразу звільняє його від цього захисту, створюючи поруч ще один - "безпарольний":

    $ cd ./make-cert
    $ openssl rsa -in ./example.net.key -out ./example.net.key.decrypt


    Створюємо запит на випуск сертифіката X.509 (CSR).

    Сама по собі підсистема захисту потоку трафіку за допомогою SSL/TLS зазвичай реалізується на сесійних симетричних ключах, що виробляються web-сервером і браузером клієнта при первинному узгодженні з'єднання, і якісь спеціальні встановлені ключі шифрування для цього не потрібні (хоча і полегшують процедуру погодження -key, наприклад). А сертифікат (стандарту X.509), набір компонентів якого ми тут поетапно формуємо, призначений для свого роду підтвердження справжності web-ресурсу в інтернет-інфраструктурі, де умовно довірений центр сертифікації гарантує зв'язок зазначених у сертифікаті "відкритого" ключа та опису ресурсу за допомогою електронної підпису такого вмісту.

    Для передачі центру сертифікації нашого "публічного" ключа (не всього вмісту "приватного" ключа, а лише його блоку "modulus"!) та відомостей про ресурс, справжність якого ми підтверджуємо, призначений спеціальний CSR-контейнер (Certificate Signing Request). Створюємо його, вказуючи як джерело "відкритого" ключа контейнер таких:

    $ cd ./make-cert
    $ openssl req -new -key ./example.net.key -out ./example.net.csr


    У процесі необхідно вказати дані про власника ресурсу, для якого запитується сертифікат, такі як:

    "Country Name" - двосимвольний код країни згідно з ISO-3166 (RU - для Росії);
    "State or Province Name" - назва області чи регіону;
    "Locality Name" - назва міста чи населеного пункту;
    "Organization Name" – назва організації;
    "Organizational Unit Name" – назва підрозділу (необов'язкове поле);
    "Common Name" - повністю певне доменне ім'я ресурсу (FQDN), для якого запитується сертифікат;
    "Email Address" - контактна електронна адреса адміністратора доменного імені (необов'язкове поле);
    "A challenge password" - (необов'язкове поле, що не заповнюється);
    "An optional company name" - альтернативне ім'я компанії (необов'язкове поле не заповнюється).


    Звертаю увагу, що якщо дія сертифіката повинна поширюватися на піддомени ресурсу, що посвідчується, то FQDN у полі "Common Name" потрібно доповнити маскою "*." ("*.example.net" - наприклад).

    Ті, хто цікавиться, можуть подивитися, що приховано в коді CSR-контейнера:

    $ openssl req -noout -text -in ./example.net.csr


    CSR-файл "example.net.csr" відправляємо в центр, що засвідчує, у якого ми купуємо сертифікат.

    Придбання сертифіката SSL/TLS (X.509).

    Нюанси вибору постачальника сертифіката, процедури оформлення замовлення та оплати тут не розглядаються, це не є технічним питанням. Один з важливих моментів - не пропустити вибір між сертифікатом, призначеним для одного домену і "wildcard", що покриває своїми гарантіями всі піддомени наступного рівня.

    Генерування самопідписаного сертифіката X.509 (опціонально).

    Як варіант, для використання виключно в локальній мережі, можна створити необхідний сертифікат самостійно, підписавши його своїм "закритим" ключем замість довіреного центрусертифікації - так званий "self-signed" (самопідписаний):

    $ cd ./make-cert
    $ openssl x509 -req -days 1095 -in ./example.net.csr -signkey ./example.net.key -out ./example.net.crt


    В результаті роботи вищенаведеної команди на додаток до наявних компонент ми отримаємо файл "example.net.crt" саморобного сертифіката, справжність якого не можна перевірити в інтернет інфраструктурі центрів сертифікації, хоча функціонально він нормальний і застосовний.

    Перевірка коректності сертифікатів та ключів.

    В отриманому SSL/TLS-сертифікаті зафіксована як мінімум така інформація:

    Версія сертифікату;
    Серійний номер сертифікату;
    Алгоритм підпису;
    Повне (унікальне) ім'я власника сертифікату;
    Відкритий ключ власника сертифіката;
    Дата видачі сертифіката;
    Дата закінчення дії сертифіката;
    Повне (унікальне) ім'я центру сертифікації;
    Цифровий підпис видавця.


    Особисто я завжди перевіряю вірність зазначених у сертифікаті даних, декодуючи та переглядаючи його вміст за допомогою наступної команди:

    $ cd ./make-cert
    $ openssl x509 -noout -text -in ./example.net.crt


    На практиці часто трапляється так, що некомпетентні клієнти чи колеги надають для застосування безпосередньо у web-сервісах переплутані сертифікати та ключі, які не пов'язані між собою. Спроба застосування таких у web-сервері викликає помилку на кшталт "x509 key value mismatch".

    Найпростіший спосіб перевірки коректності зв'язки "приватного" ключа, CSR-запиту та фінального X.509-сертифіката полягає у звірці контрольної суми "публічного" ключа (блоку "modulus"), що міститься у всіх цих контейнерах:

    $openssl rsa -noout-modulus-in./example.net.key | openssl md5
    $openssl req-noout-modulus-in./example.net.csr | openssl md5
    $openssl x509 -noout-modulus-in./example.net.crt | openssl md5


    Рядок MD5-хеша короткий, і виявлення відмінностей між ними не складе труднощів.

    Формуємо типовий набір файлів сертифікатів та ключів.

    Зазвичай центри сертифікації надають не тільки сертифікат, що запитується, а ще й додатковий набір проміжних сертифікатів (самого центру, його вищого вузла, і так аж до кореневого вузла).

    Загалом, у процесі в нас може накопичитися кілька файлів, які я маю відповідно до їх функціоналу, приблизно так:

    "example.net.key" - контейнер із "закритим" та "відкритим" ключами (захищений паролем);
    "example.net.key.decrypt" - незахищений паролем контейнер із "закритим" та "відкритим" ключами;
    "example.net.csr" - CSR-запит, який використовувався під час замовлення сертифіката;
    "example.net.crt" – безпосередньо наш X.509-сертифікат;
    "intermediate.crt" - сертифікат (або ланцюжок таких) центру сертифікації;
    "root.crt" - сертифікат кореневого центрувід якого починається ланцюг довіри.


    Проміжні сертифікати нам надані не лише для ознайомлення – ними бажано доповнити призначений для застосування у web-сервісі контейнер із нашим сертифікатом, сформувавши там ланцюжок аж до загальновідомого довіреного вузла. Робиться це найпростішим додаванням текстових кодів у кінець файлу:

    $ cd ./make-cert
    $cat./example.net.crt >>./example.net-chain.crt
    $ сat ./intermediate.crt >> ./example.net-chain.crt
    $cat./root.crt >>./example.net-chain.crt


    Звертаю увагу, що наш сертифікат обов'язково повинен бути на початку ланцюжка, розміщеного в контейнері - зазвичай web-сервер звіряє доданий "закритий" ключ з "відкритим" у першому сертифікаті, що потрапив у процесі читання вмісту контейнера.

    У Linux для сертифікатів і ключів шифрування вже передбачені місця у файловій системі. Розподіляємо файли та захищаємо їх від доступу сторонніх:

    # mkdir -p /etc/ssl/certs
    # mkdir -p /etc/ssl/private

    # cp ./example.net-chain.crt /etc/ssl/certs/
    # cp ./example.net.key.decrypt /etc/ssl/private/

    # chown -R root:root /etc/ssl
    # chmod -R o-rwx /etc/ssl


    SSL-сертифікат у web-сервері Nginx.

    У найпростішому випадку застосування SSL-сертифіката в web-сервері "Nginx" реалізується приблизно так:

    # vi /etc/nginx/sites-enabled/example.net.conf


    ....

    server (
    listen 443 ssl;
    server_name example.net;
    ....


    ssl on;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers AES256-SHA:RC4:HIGH:!aNULL:!MD5:!kEDH;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:30m;
    ssl_session_timeout 1h;


    ssl_certificate /etc/ssl/certs/example.net-chain.crt;
    ssl_certificate_key /etc/ssl/private/example.net.key.decrypt;
    ....
    }
    ....


    SSL-сертифікат у веб-сервері Apache.

    У web-сервері "Apache" SSL-сертифікат застосовується приблизно так:

    # vi /etc/apache2/sites-enabled/example.net.conf


    ....
    # Опис робочого оточення доступного за HTTPS web-сайтом

    ServerName example.net
    ....


    # Рекомендовані узагальнені налаштування протоколу
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLHonorCipherOrder on
    SSLCipherSuite HIGH:MEDIUM:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!aECDH:+SHA1:+MD5:+HIGH:+MEDIUM
    SSLOptions +StrictRequire
    SSLCompression off

    # Файли сертифікатів та ключів
    SSLCertificateFile /etc/ssl/certs/example.net-chain.crt
    SSLCertificateKeyFile /etc/ssl/certs/example.net.key.decrypt

    ....