Создание инфраструктуры открытого ключа с помощью простого сценариев RSA

от автора

Первый шаг при настройке OpenVPN является создание Инфраструктура открытых ключей (ПКИ). PKI состоит из:

  • Общественный мастер Центр сертификации (Калифорния) сертификат и закрытый ключ.
  • Отдельный открытый сертификат и закрытый ключ пары (далее в качестве свидетельства) для каждого сервера и каждого клиента.

Для облегчения процесса создания сертификата, OpenVPN поставляется с коллекцией RSA ключевые сценарии manangement (основанный на OpenSSL инструмент командной строки) известный как легкая РКА.

Заметка: Только .key файлы необходимо хранить в тайне, .ЭЛТ- и .csr файлы могут быть отправлены через незащищенные каналы, такие как электронная почта открытого текста.

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

Заметка: Сертификаты могут быть созданы на любом компьютере. Для обеспечения максимальной безопасности, генерировать сертификаты на физически защищенной машине отключены от любой сети, и убедитесь, что сгенерированный ca.key секретный ключ резервного копирования и никогда не доступными для всех.
Предупреждение: Убедитесь, что генерируемые файлы резервного копирования, особенно ca.key и ca.crt файлы, так как если вы потеряли не сможете создавать новые, ни отменить любые скомпрометированных сертификатов, что требует генерации нового Центр сертификации (Калифорния) сертификат, недействительности всю инфраструктуру PKI.

Установка простой АСР скрипты

Установите сценарии, выполнив следующие действия:

# pacman -S легко и РКА
# ф -r / USR / доли / простой RSA / корень

Создание сертификатов

Перейдите в каталог, где установлены скрипты.

# кд / корень / легко и РКА

Для того, чтобы обеспечить последовательное использование значений при создании инфраструктуры открытого ключа, Установить значения по умолчанию, которые будут использоваться генерирующими ИПК скриптов. Редактировать / корень / легко и РКА / вары и как минимум установить KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, и параметры KEY_EMAIL (не оставляйте какие-либо из этих параметров заготовки). Изменение параметра KEY_SIZE к 2048 для SSL / TLS использовать 2048bit RSA ключи для аутентификации.

/корень / легко и РКА / вары
# Настройки параметров легко и РКА

# ЗАМЕТКА: Если вы установили от RPM,
# не редактировать этот файл на месте в
# /USR / доли / OpenVPN / легко и РКА --
# вместо, Вы должны скопировать все
# каталог легко и РКА в другое место
# (такие, как / и т.д. / OpenVPN) так что ваш
# правки не будут уничтожены в будущем
# OpenVPN обновление пакета.

# Эта переменная должна указывать на
# верхний уровень легкого и РКА
# дерево.
экспорт EASY_RSA ="`pwd`"

#
# Эта переменная должна указывать на
# запрошенные исполняемые файлы
#
экспорт OpenSSL ="OpenSSL"
экспорт PKCS11TOOL ="PKCS11-инструмент"
экспорт GREP ="Grep"

# Эта переменная должна указывать на
# файл openssl.cnf включен
# с легким и РКА.
экспорт KEY_CONFIG = `$ EASY_RSA / whichopensslcnf $ EASY_RSA`

# Редактировать эту переменную, чтобы указать на
# ваш скоро, чтобы быть созданным ключ
# каталог.
#
# ПРЕДУПРЕЖДЕНИЕ: чисто все будет делать
# ринггитов -rf на этой директории
# поэтому убедитесь, что вы определяете
# это правильно!
экспорт KEY_DIR ="$EASY_RSA / ключи"

# Выпуск гт -rf предупреждение
эхо ПРИМЕЧАНИЕ: Если вы запустите ./clean-all, Я буду делать гт -rf на $ KEY_DIR

# PKCS11 исправления
экспорт PKCS11_MODULE_PATH ="фиктивный"
экспорт PKCS11_PIN ="фиктивный"

# Увеличить это 2048 если вы
# параноидально.  Это замедлит
# вниз производительности переговоров TLS
# а также единовременная DH Parms
# процесс генерации.
экспорт KEY_SIZE = 2048

# Через сколько дней должен истекать ключ корневого центра сертификации?
экспорт CA_EXPIRE = 3650

# Через сколько дней сертификаты должны истечь?
экспорт KEY_EXPIRE = 3650

# Эти значения по умолчанию для полей
# который будет размещен в сертификате.
# Не оставляйте любой из этих полей пустым.


экспорт KEY_COUNTRY ="НАС"
экспорт KEY_PROVINCE ="Калифорния"
экспорт KEY_CITY ="Acme Acres"
экспорт KEY_ORG ="кульминация"
экспорт KEY_EMAIL ="roadrunner@acmecorp.org"
#экспорт KEY_EMAIL=mail@host.domain
экспорт KEY_CN = Acme-CA
экспорт KEY_NAME = Acme-CA
= Экспорт KEY_OU""
экспорт PKCS11_MODULE_PATH = ChangeMe
экспорт PKCS11_PIN = 1234

Экспорт переменных среды.

# источник ./vars

Удалите все созданные ранее сертификаты.

# ./очистка всех
Заметка: Ввод . (точка) при запросе значения, гасит параметр.

Сценарий сборки-ча генерирует Центр сертификации (Калифорния) сертификат.

# ./Встроенный как
Генерирование 2048 битный RSA секретный ключ
..............++++++
...++++++
писать новый закрытый ключ «» ca.key
-----
Вы собираетесь быть предложено ввести информацию, которая будет включена
в ваш запрос сертификата.
То, что вы собираетесь ввести то, что называется отличительным именем или DN.
Есть довольно много полей, но вы можете оставить некоторые пустые
Для некоторых полей будет значение по умолчанию,
Если ввести «», поле будет оставлено пустым.
-----
Имя страны (2 буквенный код) [НАС]:
Государство или название провинции (полное имя) [Калифорния]:
Местность Имя (например, город) [Acme Acres]:
Название организации (например, Компания) [кульминация]:
Организационное Наименование Единицы (например, раздел) []:
Распространенное имя (например, Ваше имя или имя хоста вашего сервера) [Acme-CA]:
имя [Acme-CA]:
Адрес электронной почты [roadrunner@acmecorp.org]:

Сценарий сборки ключ-сервер # ./build-key-server <server name> генерирует сертификат сервера. Убедитесь, что имя сервера (Общее имя при запуске скрипта) является уникальным.

Заметка: Не вводите пароль вызов или название компании, когда скрипт зпросит.
# ./встроенный ключ-сервер Элмер
Генерирование 2048 битный RSA секретный ключ
.....................++++++
.......................................................++++++
писать новый закрытый ключ «» elmer.key
-----
Вы собираетесь быть предложено ввести информацию, которая будет включена
в ваш запрос сертификата.
То, что вы собираетесь ввести то, что называется отличительным именем или DN.
Есть довольно много полей, но вы можете оставить некоторые пустые
Для некоторых полей будет значение по умолчанию,
Если ввести «», поле будет оставлено пустым.
-----
Имя страны (2 буквенный код) [НАС]:
Государство или название провинции (полное имя) [Калифорния]:
Местность Имя (например, город) [Acme Acres]:
Название организации (например, Компания) [кульминация]:
Организационное Наименование Единицы (например, раздел) []:
Распространенное имя (например, Ваше имя или имя хоста вашего сервера) [Элмер]:
имя [Acme-CA]:
Адрес электронной почты [roadrunner@acmecorp.org]:

Пожалуйста, введите следующие «лишние» атрибуты
для отправки с вашим запросом сертификата
Пароль вызов []:
Дополнительное название компании []:
Использование конфигурации из /root/easy-rsa/openssl-1.0.0.cnf
Убедитесь, что запрос соответствует подписи
Подпись хорошо
Отличительное имя субъекта выглядит следующим образом
Имя страны           :PRINTABLE:'НАС'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:«Акме Acres»
Название организации      :PRINTABLE:«Акме»
распространенное имя            :PRINTABLE:«Элмер»
имя                  :PRINTABLE:'Акме-CA'
адрес электронной почты          :IA5String:'Roadrunner@acmecorp.org'
Сертификат не будет сертифицирован до декабря 27 19:11:59 2021 время по Гринвичу (3650 дней)
Подписать сертификат? [г / л]:и

1 снаружи 1 запросы на получение сертификатов сертифицирована, совершить? [г / л]Y
Выпишите базу данных с 1 новые записи
База данных Обновлено

Сценарий сборки-дк генерирует параметры Диффи-Хеллмана .PEM файл требуется сервером.

Заметка: Было бы лучше, чтобы создать новый для каждого сервера, но вы можете использовать один и тот же, если вы хотите.
# ./строить-дк
Генерация параметров DH, 2048 разрядное сейф премьер, генератор 2
Это займет много времени
..+.............................................................................
.
.
.
............+...............+...................................................
..................................................................++*++*

Нарастание ключ скрипта # ./build-key <client name> генерирует сертификат клиента. Убедитесь, что имя клиента (Общее имя при запуске скрипта) является уникальным.

Заметка: Не вводите пароль вызов или название компании, когда скрипт зпросит.
# ./встроенные ключевые ошибки
Генерирование 2048 битный RSA секретный ключ
....++++++
.............................................................++++++
писать новый закрытый ключ «» bugs.key
-----
Вы собираетесь быть предложено ввести информацию, которая будет включена
в ваш запрос сертификата.
То, что вы собираетесь ввести то, что называется отличительным именем или DN.
Есть довольно много полей, но вы можете оставить некоторые пустые
Для некоторых полей будет значение по умолчанию,
Если ввести «», поле будет оставлено пустым.
-----
Имя страны (2 буквенный код) [НАС]:
Государство или название провинции (полное имя) [Калифорния]:
Местность Имя (например, город) [Acme Acres]:
Название организации (например, Компания) [кульминация]:
Организационное Наименование Единицы (например, раздел) []:
Распространенное имя (например, Ваше имя или имя хоста вашего сервера) [ошибки]:
имя [Acme-CA]:
Адрес электронной почты [roadrunner@acmecorp.org]:

Пожалуйста, введите следующие «лишние» атрибуты
для отправки с вашим запросом сертификата
Пароль вызов []:
Дополнительное название компании []:
Использование конфигурации из /root/easy-rsa/openssl-1.0.0.cnf
Убедитесь, что запрос соответствует подписи
Подпись хорошо
Отличительное имя субъекта выглядит следующим образом
Имя страны           :PRINTABLE:'НАС'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:«Акме Acres»
Название организации      :PRINTABLE:«Акме»
распространенное имя            :PRINTABLE:«ошибки»
имя                  :PRINTABLE:'Акме-CA'
адрес электронной почты          :IA5String:'Roadrunner@acmecorp.org'
Сертификат не будет сертифицирован до декабря 27 19:18:27 2021 время по Гринвичу (3650 дней)
Подписать сертификат? [г / л]:и

1 снаружи 1 запросы на получение сертификатов сертифицирована, совершить? [г / л]Y
Выпишите базу данных с 1 новые записи
База данных Обновлено

Генерировать секрет Хэш основе Message Authentication Code (HMAC) запустив: # openvpn --genkey --secret /root/easy-rsa/keys/ta.key

Это будет использоваться для добавления дополнительного HMAC подписи всех SSL / TLS приветственные пакеты. Кроме того любой UDP-пакетов, не имеющий правильную подпись HMAC будет немедленно упала, защита от:

  • Portscanning.
  • DOS атаки на порт OpenVPN UDP.
  • SSL / TLS квитирующего посвящений от неавторизованного машин.
  • Любые возможные уязвимости переполнения буфера в реализации SSL / TLS.

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

Предупреждение: Это удалит все ранее созданные сертификаты, хранящиеся в / корневой / простой / ключей RSA, в том числе Центр сертификации (Калифорния) сертификат.

Преобразование сертификатов в зашифрованном формате .p12

Некоторое программное обеспечение (таких как Android) будет только для чтения VPN сертификаты, которые хранятся в защищенных паролем .p12 файл. Они могут быть получены с помощью следующей команды:

# OpenSSL PKCS12 -export -inkey ключи / bugs.key -в ключи / bugs.crt -certfile ключи / ca.crt отъезда ключи / bugs.p12

Проверка с помощью OpenSSL

Если вам необходимо проверить информацию в сертификате, CSR или Private Key, использовать эти команды. Вы также можете проверьте CSRs и проверки сертификатов с помощью наших инструментов он-лайн.

  • Проверьте запрос на подпись сертификата (КСО)
    OpenSSL REQ -text -noout -verify -in CSR.csr
  • Проверьте закрытый ключ
    OpenSSL RSA -in privateKey.key -проверить
  • Проверить сертификат
    OpenSSL x509 -in certificate.crt -текст -noout
  • Проверить PKCS # 12 файл (.PFX или P12)
    OpenSSL PKCS12 -info -in keyStore.p12