Назад | Перейти на главную страницу

SSL / TLS Сертификат клиента Аутентификация с использованием правил RewriteCond и Rewrite для перцептивного перенаправления неавторизованного трафика

В конце концов, я пишу здесь, потому что я плохо борюсь с apache, SSL / TLS и аутентификацией сертификата клиента, которая должна использовать серийный номер сертификата для ограничения доступа к определенному вызову API.

лучше пояснить некоторые детали:

Пользователь должен иметь доступ:

https: // {host} / apiv3xx / s? test без каких-либо проблем и ограничений, но для следующего URL:

https: // {хост} / apiv3xx / x? action = login & user = blablabla для выполнения звонка требуется сертификат клиента. Думал реализовать следующее решение:

<Location /apiv3xx>
    SetEnv api 1
    SSLOptions +StdEnvVars -ExportCertData
    SSLVerifyClient optional
    SSLVerifyDepth 10
</Location>

и, кроме того, некоторые правила перезаписи для управления логикой:

RewriteCond %{REQUEST_URI} ^/apiv3xx/ [NC]
RewriteCond %{QUERY_STRING} action=log([^&]*)?(?=&|$) [NC,OR]
RewriteCond %{QUERY_STRING} action=adm([^&]*)?(?=&|$) [NC,OR]
RewriteCond %{QUERY_STRING} action=ctc([^&]*)?(?=&|$) [NC]
RewriteCond %{SSL:SSL_CLIENT_M_SERIAL} !(01000000000140AAD72ACCXXXXXX|02000000000140BAD37F1XXXXXXX)
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !^SUCCESS$
RewriteRule (.*) - [F,L]

Итак ... моя проблема сейчас проста: я не получаю серийный номер из запроса и, по логике, Условия не выполняются.

Я много дней бродил по Интернету в поисках решения и нашел только этот старый статья (из которого я в конце концов вычитаю свое решение), но оно кажется бесполезным.

Запишите сеанс SSL с помощью WireShark, затем проверьте протокол SSL ALERT. Это поможет вам разобраться в переговорах. Включите отладку SSL на сервере apache. Убедитесь, что сервер Apache запрашивает у клиента повторное согласование сеанса и что клиент отправляет сертификат. При необходимости вы также можете расшифровать сеанс, если у вас есть ключ RSA и сертификат сервера.

Также на клиенте вы должны сделать доверенным сервер. В противном случае клиент не отправит сертификат.

Также обратите внимание, что протокол SSL / TLS был изменен из-за ошибки повторного согласования. Клиенты и серверы, использующие разные версии протокола, несовместимы. Видеть: CVE-2009-3555

Возможно, вам потребуется включить:

SSLOptions +OptRenegotiate