#c #struct #openssl
Вопрос:
Я не смог узнать, как установить минимальную и максимальную версию протокола в этой библиотеке:
Есть функция: static int test_func(void)
в тестовом файле
sysdefaulttest.c
Который использует версию протокола min и max:
static int test_func(void) {
if (!TEST_int_eq(SSL_CTX_get_min_proto_version(ctx), TLS1_2_VERSION)
amp;amp; !TEST_int_eq(SSL_CTX_get_max_proto_version(ctx), TLS1_2_VERSION)) {
TEST_info("min/max version setting incorrect");
return 0;
}
return 1;}
В моем случае этот тест провалился. Контекстная структура » ctx » в моем случае имеет эти 2 значения как ноль. Похоже, они должны быть установлены где-то в библиотеке.
ctx.min_proto_ver, ctx.max_proto_ver
В моем случае оба вышеперечисленных параметра показывают нулевое значение.
SSL_CTX_get_min_proto_version(ctx);
SSL_CTX_get_max_proto_version(ctx);
Где я могу установить эти значения версий в библиотеке?
Ответ №1:
Скорее всего, с
SSL_CTX_set_min_proto_version
иSSL_CTX_set_max_proto_version
функции (https://github.com/openssl/openssl/blob/master/include/openssl/ssl.h.in#L1451).
Из документов:
Функции настройки были добавлены в OpenSSL 1.1.0. Функции получения были добавлены в OpenSSL 1.1.1.
Однако редактировать В тесте вам не придется ничего делать. После создания библиотеки вы бы запустили тест следующим образом:
]$ make TESTS="test_sysdefault" test
...
90-test_sysdefault.t .. ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.00 usr 0.00 sys 0.11 cusr 0.01 csys = 0.12 CPU)
Result: PASS
Это выполняет рецепт теста из test/recipes/90-test_sysdefault.t
, который задает OPENSSL_CONF
переменную среды в test/sysdefault.cnf
. Этот файл конфигурации устанавливает версию протокола на 1.2:
]$ cat ./test/sysdefault.cnf
# Configuration file to test system default SSL configuration
...
[ssl_default_sect]
MaxProtocol = TLSv1.2
MinProtocol = TLSv1.2
и тест должен загрузить этот файл:
int global_init(void)
{
if (!OPENSSL_init_ssl(OPENSSL_INIT_ENGINE_ALL_BUILTIN
| OPENSSL_INIT_LOAD_CONFIG, NULL))
Зная это, тест может быть выполнен непосредственно, делая то же самое:
]$ LD_LIBRARY_PATH=. OPENSSL_CONF=test/sysdefault.cnf ./test/sysdefaulttest
1..1
ok 1 - test_func
(здесь мне пришлось дополнительно использовать LD_LIBRARY_PATH
, потому что я только создал библиотеку и не установил ее)
Если мы хотим убедиться, что sysdefault.cnf
он действительно открыт, мы можем использовать strace
:
]$ LD_LIBRARY_PATH=. OPENSSL_CONF=test/sysdefault.cnf strace -f -e trace=/open ./test/sysdefaulttest
openat(AT_FDCWD, "./tls/haswell/x86_64/libssl.so.3", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
...
openat(AT_FDCWD, "test/sysdefault.cnf", O_RDONLY) = 3
1..1
ok 1 - test_func
exited with 0
Комментарии:
1. должен ли я использовать эти макросы внутри файла sysdefaulttest.c или мне следует сделать это в другом месте?
2. Я думаю, что обычно вы запускаете этот тест с использованием
make TESTS="test_sysdefault" test
, и в этом случае вам не нужно ничего делать, потому что при этом будет запущен90-test_sysdefault.t
рецепт, который устанавливаетOPENSSL_CONF
переменную средыsysdefault.cnf
в значение, а этот файл конфигурации устанавливает минимальное и максимальное значение 1,2.3. Если вы запустите тест напрямую, вы можете сделать то же самое:
OPENSSL_CONF=sysdefault.cnf ./sysdefaulttest
.4. Можете ли вы сказать мне, где я могу узнать более подробно о процессе, о котором вы упомянули в своих двух предыдущих комментариях? Я не могу успешно запустить их.. должно быть, здесь не хватает некоторых деталей..
5. Извините, не знаю. В основном он искал файлы, содержащие «sysdefault» в их названии или в их содержимом, возможно, немного погуглил. Я обновил ответ, чтобы включить информацию из комментария. Я также добавил немного о «strace», который можно использовать для подтверждения открытия ожидаемого файла конфигурации.