Проверка на уязвимость SSL-сертификата клиента Apache

Я ищу изящную реализацию безопасности, чтобы клиенты могли общаться с моим экземпляром Apache. Это в основном система для взаимодействия системного API и не включает клиентов вне организации. То, что мы реализовали до сих пор, выглядит следующим образом:

  1. Мы создали клиентский ключ и сгенерировали CSR.
  2. CSR, подписанный CA организации.
  3. Out Сертификат в сочетании с секретным ключом клиента и сгенерировал pfx. То же самое относится и к системе вызывающих API.

Приведенные ниже изменения были внесены в Apache httpd.conf

SSLVerifyClient require
SSLVerifyDepth 3
<Location />
    SSLRequire %{SSL_CLIENT_S_DN_CN} eq "client_cn_name" 
</Location>

. Это правильный подход? Проблема здесь в том, что нет проверки на стороне сервера, в том смысле, что нигде нет подтверждения связи с экземпляром Apache. Сертификат клиента находится непосредственно под корневым сертификатом. Я подумал, стоит ли подписывать csr клиента закрытым ключом домена Apache, который фактически выдается CA CA?

Также кто-нибудь может объяснить, как будет вести себя эта директива SSLRequire. Я попытался создать самозаверяющий сертификат, который похож на сертификат клиента с тем же CN для root и client. Но рукопожатие прошло неудачно, однако я не уверен, есть ли вероятность того, что самоподписанный сертификат сможет пройти эту защиту?

Примите ваши мысли.

1
задан 28 November 2020 в 11:26
1 ответ

Клиентские сертификаты можно подписывать сертификатом организации или сертификатом сервера Apache. Какой бы из них вы ни использовали, обязательно поместите его в директиву SSLCACertificateFile, например:

SSLCACertificateFile /path/to/apache/cert

Как сказано в документации для SSLCACertificateFile, это файл «сертификатов центров сертификации (CA), клиенты которых вы иметь дело с. Они используются для аутентификации клиента». Таким образом, это гарантирует, что для принятия клиентского сертификата он должен быть подписан этим сертификатом и ключом. Если вы используете для этого сертификат сервера Apache, вы рассматриваете его как промежуточный сертификат подписи для клиентских сертификатов.

Обратите внимание, что SSLRequire устарел. В документах говорится, что это делает то же самое:

Require expr %{SSL_CLIENT_S_DN_CN} eq "client_cn_name"

и это помогает прояснить, что проверка сертификата SSL не задействована; это просто проверка истинности выражения.

0
ответ дан 28 November 2020 в 10:51

Теги

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