клиент x.509 базирующаяся авторизация на апаче

После некоторого обширного расследования мы нашли проблему маршрута...

У клиента был дополнительный индекс на таблице, которая бросала все из синхронизации, но только на их сервере. При локальном тестировании, или резервное копирование LDF/MDF или восстановление на новую базу данных - проблема не была показана.

На клиентской машине, на исходном mdf/mdf, будучи сохраненным и восстановленный, или на новой базе данных, которая была восстановлена на, проблема показана 100% надежно.

Как доказательство, что индекс был причиной, мы могли удалить и повторно добавить индекс и видеть нежелательное поведение произойти и затем не произойти.

-1
задан 11 March 2012 в 18:00
2 ответа

Вы можете создать файл CA из всех ваших сертификатов клиентов, и это должно работать.

Однако вы больше не сможете доверять сертификату CN для аутентификации отдельных пользователей.

Если вы не хотите перезапускать Apache, вы все равно сможете сделать это, используя каталог CA вместо пакета CA с помощью директивы SSLCACertificatePath (вам нужно будет создать символическую ссылку или переименовать сертификаты, чтобы доступны по хешу)

1
ответ дан 5 December 2019 в 19:33

Вы можете это сделать, в Apache Httpd нет ничего для нормальной аутентификации. Вам понадобится некоторый код в вашем приложении, чтобы справиться с этим (т.е. выполнить аутентификацию на уровне PHP / CGI / Java): это более или менее исключает простые файлы (HTML, JS, ...), к сожалению.

Для этого ,

  • используйте SSLVerifyClient optional_no_ca , чтобы разрешить принятие любого сертификата (что касается уровня SSL / TLS Apache Httpd);
  • указывает SSLCADNRequestFile на файл с пустой строкой: это заставит CertificateRequest отправить пустой список certificate_authorities , который будет указывать клиенту, что он потенциально может отправить что угодно (не то чтобы он гарантирует, что сервер будет принять это). Такое поведение явно разрешено TLS 1. 1 (а предыдущие версии умалчивают об этом). На практике он работает с SSLv3 и TLS 1.0 с большинством браузеров.

Это позволит представить и принять любой сертификат во время подтверждения SSL / TLS. К сожалению, это также удаляет любые аутентификации, которые Apache Httpd сделал бы, поэтому ни одна из директив, проверяющих CN или другие части сертификата, не будет иметь никакого смысла (поскольку вы не можете доверять содержимому сертификата).

Все, что вы знаете на этом этапе, это то, что у клиента есть закрытый ключ для открытого ключа в сертификате, который был представлен (в противном случае шаг TLS CertificateVerify завершился бы ошибкой). Вы даже не можете доверять предмету этого сертификата. Этот сертификат будет в SSL_CLIENT_CERT . Вам понадобится код, чтобы прочитать его и извлечь его открытый ключ, прежде чем сравнивать его с вашим известным списком открытых ключей. (Это также может работать, если вы передадите этот сертификат клиента через mod_proxy , например, на внутренний сервер Java.) Существуют библиотеки в PHP, Perl, Python, Java (выберите язык, который вы предпочитаете) для анализа содержимое сертификата, но это потребует некоторого программирования и, конечно, будет аутентифицировать только запросы, которые обрабатываются таким приложением.

1
ответ дан 5 December 2019 в 19:33

Теги

Похожие вопросы