Jump to content

Recommended Posts

Posted

Есть веб-сервер на 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.

Posted

Апач разбирает структуру x509 библиотекой openssl. Я не знаю никакой другой библиотеки, которая будет разбирать структуру быстрее (не забываем, что это делается каждый раз при https коннекте независимо от того, есть переменные, или их нет). Переменные окружения она делает сразу линейным списком, что делается практически со скоростью выделения памяти malloc, и по сути, особо не зависит от количества переменных. Честно говоря, я даже не знаю, чем можно измерить накладные расходы на разбор структуры сертификата и заполнение переменных. Я думаю, что текст php страницы интерпретируются на порядки дольше, чем происходят обсуждаемые процедуры.

 

Это я к тому, что ищите, в чем может быть проблема. Может что-то там с чтением этих переменных скриптом или еще что? Апач точно не должен тормозить по этому поводу.

 

Posted
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
};

 

Posted
10 minutes ago, Ivan_83 said:

Мигрируйте на nginx + php-fpm/ngunit, никаких перспектив у апача нет, ровно как и у тех кто только им пользуется.

Опаздал с комментарием, хотел ровно тоже самое написать.

Posted
11 hours ago, Ivan_83 said:

Мигрируйте на nginx + php-fpm/ngunit, никаких перспектив у апача нет, ровно как и у тех кто только им пользуется.

Проверил... Ага, я на НАГ'е. А показалось, что на мастер-х'е. :) 

 

А так да, переходите...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.