Сертификаты X.509 могут быть использованы для создания цифровой электронной подписи, шифрования, а также для удостоверения сторон соединения друг перед другом при использовании защищенных протоколов на основе TLS/SSL, в том числе ESMTPS, HTTPS, IKE, и других.

Реализованная в настоящее время инфраструктура сертификатов X.509 (включая действующие стандарты; поддерживающие последние программы и библиотеки; организации, предоставляющие услуги выдачи сертификатов) не лишена недостатков, но все же широко используется в современном Internet и позволяет решить ряд проблем, свойственных последнему.

В данном разделе мы рассмотрим использование программы certtool(1), более соответствующую стандартам GNU в отношении команднострочного интерфейса, нежели чем предоставляющая схожую функциональность команда openssl(1).

Общие сведения

править

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

С другой стороны, привязка конкретного открытого (опубликованного) ключа к личности его владельца требует участия третьей стороны, называемой удостоверяющим центром (англ. certification authority, CA), открытый ключ которого общеизвестен. Кроме того, предполагается, что владельцы соответствующего закрытого ключа соблюдают особый регламент и ни при каких обстоятельствах не будут использовать данный ключ чтобы скомпрометировать некую третью сторону.

Как правило, удостоверяющие центры предоставляют свои услуги на платной основе. Одним из исключений является центр CAcert, корневой сертификат которого включен в Debian по-умолчанию.

Создание ключей

править

Для создания пары (открытый ключ, секретный ключ), можно использовать опцию --generate-privkey команды certtool(1), например:

$ certtool --generate-privkey --outfile myx509.key 

Получить информацию о ключе можно благодаря опции --key-info той же команды:

$ certtool --key-info < myx509.key 

Отметим, что созданный файл секретного ключа (myx509.key) содержит также и полный набор данных, составляющих открытый ключ.

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

править

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

## Distinguished name (DN) specification
organization  = "CDyne Systems"
unit        = "Network task force"
country     = "US"
state       = "California"
locality    = "Fremont"
cn          = "J. Random Hacker"
uid         = "jrh"
## X.509 v3 extensions
email       = "jrh@example.com"
tls_www_client
signing_key

Создание серверного сертификата отличается, главным образом, использованием поля cn для указания основного полного доменного имени системы (и, возможно, полей dns_name для указания любого количества полных доменных имен, включая и основное), а также использованием флага tls_www_server вместо tls_www_client. Например:

## Distinguished name (DN) specification
organization  = "CDyne Systems"
unit        = "Network task force"
country     = "US"
state       = "California"
locality    = "Fremont"
cn          = "niovoi.cdyne.example"
## X.509 v3 extensions
dns_name    = "niovoi.cdyne.example"
dns_name    = "www.niovoi.cdyne.example"
dns_name    = "dyson.example.net"
email       = "jrh@example.com"
tls_www_server

Предполагая, что один из шаблонов выше внесен в файл cert.cfg, запрос на подпись можно создать следующей командой:

$ certtool --generate-request --template cert.cfg \
      --load-privkey myx509.key --outfile myx509.csr 

Содержимое файла-запроса myx509.csr может быть теперь передано удостоверяющему центру.

См. также

править