Реализация SCEP-клиента для получения сертификатов от SCEP-сервера

Итак, ранее мы настроили SCEP-сервер и теперь, любое устройство, поддерживающее протокол SCEP может получить от него сертификат. Для этого в настройках (устройства, поддерживающего SCEP) нужно указать его адрес и пароль, который мы получили при заходе в качестве DeviceAdmin.

Логично возникает вопрос о клиентской части SCEP, чтобы наше ПО могло сделать аналогичное, не заморачиваясь на реализацию протокола SCEP. Для этого можно воспользоваться стареньким, но вполне себе рабочим (для нас главное - открытым) проектом AutoSscep. На оном можно найти исходники под Linux и под Windows.

 

SCEP-client под Windows

Проект давно заброшен, но вполне работоспособен. У кого нет возможности собрать самому под нужную ОС, прилагаю готовый вариант под Windows 7/64-bit, на которой пишется данная статья и делаются примеры для неё.

Я для простоты использования создаю командный файл vProby-cert.cmd, внутри него лишь одна строчка: запускной файл с указанием файла конфигурации и лога.

vprobyscep64.exe vproby.conf > log.txt

Далее рассмотрим содержимое файла конфигурации, в моём случае это vproby.conf. Полное содержимое текущей версии (настройки в основном дефолтные):

# The directory that contains certificates
CertDir = "CertDir\"

# The directory that contains the private keys
KeyDir = "KeyDir\"

# The number of expiration days before start enroll
DaysBeforeExpire = "2"

# The directory that contains the CA's certificates
CADir = "CADir\"

# The bits for the modules
KeyBits = "1024"

# Signature algorithm (md5 or sha1)
SigAlgo = "sha1"

### Info e debug option
# Possible values: yes or no.
Verbose = "yes"
Debug = "no"

ECommand =""

### CAs' data
# Define the CAs data
# Encryption algorithm: des, 3des or blowfish. Default: des

[CA]
DN = "vProbyCA"
URL = "http://192.168.0.197/certsrv/mscep/mscep.dll"
CertFile = "scacert-1"
EncCertFile = "scacert-0"
EncAlgo = "des"
VHost = ""
[/CA]

[Certificate]
CertFile = "smycert.cer"
KeyFile = "smykey.key"
ChallengePassword="49937D560DA26F75545AFBB9F8539881"


# cert's CA Data
CADN = "vProbyCA"

# DN Data   +unstructuredName=ridiculus
Email = "amt@vpro.by"
Country = "BY"
State = "Virginia"
Location = "Minsk"
Organization = "IT Galaxy"
OrgUnit = "BY"
CommonName = "test.vpro.by"

[X509v3EXT]
key_usage = ""
subject_alt_name = ""
basic_constraints = ""
netscape_cert_type = ""
extended_key_usage = ""
netscape_comment = ""
[/X509v3EXT]

ReqCommand = ""
[/Certificate]

"Главных" переменных в нём три:

  1. URL = "http://192.168.0.197/certsrv/mscep/mscep.dll"
  2. ChallengePassword="49937D560DA26F75545AFBB9F8539881"
  3. CommonName = "test.vpro.by"

Они достаточно очевидны - URL, на который отправляется запрос, пароль и имя, на которое выдаётся сертификат.

Создаём папки CertDir, KeyDir и CADir (для удобства - можно и без них) и выполняем.

Если всё сделано правильно, в папке CADir появятся файлы:

CADir files

Это полученные от SCEP-сервера "его" сертификаты:

  • scacert-0 - шаблона CEPEncryption
  • scacert-1 - шаблона EnrollmentAgentOffline
  • scacert-1-2 - "рутовый" сертификат CА, от имени которого и выдаётся сертификат на наш запрос

Последний (scacert-1-2) сертификат я переименовываю в vProbyCA.cer и открываю:

vProbyCA certificate

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

vProbyCA certificate install in trusted

Теперь, если открыть папку с CertDir, в ней будет два файла:

CertDir

  • smycert.cer.csr - файл с запросом на сертификат
  • smycert.cer - собственно выданный SCEP-сервером сертификат на запрошенное нами имя

Открываем smycert.cer:

smycert.cer

Видно, что сертификат выдан от имени нашего СА, он у меня сейчас в доверенных, потому и выданному от его имени сертификату есть доверие и всем будущем также.

Первые две политики сведений о сертификате:

  • Обеспечивает получение идентификации от удаленного компьютера
  • Подтверждает удаленному компьютеру идентификацию вашего компьютера

Это стандартные для SSL/TLS (HTTPS).

Другие три "неизвестны" (для текущей операционной системы), потому указываются номера OID:

  • 2.16.840.1.113741.1.2.1
  • 2.16.840.1.113741.1.2.2
  • 2.16.840.1.113741.1.2.3

Напомню, что это наши "специальные" OID для Intel AMT, которые мы специально добавляли при настройке SCEP-сервера. Наличие же каких-то дополнительных "фич" никак не мешает использовать данный сертификат как "обычный" SSL-сертификат.

Посмотрим, что в других свойствах выданного сертификата:

testvproby cert subject

Видим всё то, что мы ранее указали в файле конфигурации vproby.conf. Так что если вам данные поля важны - всегда можно повторить запрос с другими параметрами ещё раз.

Чтобы получить ещё раз сертификат - нужно будет удалить "smycert.cer", "smycert.cer.csr" из каталога CertDir и приватный ключ выданного сертификата "smykey.key" из каталога KeyDir. Иначе программа посчитает, что текущий сертификат ещё "не истёк" - она проверит, когда он заканчивается, сравнит с текущей с учётом переменной "DaysBeforeExpire" и запрашивать новый не будет.

Папку CADir очищать не обязательно - данные сертификаты не обновляются. Хотя если их удалить - они просто будут получены от SCEP-сервера заново.

Каждый следующий выданный сертификат будет другим, даже если вы не меняли никаких настроек (в файле конфига vproby.conf). Собственно, это свойство сертификатов - двух одинаковых быть не может.

В общем, дефолтные настройки особенно "тюнинговать" незачем. И если в вышеприведенных увеличить длину ключа до 2048 (Intel AMT поддерживает 1024-2048 включительно):

KeyBits = "2048"

То в результате, SCEP-сервер будет выдавать по функционалу точно такие же сертификаты, как это делает "Manageability Director", только автоматически!

 

SCEP-client под Linux


Клиент под линукс я продемонстрирую на базе локального Debian 7 (для других будет аналогично).

Краткий список команд (полный с подробностями - здесь) в общем случае следующий:

  • wget wget http://linuxcmd.ru/files/scep-client.gz
  • tar -xvf scep-client.gz
  • cd scep-client
  • apt-get -y install gcc g++ make libssl-dev
  • make
  • ./autosscep vproby.conf

./autosscep: Reading config file
        host: 192.168.0.197
        port: 80
        dir: /certsrv/mscep/mscep.dll
./autosscep: requesting CA certificate
./autosscep: valid response from server (reply: 3)

./autosscep: n.0 -> found certificate with
  subject: /C=BY/L=Minsk/CN=SCS-MSCEP-RA/emailAddress=info@vpro.by
Digital Signature
./autosscep: n.1 -> found certificate with
  subject: /C=BY/L=Minsk/CN=SCS-MSCEP-RA/emailAddress=info@vpro.by
Key Encipherment
./autosscep: n.2 -> found certificate with
  subject: /DC=by/DC=vpro/CN=vProbyCA
Digital Signature, Certificate Sign, CRL Sign
./autosscep: Checking certificate -- > smycert.cer
./autosscep: New request
./autosscep: sending certificate request
./autosscep: transaction_ID = B4084BCEEAB580B74A4183916D827E30
./autosscep: valid response from server
./autosscep: pkistatus: SUCCESS
./autosscep: certificate written as smycert.cer.new
./autosscep: --- SUMMARY ---
./autosscep: Certificate : smycert.cer (status 0)
        Certificate updated
./autosscep: Total updated certificates: 1

Сертификат получен:

head smycert.cer

-----BEGIN CERTIFICATE-----
MIIF6zCCBNOgAwIBAgIKEikkrAAAAAAACTANBgkqhkiG9w0BAQUFADA9MRIwEAYK
CZImiZPyLGQBGRYCYnkxFDASBgoJkiaJk/IsZAEZFgR2cHJvMREwDwYDVQQDEwh2
UHJvYnlDQTAeFw0xNTAyMjIxNTEyNTNaFw0xNzAyMjIxNTIyNTNaMIGEMQswCQYD
VQQGEwJCWTERMA8GA1UECBMIVmlyZ2luaWExDjAMBgNVBAcTBU1pbnNrMRIwEAYD
VQQKEwlJVCBHYWxheHkxCzAJBgNVBAsTAkJZMRUwEwYDVQQDEwx0ZXN0LnZwcm8u
YnkxGjAYBgkqhkiG9w0BCQEWC2FtdEB2cHJvLmJ5MIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAzC7988znurGmr/bPBnuSjeGUwR5AQBdhjisk2WF5UdAy
E0+QNao08VPX30XZkEIsqOZAUurVJrvfRCQPemm/12ADAbtRVKI/GWzyIWy8Z7TC
yU1gfBt7xWt+FndWj2b4nBGNjRlGiG0SIZEfbcVR1daHzqLLnmQIUR4EFz4EcV4w

 

Настройка HTTPS в IIS для SCEP

Настроить HTTPS не сложно - при установке СА им автоматически создаётся/выдаётся сертификат на имя компьютера (в моём случае - scs.vpro.by) и его можно указать в настройках "Site Bindigs" вашего IIS-сервера. Однако для отработки в деле вышеописанного SCEP-клиента - получим и привяжем SCEP-сервер на другое имя, например, scep.vpro.by.

Выставляем нужное "CommonName", в моём случае это будет scep.vpro.by и отправляем запрос.

После из полученных файлов "собираем" универсальный pfx-файл сертификатов, который поймут все программы, в том числе и IIS:

openssl pkcs12 -export -in smycert.cer -inkey smykey.key -certfile scacert-1-2  -out smycert.pfx

Копируем данный файл на сервер и импортируем в IIS:

IIS import cert

Теперь в "Site Bindigs" будет доступен и свежедобавленное имя:

IIS Site Bindings

Запрос должен отсылаться именно на это имя (scep.vpro.by), потому добавляю запись в DNS:

add DNS

Всё, IIS-сервер готов.

Изменяем настройки в SCEP-клиенте и проверяем. Для этого вместо "http://192.168.0.197/certsrv/mscep/mscep.dll" прописываю:

http://scep.vpro.by:443/certsrv/mscep/mscep.dll

Именно в таком виде (без привычного https) - http://DNS:443/... (либо ковыряйте исходники сами - autosscep же подразумевает конкретно такой формат).

 

Изменение ChallengePassword

Если требуется изменить ChallengePassword (а в старых версиях NDES под Windows 2008 - это требовалось после каждой перезагрузки сервера), то для этого просто удаляем EncryptedPassword в редакторе реестра и рестартим IIS (iireset).

Delete ChallengePassword

После, зайдя под DeviceAdmin-ом на вышесделанный адрес https://scep.vpro.by/CertSrv/mscep_admin/:

New enrollment challenge password

Получаем новый пароль и прописываем его (обновляем) в файл конфигурации SCEP-клиента (vproby.conf).

 

Итак, теперь мы получили очень удобное средство для работы с сертификатами - SCEP-сервер и SCEP-клиент. Попробовав, как легко настроить нужные параметры сертификата и просто сделать запрос - станет ясно, что казавшийся удобным Manageability Director никак с этим не сравнится. Не говоря уже про конкретно практическое применение - для реализации в ПО (и не только для АМТ).

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
Anti-bot.