Вверх: Памятки [Содержание][Указатель]
Здесь вкратце описывается, как создать сертификат сервера. Эта процедура действительно использовалась для получения сертификата, который использовался на реальном сервере, из удостоверяющего центра. Она проверялась только на этом удостоверяющем центре, но с другими центрами тоже проблем быть не должно.
Начнем с создания запроса на подпись сертификата X.509. Файл настроек не нужен, можно просто ввести:
$ gpgsm --generate-key >example.com.cert-req.pem Выберите тип ключа: (1) RSA (2) Имеющийся ключ (3) Имеющийся на карте ключ Ваш выбор? 1 |
Я выбрал создание ключа RSA. Другой вариант — воспользоваться уже существующим ключом, выбрав 2 и введя так называемый код ключа. Этот код вам покажет команда ‘gpgsm --dump-secret-key идентификатор пользователя’. Если выбрать 3, программа выведет другое меню для создания сертификата непосредственно из ключа, хранящегося на электронной карте.
Продолжим:
Какой размер ключа Вам необходим? (2048) Запрошенный размер ключа - 2048 бит |
Нажав «Enter», вы создадите обычный ключ RSA размером 2048 бит. Ключи меньшей длины для нынешнего Интернета слишком слабы. Если выбрать более длинный (более сильный) ключ, у сервера будет больше работы.
Возможные действия для ключа RSA: (1) подпись, шифрование (2) подпись (3) шифрование Ваш выбор? 1 |
Если выбрать «подпись», ключ можно будет применять в механизмах обмена ключами Диффи-Хеллмана (DHE и ECDHE) в TLS, что предпочтительно, поскольку предлагает секретность в прямом направлении. Если выбрать «шифрование», ключ можно будет применять для механизмов обмена ключами RSA, которые до сих пор кое-где обычны. Если выбрать и то, и другое, можно будет пользоваться всеми механизмами обмена.
Теперь введем данные:
Введите имя субъекта X.509: CN=example.com |
Это самая важная величина для сертификата сервера. Введите здесь каноническое имя своей серверной машины. Имена других виртуальных серверов можно добавить позднее.
Введите адреса электронной почты (завершите пустой строкой): > |
В сертификате TLS эти адреса не нужны, и удостоверяющий центр все равно проигнорировал бы их. Просто нажмите «Enter».
Если вы хотели бы создать клиентский сертификат для шифрования электронной почты, здесь можно было бы ввести свой адрес (напр., yi@test.mil). Можно вводить сколько угодно адресов, однако удостоверяющий центр может их не принять или отклонить весь запрос.
Введите имена DNS (необязательно; завершите пустой строкой): > example.com > www.example.com > |
Здесь я ввел имена служб, которые в действительности предоставляет машина. Среди них почти всегда должно быть и каноническое имя. Браузеры будут принимать сертификат для любого из этих имен. Как обычно, удостоверяющий центр должен одобрить все эти имена.
Введите URI: (необязательно; завершите пустой строкой): > |
Можно вводить произвольные URI; для сертификата сервера они не имеют смысла.
Создать самозаверенный сертификат? (y/N) |
Поскольку мы создаем запрос на подпись сертификата, а не полный сертификат, здесь мы отвечаем отрицательно.
Итак, мы ввели все нужные данные, и программа gpgsm
покажет, что
она собрала, и спросит, нужно ли создавать запрос на подпись сертификата:
Используются параметры: Key-Type: RSA Key-Length: 2048 Key-Usage: sign, encrypt Name-DN: CN=example.com Name-DNS: example.com Name-DNS: www.example.com Продолжить создание? (y/N) y |
Теперь gpgsm
приступит к созданию запроса. Поскольку это сопряжено
с созданием ключа RSA, это может занять некоторое время. За это время вас
трижды попросят ввести фразу-пароль для защиты создаваемого секретного ключа
в вашей системе. Будет появляться окно, в котором вас будут просить ввести
его. Первые два запроса — для новой фразы-пароля и повторения его; третий
нужен, чтобы создать запрос подписи сертификата.
По завершении вы должны увидеть сообщение:
Готово. Данный запрос теперь следует передать в удостоверяющий центр. |
Теперь заглянем в созданный запрос на подпись сертификата:
$ cat example.com.cert-req.pem -----BEGIN CERTIFICATE REQUEST----- MIIClTCCAX0CAQAwFjEUMBIGA1UEAxMLZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQDP1QEcbTvOLLCX4gAoOzH9AW7jNOMj7OSOL0uW h2bCdkK5YVpnX212Z6COTC3ZG0pJiCeGt1TbbDJUlTa4syQ6JXavjK66N8ASZsyC Rwcl0m6hbXp541t1dbgt2VgeGk25okWw3j+brw6zxLD2TnthJxOatID0lDIG47HW GqzZmA6WHbIBIONmGnReIHTpPAPCDm92vUkpKG1xLPszuRmsQbwEl870W/FHrsvm DPvVUUSdIvTV9NuRt7/WY6G4nPp9QlIuTf1ESPzIuIE91gKPdrRCAx0yuT708S1n xCv3ETQ/bKPoAQ67eE3mPBqkcVwv9SE/2/36Lz06kAizRgs5AgMBAAGgOjA4Bgkq hkiG9w0BCQ4xKzApMCcGA1UdEQQgMB6CC2V4YW1wbGUuY29tgg93d3cuZXhhbXBs ZS5jb20wDQYJKoZIhvcNAQELBQADggEBAEWD0Qqz4OENLYp6yyO/KqF0ig9FDsLN b5/R+qhms5qlhdB5+Dh+j693Sj0UgbcNKc6JT86IuBqEBZmRCJuXRoKoo5aMS1cJ hXga7N9IA3qb4VBUzBWvlL92U2Iptr/cEbikFlYZF2Zv3PBv8RfopVlI3OLbKV9D bJJTt/6kuoydXKo/Vx4G0DFzIKNdFdJk86o/Ziz8NOs9JjZxw9H9VY5sHKFM5LKk VcLwnnLRlNjBGB+9VK/Tze575eG0cJomTp7UGIB+1xzIQVAhUZOizRDv9tHDeaK3 k+tUhV0kuJcYHucpJycDSrP/uAY5zuVJ0rs2QSjdnav62YrRgEsxJrU= -----END CERTIFICATE REQUEST----- $ |
Теперь можете войти в свою учетную запись на сайте удостоверяющего центра,
выбрать Сертификаты Сервера - Новый
, отметить подписать
корневым сертификатом 3 класса
, вставить приведенный выше блок в текстовое
поле и нажать Отправить
.
Если все хорошо, будет показан сертификат. Теперь выполните
$ gpgsm --import |
и вставьте в терминале сертификат со страницы удостоверяющего центра, а затем нажмите Ctrl-D.
-----BEGIN CERTIFICATE----- MIIEIjCCAgqgAwIBAgIBTDANBgkqhkiG9w0BAQQFADBUMRQwEgYDVQQKEwtDQWNl [...] rUTFlNElRXCwIl0YcJkIaYYqWf7+A/aqYJCi8+51usZwMy3Jsq3hJ6MA3h1BgwZs Rtct3tIX -----END CERTIFICATE----- gpgsm: не найден сертификат издателя: #/CN=CAcert Class 3 Ro[...] gpgsm: сертификат импортирован gpgsm: всего обработано: 1 gpgsm: импортировано: 1 |
Программа gpgsm
говорит вам, что сертификат импортирован. Теперь
он связан с ключом, которым вы пользовались при создании
сертификата. Корневой сертификат найден не был, так что вам может
понадобиться импортировать его с сайта удостоверяющего центра.
Чтобы просмотреть содержимое своего сертификата, можно ввести:
$ gpgsm -K example.com /home/foo/.gnupg/pubring.kbx --------------------------- S/N: 4C Issuer: /CN=CAcert Class 3 Root/OU=http:\x2f\x2fwww.[...] Subject: /CN=example.com aka: (dns-name example.com) aka: (dns-name www.example.com) validity: 2015-07-01 16:20:51 through 2016-07-01 16:20:51 key type: 2048 bit RSA key usage: digitalSignature keyEncipherment ext key usage: clientAuth (suggested), serverAuth (suggested), [...] fingerprint: 0F:9C:27:B2:DA:05:5F:CB:33:D8:19:E9:65:B9:4F:BD:B1:98:CC:57 |
Я ввел параметр -K, чтобы перечислить только сертификаты, для которых есть секретный ключ. Если вместо -K ввести --dump-secret-keys, будет выведено больше подробностей.
Чтобы пользоваться сертификатом, надо его установить на своем сервере. Серверные программы обычно работают с файлом PKCS\#12, в котором записан ключ и сертификат. Такой файл создается командой:
$ gpgsm --export-secret-key-p12 -a >example.com-cert.pem |
Будет запрошена фраза-пароль, а также новая фраза-пароль для защиты файла PKCS\#12. Теперь в файле записан сертификат и секретный ключ:
$ cat example-cert.pem Issuer ...: /CN=CAcert Class 3 Root/OU=http:\x2f\x2fwww.CA[...] Serial ...: 4C Subject ..: /CN=example.com aka ..: (dns-name example.com) aka ..: (dns-name www.example.com) -----BEGIN PKCS12----- MIIHlwIBAzCCB5AGCSqGSIb37QdHAaCCB4EEggd9MIIHeTk1BJ8GCSqGSIb3DQEu [...много других строк...] -----END PKCS12----- $ |
Скопируйте этот файл безопасным образом на сервер, установите его там, а затем удалите этот файл. Этот файл можно экспортировать снова в любое время, пока доступна база данных секретных ключей GnuPG.
Вверх: Памятки [Содержание][Указатель]