Пояснить пример Запуск SSL/TLS сервера/клиента

Добрый день.
Прошу пояснить порядок запуска примера "Запуск SSL/TLS сервера/клиента" из раздела "https://dev.rutoken.ru/pages/viewpage.a … d=43450394"

1. На ключе сделал ключ типа "ГОСТ Р 34.10-2012 256"
2. Сделал запрос
3. Используя демо базу из SDK "demoCA" выпустил сертификат его и внес обратно на ключ
4. Запускаю сервер с параметром ./demoCA/newcerts/01.pem
5. Запускаю клиент - ругается разным, из последнего == Verify return code: 21 (unable to verify the first certificate)

Поясните порядок работ чтобы из примера "Сервер, ключ на токена" и "Клиент, ключ на токене" заработал.
Можно начать с чистого токена.
ОС ubuntu 20.04

Re: Пояснить пример Запуск SSL/TLS сервера/клиента

muzi, Добрый день. Ниже подробная инструкция:
Скачать Rutoken SDK https://www.rutoken.ru/support/download/get/sdk.html
Распаковать архив.
Скопировать содержимое папки sdk\openssl\bin\1.1\openssl-tool-1.1\linux_glibc-x86_64 в папку sdk\openssl\samples\tool
Скопировать содержимое папки sdk\openssl\bin\1.1\rtengine-1.1\linux_glibc-x86_64 в папку sdk\openssl\samples\tool
Скопировать содержимое папки sdk\pkcs11\lib\linux_glibc-x86_64 в папку sdk\openssl\samples\tool
В файле sdk\openssl\samples\tool\openssl.cnf поменять путь до библиотек librtengine.so и librtpkcs11ecp.so (./librtengine.so, ./librtpkcs11ecp.so)
Открыть консоль в папке sdk\openssl\samples\tool\
Выполнить экспорт конфигурации openssl:
export OPENSSL_CONF=./openssl.cnf
Сгенерировать ключевую пару на токене для сервера:
pkcs11-tool --module ./librtpkcs11ecp.so --login --pin 12345678 --keypairgen  --key-type GOSTR3410-2012-256:B --id 3132 --usage-derive
Создать запрос на сертификат сервера:
openssl req -utf8 -new -keyform engine -key "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=12" -engine rtengine -out req_srv.csr
Создать сертификат сервера:
openssl ca -batch -in req_srv.csr -out serv.cer

Сгенерировать ключевую пару клиента:
pkcs11-tool --module ./librtpkcs11ecp.so --login --pin 12345678 --keypairgen  --key-type GOSTR3410-2012-256:B --id 3233 --usage-derive
Создать запрос на сертификат клиента:
openssl req -utf8 -new -keyform engine -key "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=23" -engine rtengine -out req_cli.csr
Создать сертификат клиента:
openssl ca -batch -in req_cli.csr -out client.cer
Запустить сервер:
openssl s_server -keyform engine -key "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=12" -engine rtengine -cert serv.cer -Verify 7 -CAfile ./demoCA/cacert.pem -accept 44330 -WWW -purpose any -4

Открыть еще одну консоль в папке sdk\openssl\samples\tool\
Выполнить экспорт конфигурации openssl:
export OPENSSL_CONF=./openssl.cnf
Запустить клиент:
openssl s_client -host 127.0.0.1 -port 44330 -cert client.cer -keyform engine -key "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=23" -engine rtengine

Re: Пояснить пример Запуск SSL/TLS сервера/клиента

Спасибо за ответ, делал так:

<console #1>
$ cd
$ unzip ~/downloads/rutoken-sdk-latest.zip
$ cd ~/sdk/openssl/samples/tool
$ cp ~/sdk/openssl/bin/1.1/openssl-tool-1.1/linux_glibc-x86_64/* .
$ cp ~/sdk/openssl/bin/1.1/rtengine-1.1/linux_glibc-x86_64/lib/* .
$ cp ~/sdk/pkcs11/lib/linux_glibc-x86_64/* .
$ sed -i 's/\/path\/to/\./g' ./openssl.cnf
$ sed -i 's/;serial=2adc8d87//g' ./openssl.cnf 
$ pkcs11-tool --module ./librtpkcs11ecp.so --login --pin 12345678 --keypairgen  --key-type GOSTR3410-2012-256:B --id 3132 --usage-derive
$ openssl req -utf8 -new -keyform engine -key "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=12" -engine rtengine -out req_srv.csr
$ openssl ca -batch -in req_srv.csr -out serv.cer
$ pkcs11-tool --module ./librtpkcs11ecp.so --login --pin 12345678 --keypairgen  --key-type GOSTR3410-2012-256:B --id 3233 --usage-derive
$ openssl req -utf8 -new -keyform engine -key "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=23" -engine rtengine -out req_cli.csr
$ openssl ca -batch -in req_cli.csr -out client.cer
$ openssl s_server -keyform engine -key "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=12" -engine rtengine -cert serv.cer -Verify 7 -CAfile ./demoCA/cacert.pem -accept 44330 -WWW -purpose any -4
<console #2>
$ cd ~/sdk/openssl/samples/tool
$ export OPENSSL_CONF=./openssl.cnf
$ openssl s_client -host 127.0.0.1 -port 44330 -cert client.cer -keyform engine -key "pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;id=23" -engine rtengine

Соединение клиента и сервера устанавливается, держится, но есть ошибка типа "Verify return code: 26 (unsupported certificate purpose)"
Прошу пояснить все ли верно делаю ?

(2022-08-05 11:10:11 отредактировано muzi)

Re: Пояснить пример Запуск SSL/TLS сервера/клиента

доработал так

1. в конфиг установил extendedKeyUsage=emailProtection,clientAuth,serverAuth
2. клиенту добавил -CAfile ./demoCA/cacert.pem

клиент выдал успех - Verify return code: 0 (ok)

Re: Пояснить пример Запуск SSL/TLS сервера/клиента

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