SCEP-client под Linux

Для работы по SCEP для получения сертификата я использую проект AutoSscep. Проект старый (2004 г.), заброшенный, но самодостаточный (реализует протокол SCEP под платформы Linux/Windows) и, главное, открытый. Обновлённые под текущие реалии исходники, в том числе скомпилированный под Debian7/64 прилагаются:

Далее демонстрация установки, компиляции и запуска.

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

1. Скачиваем архив с исходниками (там же пример файла конфигурации и скомпилированный для Debian 7.8 64-bit файл).

root@debian7:/home/rom/scep# wget http://linuxcmd.ru/files/scep-client.gz
--2015-02-22 18:39:29--  http://linuxcmd.ru/files/scep-client.gz
Распознаётся linuxcmd.ru (linuxcmd.ru)... 54.246.94.19
Подключение к linuxcmd.ru (linuxcmd.ru)|54.246.94.19|:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: 92683 (91K) [application/octet-stream]
Сохранение в каталог: ««scep-client.gz»».

100%[==========================================================>] 92 683       349K/s   за 0,3s

2015-02-22 18:39:30 (349 KB/s) - «scep-client.gz» saved [92683/92683]

2. Распаковываем архив:

root@debian7:/home/rom/scep# tar -xvf scep-client.gz
scep-client/
scep-client/conf.h
scep-client/local.c
scep-client/EMPTYCONFIG
scep-client/ias.c
scep-client/COPYRIGHT
scep-client/makefile
scep-client/README
scep-client/AutoSscep.vcproj
scep-client/clean.bat
scep-client/sceputils.c
scep-client/ias.h
scep-client/AutoSscep.sln
scep-client/autosscep.c
scep-client/st.bat
scep-client/init.c
scep-client/autosscep.h
scep-client/net.c
scep-client/cmd.h
scep-client/fileutils.c
scep-client/ERRORS
scep-client/pkcs7.c
root@debian7:/home/rom/scep#

3. Переходим в папку с файлами:

root@debian7:/home/rom/scep# cd scep-client
root@debian7:/home/rom/scep/scep-client#

4. Если не установлены пакеты для компиляции - ставим:

root@debian7:/home/rom/scep/scep-client# apt-get -y install gcc g++ make libssl-dev
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
  binutils cpp cpp-4.7 g++-4.7 gcc-4.7 libc-dev-bin libc6-dev libgmp10 libgomp1 libitm1 libmpc2
  libmpfr4 libquadmath0 libssl-doc libstdc++6-4.7-dev linux-libc-dev manpages-dev zlib1g-dev
Предлагаемые пакеты:
  binutils-doc cpp-doc gcc-4.7-locales g++-multilib g++-4.7-multilib gcc-4.7-doc
  libstdc++6-4.7-dbg gcc-multilib autoconf automake1.9 libtool flex bison gdb gcc-doc
  gcc-4.7-multilib libmudflap0-4.7-dev libgcc1-dbg libgomp1-dbg libitm1-dbg libquadmath0-dbg
  libmudflap0-dbg libcloog-ppl0 libppl-c2 libppl7 binutils-gold glibc-doc libstdc++6-4.7-doc
  make-doc
НОВЫЕ пакеты, которые будут установлены:
 
binutils cpp cpp-4.7 g++ g++-4.7 gcc gcc-4.7 libc-dev-bin libc6-dev libgmp10 libgomp1 libitm1
  libmpc2 libmpfr4 libquadmath0 libssl-dev libssl-doc libstdc++6-4.7-dev linux-libc-dev make
  manpages-dev zlib1g-dev

обновлено 0, установлено 22 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 38,3 MБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на
102 MB.
Получено:1 http://security.debian.org/ wheezy/updates/main binutils amd64 2.22-8+deb7u2 [4 793 kB]
Получено:2 http://ftp.by.debian.org/debian/ wheezy/main libgmp10 amd64 2:5.0.5+dfsg-2 [250 kB]
Получено:3 http://ftp.by.debian.org/debian/ wheezy/main libgomp1 amd64 4.7.2-5 [27,5 kB]
Получено:4 http://ftp.by.debian.org/debian/ wheezy/main libitm1 amd64 4.7.2-5 [36,6 kB]
Получено:5 http://ftp.by.debian.org/debian/ wheezy/main libmpfr4 amd64 3.1.0-5 [538 kB]
Получено:6 http://ftp.by.debian.org/debian/ wheezy/main libquadmath0 amd64 4.7.2-5 [125 kB]
Получено:7 http://ftp.by.debian.org/debian/ wheezy/main libmpc2 amd64 0.9-4 [40,1 kB]
Получено:8 http://security.debian.org/ wheezy/updates/main libc-dev-bin amd64 2.13-38+deb7u7 [225 kB]
Получено:9 http://ftp.by.debian.org/debian/ wheezy/main cpp-4.7 amd64 4.7.2-5 [5 416 kB]
Получено:10 http://security.debian.org/ wheezy/updates/main linux-libc-dev amd64 3.2.65-1+deb7u1 [836 kB]
Получено:11 http://ftp.by.debian.org/debian/ wheezy/main cpp amd64 4:4.7.2-1 [16,6 kB]
Получено:12 http://ftp.by.debian.org/debian/ wheezy/main gcc-4.7 amd64 4.7.2-5 [8 296 kB]
Получено:13 http://ftp.by.debian.org/debian/ wheezy/main gcc amd64 4:4.7.2-1 [5 064 B]
Получено:14 http://ftp.by.debian.org/debian/ wheezy/main libstdc++6-4.7-dev amd64 4.7.2-5 [1 726 kB]
Получено:15 http://ftp.by.debian.org/debian/ wheezy/main g++-4.7 amd64 4.7.2-5 [8 011 kB]
Получено:16 http://security.debian.org/ wheezy/updates/main libc6-dev amd64 2.13-38+deb7u7 [2 666 kB]
Получено:17 http://ftp.by.debian.org/debian/ wheezy/main g++ amd64 4:4.7.2-1 [1 374 B]
Получено:18 http://ftp.by.debian.org/debian/ wheezy/main zlib1g-dev amd64 1:1.2.7.dfsg-13 [215 kB]
Получено:19 http://ftp.by.debian.org/debian/ wheezy/main make amd64 3.81-8.2 [396 kB]
Получено:20 http://ftp.by.debian.org/debian/ wheezy/main manpages-dev all 3.44-1 [1 737 kB]
Получено:21 http://security.debian.org/ wheezy/updates/main libssl-dev amd64 1.0.1e-2+deb7u14 [1 756 kB]
Получено:22 http://security.debian.org/ wheezy/updates/main libssl-doc all 1.0.1e-2+deb7u14 [1 198 kB]
Получено 38,3 MБ за 8с (4 655 kБ/c)
Выбор ранее не выбранного пакета libgmp10:amd64.
(Чтение базы данных … на данный момент установлено 26578 файлов и каталогов.)
Распаковывается пакет libgmp10:amd64 (из файла …/libgmp10_2%3a5.0.5+dfsg-2_amd64.deb) …
Выбор ранее не выбранного пакета libgomp1:amd64.
Распаковывается пакет libgomp1:amd64 (из файла …/libgomp1_4.7.2-5_amd64.deb) …
Выбор ранее не выбранного пакета libitm1:amd64.
Распаковывается пакет libitm1:amd64 (из файла …/libitm1_4.7.2-5_amd64.deb) …
Выбор ранее не выбранного пакета libmpfr4:amd64.
Распаковывается пакет libmpfr4:amd64 (из файла …/libmpfr4_3.1.0-5_amd64.deb) …
Выбор ранее не выбранного пакета libquadmath0:amd64.
Распаковывается пакет libquadmath0:amd64 (из файла …/libquadmath0_4.7.2-5_amd64.deb) …
Выбор ранее не выбранного пакета libmpc2:amd64.
Распаковывается пакет libmpc2:amd64 (из файла …/libmpc2_0.9-4_amd64.deb) …
Выбор ранее не выбранного пакета binutils.
Распаковывается пакет binutils (из файла …/binutils_2.22-8+deb7u2_amd64.deb) …
Выбор ранее не выбранного пакета cpp-4.7.
Распаковывается пакет cpp-4.7 (из файла …/cpp-4.7_4.7.2-5_amd64.deb) …
Выбор ранее не выбранного пакета cpp.
Распаковывается пакет cpp (из файла …/cpp_4%3a4.7.2-1_amd64.deb) …
Выбор ранее не выбранного пакета gcc-4.7.
Распаковывается пакет gcc-4.7 (из файла …/gcc-4.7_4.7.2-5_amd64.deb) …
Выбор ранее не выбранного пакета gcc.
Распаковывается пакет gcc (из файла …/gcc_4%3a4.7.2-1_amd64.deb) …
Выбор ранее не выбранного пакета libc-dev-bin.
Распаковывается пакет libc-dev-bin (из файла …/libc-dev-bin_2.13-38+deb7u7_amd64.deb) …
Выбор ранее не выбранного пакета linux-libc-dev:amd64.
Распаковывается пакет linux-libc-dev:amd64 (из файла …/linux-libc-dev_3.2.65-1+deb7u1_amd64.deb) …
Выбор ранее не выбранного пакета libc6-dev:amd64.
Распаковывается пакет libc6-dev:amd64 (из файла …/libc6-dev_2.13-38+deb7u7_amd64.deb) …
Выбор ранее не выбранного пакета libstdc++6-4.7-dev.
Распаковывается пакет libstdc++6-4.7-dev (из файла …/libstdc++6-4.7-dev_4.7.2-5_amd64.deb) …
Выбор ранее не выбранного пакета g++-4.7.
Распаковывается пакет g++-4.7 (из файла …/g++-4.7_4.7.2-5_amd64.deb) …
Выбор ранее не выбранного пакета g++.
Распаковывается пакет g++ (из файла …/g++_4%3a4.7.2-1_amd64.deb) …
Выбор ранее не выбранного пакета zlib1g-dev:amd64.
Распаковывается пакет zlib1g-dev:amd64 (из файла …/zlib1g-dev_1%3a1.2.7.dfsg-13_amd64.deb) …
Выбор ранее не выбранного пакета libssl-dev.
Распаковывается пакет libssl-dev (из файла …/libssl-dev_1.0.1e-2+deb7u14_amd64.deb) …
Выбор ранее не выбранного пакета libssl-doc.
Распаковывается пакет libssl-doc (из файла …/libssl-doc_1.0.1e-2+deb7u14_all.deb) …
Выбор ранее не выбранного пакета make.
Распаковывается пакет make (из файла …/make_3.81-8.2_amd64.deb) …
Выбор ранее не выбранного пакета manpages-dev.
Распаковывается пакет manpages-dev (из файла …/manpages-dev_3.44-1_all.deb) …
Обрабатываются триггеры для man-db …
Настраивается пакет libgmp10:amd64 (2:5.0.5+dfsg-2) …
Настраивается пакет libgomp1:amd64 (4.7.2-5) …
Настраивается пакет libitm1:amd64 (4.7.2-5) …
Настраивается пакет libmpfr4:amd64 (3.1.0-5) …
Настраивается пакет libquadmath0:amd64 (4.7.2-5) …
Настраивается пакет libmpc2:amd64 (0.9-4) …
Настраивается пакет binutils (2.22-8+deb7u2) …
Настраивается пакет cpp-4.7 (4.7.2-5) …
Настраивается пакет cpp (4:4.7.2-1) …
Настраивается пакет gcc-4.7 (4.7.2-5) …
Настраивается пакет gcc (4:4.7.2-1) …
Настраивается пакет libc-dev-bin (2.13-38+deb7u7) …
Настраивается пакет linux-libc-dev:amd64 (3.2.65-1+deb7u1) …
Настраивается пакет libc6-dev:amd64 (2.13-38+deb7u7) …
Настраивается пакет zlib1g-dev:amd64 (1:1.2.7.dfsg-13) …
Настраивается пакет libssl-dev (1.0.1e-2+deb7u14) …
Настраивается пакет libssl-doc (1.0.1e-2+deb7u14) …
Настраивается пакет make (3.81-8.2) …
Настраивается пакет manpages-dev (3.44-1) …
Настраивается пакет libstdc++6-4.7-dev (4.7.2-5) …
Настраивается пакет g++-4.7 (4.7.2-5) …
Настраивается пакет g++ (4:4.7.2-1) …
update-alternatives: используется /usr/bin/g++ для предоставления /usr/bin/c++ (c++) в автоматический режим
root@debian7:/home/rom/scep/scep-client#

5. Компилируем:

root@debian7:/home/rom/scep/scep-client# make
gcc -Wall -O    -c -o autosscep.o autosscep.c
gcc -Wall -O    -c -o init.o init.c
gcc -Wall -O    -c -o net.o net.c
gcc -Wall -O    -c -o sceputils.o sceputils.c
gcc -Wall -O    -c -o pkcs7.o pkcs7.c
gcc -Wall -O    -c -o ias.o ias.c
gcc -Wall -O    -c -o fileutils.o fileutils.c
gcc -Wall -O    -c -o local.o local.c
local.c: In function ‘check_date’:
local.c:71:18: warning: variable ‘t’ set but not used [-Wunused-but-set-variable]
gcc -Wall -O  -o
autosscep autosscep.o init.o net.o sceputils.o pkcs7.o ias.o fileutils.o local.o -lcrypto -lssl
root@debian7:/home/rom/scep/scep-client#

6. Редактируем файл конфигурации. В прилагаемом архиве это файл vproby.conf:

# The directory that contains certificates
CertDir = ""

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

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

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

# The bits for the modules
KeyBits = "2048"

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

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

ECommand =""

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

[CA]
DN = "linuxcmd-CA"
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 = "linuxcmd-CA"

# DN Data   +unstructuredName=ridiculus
Email = "info@linuxcmd.ru"
Country = "RU"
State = ""
Location = "Minsk"
Organization = ""
OrgUnit = ""
CommonName = "test.linuxcmd.ru"

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

ReqCommand = ""
[/Certificate]

Главные параметры выделены:

  • URL - адрес, на который отправляется запрос (конечно, нужно указать свой  адрес/IP)
  • ChallengePassword - пароль для получения сертификата
  • CommonName - имя, на которое выдаётся сертификат

Чтобы скачанные сертификаты не складывать в один каталог, можно настроить CertDir (где будет запрос на сертификат и сам сертификат), KeyDir (где будет приватный ключ) и CADir (тут будут сертификаты шаблонов SCEP-сервера и сертификат CA).

Чтобы получить сертификат повторно - нужно будет удалить полученный ранее (сертификат/запрос/ключ - smycert.cer, smycert.cer.csr и smykey.key). Т.к. программа проверяет валидность сертификата на текущую дату минус DaysBeforeExpire.

Другие настройки достаточно очевидны (можно прочесть в документации).

После редактирования файла конфигурации, запускаем процесс:

root@debian7:/home/rom/scep/scep-client# ./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=RU/L=Minsk/CN=MSCEP-RA/emailAddress=info@linuxcmd.ru
Digital Signature
./autosscep: n.1 -> found certificate with
  subject: /C=RU/L=Minsk/CN=MSCEP-RA/emailAddress=info@linuxcmd.ru
Key Encipherment
./autosscep: n.2 -> found certificate with
  subject: /DC=ru/DC=linuxcmd/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

root@debian7:/home/rom/scep/scep-client#

Полученный сертификат:

root@debian7:/home/rom/scep/scep-client# head smycert.cer
-----BEGIN CERTIFICATE-----
MIIF6zCCBNOgAwIBAgIKEikkrAAAAAAACTANBgkqhkiG9w0BAQUFADA9MRIwEAYK
CZImiZPyLGQBGRYCYnkxFDASBgoJkiaJk/IsZAEZFgR2cHJvMREwDwYDVQQDEwh2
UHJvYnlDQTAeFw0xNTAyMjIxNTEyNTNaFw0xNzAyMjIxNTIyNTNaMIGEMQswCQYD
VQQGEwJCWTERMA8GA1UECBMIVmlyZ2luaWExDjAMBgNVBAcTBU1pbnNrMRIwEAYD
VQQKEwlJVCBHYWxheHkxCzAJBgNVBAsTAkJZMRUwEwYDVQQDEwx0ZXN0LnZwcm8u
YnkxGjAYBgkqhkiG9w0BCQEWC2FtdEB2cHJvLmJ5MIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAzC7988znurGmr/bPBnuSjeGUwR5AQBdhjisk2WF5UdAy
E0+QNao08VPX30XZkEIsqOZAUurVJrvfRCQPemm/12ADAbtRVKI/GWzyIWy8Z7TC
yU1gfBt7xWt+FndWj2b4nBGNjRlGiG0SIZEfbcVR1daHzqLLnmQIUR4EFz4EcV4w

root@debian7:/home/rom/scep/scep-client#


п.с. В случае проблем можно поставить Verbose = "yes".

Tags: 

Если вам помогла или просто понравилась статья - плюсаните/поделитесь, пожалуйста.

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