Корневой удостоверяющий центр

Корневой удостоверяющий центр (УЦ) используется для выпуска сертификатов только подчиненных УЦ. Подчиненные (выпускающие) УЦ должны выпускать сертификаты для клиентов соответствующих сервисов (VPN, SSH, IMAP и т.п.). Рекомендуется создавать отдельные УЦ для отдельных сервисов. Не рекомендуется без необходимости создавать несколько УЦ на одном персональном компьютере (ПК) или виртуальной машине (ВМ) с полномочиями одного пользователя.
В данном примере, для корневого УЦ устанавливается операционная система (ОС) FreeBSD актуальной версии. Выбор ОС обоснован ее компактностью в ряду полноценных (не lite) unix-дистрибутивов, а также личным интересом автора к данной системе.
Во время установки ОС рекомендуется создать учетную запись пользователя, от имени которого будут выполняться все работы по настройке и эксплуатации УЦ.
После установки необходимо отключить возможность загрузки в режиме Single Mode:
Настройка УЦ
Систему директорий УЦ имеет смысл создавать таким образом, чтобы в случае необходимости описываемые действия могли быть выполнены на единственном ПК при объединении нескольких УЦ.
Примечание
Дальнейшие шаги выполняются от имени пользователя, созданного на этапе установки ОС для исполнения функций оператора УЦ.
Подготовка структуры файлов УЦ
Создадим директории для размещения файлов данных:
cd ~
mkdir -p pki/root-ca/conf pki/root-ca/private pki/root-ca/certs pki/root-ca/db pki/root-ca/crl pki/root-ca/csr
conf- файлы конфигурации УЦ;private- файлы ключей;certs- файлы сертификатов;db- файлы списка сертификатов, серийных номеров и их резервные копии;crl- файлы списков отозванных сертификатов;csr- файлы запросов на выпуск сертификатов.
Создадим файлы базы данных:
Создадим файлы серийных номеров выпускаемых и отзываемых сертификатов и запишем в них начальные значения:
Установим права доступа на структуру директорий только для ответственного пользователя:
Конфигурация корневого УЦ
Создадим файл конфигурации ~/pki/root-ca/conf/root-ca.conf со следующим содержимым:
[ default ]
ca = root-ca
dir = .
[ req ]
default_bits = 2048
encrypt_key = yes
default_md = sha512
utf8 = yes
string_mask = utf8only
prompt = no
distinguished_name = ca_dn
req_extensions = ca_reqext
[ ca_dn ]
countryName = "RU"
stateOrProvinceName = "__________" # регион
localityName = "__________" # город
organizationName = "__________" # организация
organizationalUnitName = "__________" # подразделение
commonName = "__________" # название корневого сертификата
0.domainComponent = "__________" # имя домена первого уровня
1.domainComponent = "__________" # имя домена второго уровня
[ ca_reqext ]
keyUsage = critical,keyCertSign,cRLSign
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
[ ca ]
default_ca = root_ca
[ root_ca ]
certificate = $dir/certs/$ca.crt
private_key = $dir/private/$ca.key
new_certs_dir = $dir/certs
serial = $dir/db/$ca.crt.srl
crlnumber = $dir/db/$ca.crl.srl
database = $dir/db/$ca.db
unique_subject = no
default_days = 3650
default_md = sha512
policy = match_pol
email_in_dn = no
preserve = no
name_opt = ca_default
cert_opt = ca_default
copy_extensions = none
x509_extensions = signing_ca_ext
default_crl_days = 3650
crl_extensions = crl_ext
[ match_pol ]
domainComponent = match
organizationName = match
organizationalUnitName = match
commonName = supplied
countryName = match
stateOrProvinceName = match
localityName = match
emailAddress = optional
[ root_ca_ext ]
keyUsage = critical,keyCertSign,cRLSign
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
[ signing_ca_ext ]
keyUsage = critical,keyCertSign,cRLSign
basicConstraints = critical,CA:true,pathlen:0
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
[ crl_ext ]
authorityKeyIdentifier = keyid:always
Выпуск сертификата корневого УЦ
Важно!
Необходимо помнить о том, что данный сертификат (а также его ключ) являются основой доверия ко всем будущим сертификатам.
Создадим ключ и запрос на выпуск сертификата:
cd ~/pki/root-ca
openssl req -new -config conf/root-ca.conf -out csr/root-ca.csr -keyout private/root-ca.key
Если все выполнено корректно, будут созданы файлы:
- файл ключа
~/pki/root-ca/private/root-ca.key; - файл запроса на выпуск сертификата
~/pki/root-ca/root-ca.csr.
Выпустим самоподписанный сертификат:
cd ~/pki/root-ca
openssl ca -selfsign -config conf/root-ca.conf -in csr/root-ca.csr -out certs/root-ca.crt -extensions root_ca_ext
Если все выполнено корректно, будут созданы или обновлены следующие файлы:
- файл сертификата
~/pki/root-ca/root-ca.crt; - файл сертификата в формате x509
~/pki/root-ca/certs/01.pem; - файл
~/pki/root-ca/db/root-ca.crt.srlбудет содержать серийный номер следующего сертификата (02); - файл резервной копии серийного номера сертификата
~/pki/root-ca/db/root-ca.crt.srl.old; - файл атрибутов
~/pki/root-ca/db/root-ca.db.attrбудер содержать параметрunique_subject = noпозволяющий создаваемым сертификатам иметь одинаковые имена; - в файл базы данных
~/pki/root-ca/db/root-ca.dbбудет добавлена строка с описанием выпущенного сертификата; - файлы резервных копий базы данных и атрибутов
~/pki/root-ca/db/root-ca.db.oldи~/pki/root-ca/db/root-ca.db.attr.old.
Выпуск сертификата выпускающего УЦ
Для выполнения данной операции необходим файл запроса на выпуск сертификата, сгенерированный выпускающим УЦ. Этот файл должен быть размещен в директории ~/pki/root-ca/csr.
Выпустим сертификат:
cd ~/pki/root-ca
openssl ca -config conf/root-ca.conf -in csr/caX.csr -out certs/caX.crt -extensions signing_ca_ext
,где caX - имя файлов для УЦ, для которого выпускаем сертификат.
Выпуск списка отозванных сертификатов
Операция выпуска списка отозванных сертификатов должна выполняться регулярно (например, срок действия такого списка для данной конфигурации корневого УЦ установлен 3650 дней), даже если ни один сертификат не был отозван.
Завершение цикла работы корневого УЦ
После того, как сертификат(ы) выпускающего УЦ выпущены и создан файл списка отозванных сертификатов, полученные файлы:
~/pki/c0/certs/ca1.crt~/pki/c0/certs/root-ca.crt~/pki/c0/crl/root-ca.crl
необходимо скопировать в файловую систему выпускающего УЦ.
Warning
После того, как выполнены все шаги данного руководства, ПК с корневым УЦ настоятельно рекомендуется выключить и включать только для выпуска новых сертификатов новых УЦ или обслуживания действующих.