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

MySQL может быть настроен к данным кэша, но обычно нет. Это назад отвечает клиенту только, когда данные находятся на диске. Возможно, у Вас есть установка mysql таким способом, которым она пытается восстановить грязно закрытые таблицы автоматически при запуске, и некоторые записи были удалены.

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

Могло случиться так, что ОС настроена для кэширования записей (я думаю человечность ext3, значения по умолчанию к 5-секундным фиксациям... Я не знаю о ext4, это находится в 10,4).

9
задан 21 April 2012 в 23:16
2 ответа

Как вы обнаружили, вы можете отключить проверку сертификата на уровне подтверждения SSL / TLS в Apache Httpd, используя SSLVerifyCLient optional_no_ca .

Вторая проблема - вы вы столкнетесь с тем, что вы пытаетесь сделать, это заставить клиента отправить сертификат. Поскольку ваш сертификат не предназначен для использования в PKI, он может быть самоподписанным и иметь разных издателей.

При запросе сертификата клиента сервер отправляет CertificateRequest TLS-сообщение на адрес клиент во время handhsake. Это сообщение содержит список certificate_authorities :

Список отличительных имен приемлемого сертификата. органы власти. Эти отличительные имена могут указывать на желаемый отличительное имя для корневого CA или для подчиненного CA; таким образом, это сообщение можно использовать для описания как известных корней, так и желаемое пространство авторизации. Если certificate_authorities список пуст, тогда клиент МОЖЕТ отправить любой сертификат соответствующий ClientCertificateType, если нет внешняя договоренность об обратном.

Браузеры используют это, чтобы выбрать, какой сертификат клиента отправить (если есть).

(Обратите внимание, что часть о пустом списке есть только в спецификации, начиная с TLS 1.1 и далее. SSL 3.0 и TLS 1.0 ничего не говорят об этом, и на практике это тоже будет работать.)

Для этого есть два варианта.

  • Если ожидаемые клиентские сертификаты будут самоподписанными, все они будут иметь разных издателей. Поскольку вы не знаете, чего ожидать, серверу нужно будет отправить пустой список. Для этого используйте директиву SSLCADNRequestFile и укажите ее на файл, содержащий только пустую строку (если я хорошо помню, она не работает с полностью пустым файлом).

  • Второй (менее чистый) вариант. Согласовать DN эмитента, общий для всех ожидаемых клиентских сертификатов, независимо от того, были ли они действительно выпущены этим сертификатом CA (или существует ли этот CA). Поступая так, вы значительно нарушите модель PKI (больше).

    Если вы согласны с DN эмитента, например CN = Dummy CA (например). Кто угодно может создать самозаверяющий сертификат, используя CN = Dummy CA в качестве DN субъекта (и DN эмитента), возможно, с другими ключами. Хотя директива SSLCADNRequestFile предполагает, что для построения списка будут настроены сертификаты, они вообще не используются для проверки сертификата клиента, это просто сложный (но естественный в контексте других директив) способ настройки списка certificate_authorities . Если вы в качестве службы помещаете самозаверяющий сертификат с этими именами в SSLCADNRequestFile , это заставит сообщение TLS CertificateRequest использовать CN = Dummy CA в списке certificate_authorities (на данном этапе это просто имена, а не сертификаты). Затем клиент сможет получить свой собственный сертификат с DN эмитента CN = Dummy CA , независимо от того, может ли его подпись быть проверена этим сертификатом (те же ключи) или нет, поскольку проверка подписи не выполняется. в любом случае.

При этом следует помнить, что с SSLVerifyCLient optional_no_ca проверка подлинного сертификата не выполняется (я полагаю, вы могли бы проверить переменную SSL_CLIENT_VERIFY , если ваша ручная проверка выполняется просто резервное решение для PKI, которое вы все равно настроили). Все, что вы будете знать на этом этапе, это то, что у клиента есть закрытый ключ для сертификата открытого ключа, который он представил (гарантированный сообщением TLS CertificateVerify ): вам нужно будет выполнить некоторую форму проверки, если вы хотите, чтобы была какая-то аутентификация. (Вы не можете доверять какому-либо содержимому сертификата, то есть любой связи между его открытым ключом и именами / атрибутами, которые он содержит.)

Это не будет работать с файлами, но вы можете сделать это для приложения (например, PHP / CGI / ... даже Java, если вы передаете сертификат прокси-серверу Java). Один из основных способов - иметь заранее известный список открытых ключей, или вы можете изучить идеи в FOAF + SSL / WebID .

10
ответ дан 2 December 2019 в 22:30

Использование SSLVerifyCLient optional_no_ca (вместо require ) приводит к тому, что apache не проверяет выдающий CA (и, следовательно, не требует файла сертификата CA или пути). Это позволяет клиенту / пользователю не отправлять сертификат, поэтому проверка того, использовался ли сертификат вообще, должна выполняться отдельно.

(По-видимому, я просто не смог полностью прочитать документацию mod_ssl . )

2
ответ дан 2 December 2019 в 22:30

Теги

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