alibek Posted March 25, 2020 Posted March 25, 2020 Есть веб-сервер на PHP, работающий на Apache и использующий HTTPS и клиентские сертификаты. В конфигурацию добавлена строчка SSLOptions +ExportCertData +StdEnvVars, благодаря которой веб-сервер в переменных окружения видит пачку соответствующих переменных SSL_SERVER_* и SSL_CLIENT_*. Все работает, но это снижает производительность. При этом меня в клиентском сертификате интересует обязательно Email и желательно CN и T. Можно ли экспортировать только эти три поля? Через установку отдельных переменных (SetEnv) это работает еще медленнее, чем StdEnvVars. Сейчас работает "костыль" в виде директивы SSLUserName SSL_CLIENT_S_DN_Email и использования переменной окружения REMOTE_USER, программу-минимум он выполняет. Но хотелось бы получить CN и T. Вставить ник Quote
vop Posted March 25, 2020 Posted March 25, 2020 Что значит "работает медленнее"? Это как вы замеряли? Вставить ник Quote
alibek Posted March 25, 2020 Author Posted March 25, 2020 Если без ab-тестов, то навскидку раза в 3-4 медленнее. Вставить ник Quote
vop Posted March 25, 2020 Posted March 25, 2020 Апач разбирает структуру x509 библиотекой openssl. Я не знаю никакой другой библиотеки, которая будет разбирать структуру быстрее (не забываем, что это делается каждый раз при https коннекте независимо от того, есть переменные, или их нет). Переменные окружения она делает сразу линейным списком, что делается практически со скоростью выделения памяти malloc, и по сути, особо не зависит от количества переменных. Честно говоря, я даже не знаю, чем можно измерить накладные расходы на разбор структуры сертификата и заполнение переменных. Я думаю, что текст php страницы интерпретируются на порядки дольше, чем происходят обсуждаемые процедуры. Это я к тому, что ищите, в чем может быть проблема. Может что-то там с чтением этих переменных скриптом или еще что? Апач точно не должен тормозить по этому поводу. Вставить ник Quote
vop Posted March 25, 2020 Posted March 25, 2020 11 hours ago, alibek said: Можно ли экспортировать только эти три поля? Не обратил внимание на этот вопрос. Если вам не нужен сам сертификат, то -ExportCertData, а если хотите некоторых переменных их стандартного набораSSL, Можете похачить апачу. Либо закомментировав ненужные переменные, либо добавив собственный define, либо вообще добавив собственный параметр в конфиг для SSLOptions: modules/ssl/ssl_engine_kernel.c: static const char *ssl_hook_Fixup_vars[] = { "SSL_VERSION_INTERFACE", "SSL_VERSION_LIBRARY", "SSL_PROTOCOL", "SSL_SECURE_RENEG", "SSL_COMPRESS_METHOD", "SSL_CIPHER", "SSL_CIPHER_EXPORT", "SSL_CIPHER_USEKEYSIZE", "SSL_CIPHER_ALGKEYSIZE", "SSL_CLIENT_VERIFY", "SSL_CLIENT_M_VERSION", "SSL_CLIENT_M_SERIAL", "SSL_CLIENT_V_START", "SSL_CLIENT_V_END", "SSL_CLIENT_V_REMAIN", "SSL_CLIENT_S_DN", "SSL_CLIENT_I_DN", "SSL_CLIENT_A_KEY", "SSL_CLIENT_A_SIG", "SSL_SERVER_M_VERSION", "SSL_SERVER_M_SERIAL", "SSL_SERVER_V_START", "SSL_SERVER_V_END", "SSL_SERVER_S_DN", "SSL_SERVER_I_DN", "SSL_SERVER_A_KEY", "SSL_SERVER_A_SIG", "SSL_SESSION_ID", "SSL_SESSION_RESUMED", #ifdef HAVE_SRP "SSL_SRP_USER", "SSL_SRP_USERINFO", #endif NULL }; Вставить ник Quote
Ivan_83 Posted March 26, 2020 Posted March 26, 2020 Мигрируйте на nginx + php-fpm/ngunit, никаких перспектив у апача нет, ровно как и у тех кто только им пользуется. Вставить ник Quote
Crazy_Max Posted March 26, 2020 Posted March 26, 2020 10 minutes ago, Ivan_83 said: Мигрируйте на nginx + php-fpm/ngunit, никаких перспектив у апача нет, ровно как и у тех кто только им пользуется. Опаздал с комментарием, хотел ровно тоже самое написать. Вставить ник Quote
vop Posted March 26, 2020 Posted March 26, 2020 11 hours ago, Ivan_83 said: Мигрируйте на nginx + php-fpm/ngunit, никаких перспектив у апача нет, ровно как и у тех кто только им пользуется. Проверил... Ага, я на НАГ'е. А показалось, что на мастер-х'е. :) А так да, переходите... Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.