Вверх: Памятки   [Содержание][Указатель]


9.1 Создание сертификата TLS для сервера

Здесь вкратце описывается, как создать сертификат сервера. Эта процедура действительно использовалась для получения сертификата, который использовался на реальном сервере, из удостоверяющего центра. Она проверялась только на этом удостоверяющем центре, но с другими центрами тоже проблем быть не должно.

Начнем с создания запроса на подпись сертификата 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.


Вверх: Памятки   [Содержание][Указатель]