Сетевые средства Debian/X.509
Сертификаты 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
может быть теперь передано удостоверяющему центру.