Я использовал это руководство для установки проверка подлинности клиентского сертификата на Apache.
Я проверил свой сертификат с помощью директивы openssl verify
(он действителен ), я также успешно импортировал файл PFX в свою связку ключей macOS и установил для него значение «Всегда доверять».
Кроме того, я создал новый документ .htaccess
в каталоге /admin
моего сайта и заполнил его двумя строками.:
SSLVerifyClient require
SSLVerifyDepth 10
Идея, конечно, состоит в том, чтобы ограничить доступ к панели администратора через клиентский сертификат.
Теперь, когда я захожу на свою /admin
страницу в Chrome, я получаю это:
Таким образом, все похоже работает. Проблема в том, что браузер никоим образом не предлагает мне предоставить локальный сертификат, который я импортировал в Keychain, что не позволяет мне фактически получить доступ к ресурсу /admin
.
Что я упускаю?
Chrome не поддерживает аутентификацию post-handhsake, то есть повторное согласование SSL и отправку клиентского сертификата, когда соединение уже установлено, потому что (со страницы отчета об ошибках Chrome)
Post-аутентификация по рукопожатию имеет беспорядок с безопасностью, семантикой и проблемами DoS. (... )Требуется некоторая работа над спецификацией, чтобы он вообще был определен в HTTP/1.1 и, что более важно, явным образом не определен в HTTP/2 в пользу решения, дружественного к мультиплексированию-(..)
В Firefox вы можете включить его, но по умолчанию он не включен по тем же причинам, что и в Chrome.
Вы можете проверить отчеты об ошибках(Firefox , Chrome)для получения дополнительной информации.
Думаю, что вы можете сделать, это установить SSLVerifyClient
на optional
, переместить его на уровень VirtualHost
(с любыми директивами SSL*
, чтобы сертификат запрашивался во время рукопожатия), и требуют наличия сертификата в файле .htaccess
вроде этого:
AuthName "Admin resource"
AuthType Basic
Require ssl-verify-client