Как получить цепочку сертификатов клиента во время аутентификации сертификата с помощью Apache?

Я пытаюсь настроить сервер Apache 2.4.29 в качестве обратного прокси-сервера с завершением SSL для моего приложения. Прокси-сервер должен запросить сертификат клиента во время подтверждения SSL и передать его приложению для проверки. Я использую следующую конфигурацию виртуального хоста:

<VirtualHost *:443>
# Default settings
    DefaultType none

    RewriteEngine on
    AllowEncodedSlashes on

    RewriteCond %{QUERY_STRING} transport=polling
    RewriteRule /(.*)$ http://127.0.0.1:8088/$1 [P]

    ProxyRequests off

    ProxyPass "/" "http://127.0.0.1:8088/"
    ProxyPassReverse "/" "http://127.0.0.1:8088/"

    RequestHeader set X-Forwarded-Proto "https"
# Default settings

# SSL settings
    SSLEngine On
    # A file with certificate data in PEM format
    # https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatefile
    SSLCertificateFile "/path/to/server-chain.cert.pem"
    # The PEM-encoded private key file for the server
    # https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslcertificatekeyfile
    SSLCertificateKeyFile "/path/to/server.key.pem"
# SSL Settings

# Client certificate auth settings
    SSLOptions +ExportCertData
    SSLCACertificateFile "/path/to/ca.cert.pem"
    # Enable client certificate authentication
    SSLVerifyClient optional_no_ca
    # Specify the max depth of the certificate chain
    SSLVerifyDepth 3

    # Add the client certificate to the request header
    #RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT_CHAIN_3}s"
    RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}s"


# Client certificate auth settings

</VirtualHost>

Уточнение:

  • сертификат сервера выдается промежуточным центром сертификации
  • Я составил server-chain.cert. промежуточный CA 1 сертификат сервера промежуточный CA 2 сертификат клиента A сертификат клиента B

    Конфигурация работает нормально, и я могу получить сертификат клиента из заголовка SSL_CLIENT_CERT входящего запроса к моему приложению.

    Следующим шагом является проверка сертификата клиента. Полагаю, для этого мне нужна вся цепочка клиентских сертификатов. Но я получаю в заголовке только листовой сертификат клиента. Когда я пытаюсь использовать переменную SSL_CLIENT_CERT_CHAIN_n для установки заголовка в моей конфигурации Apache, я получаю (null) в качестве значения заголовка независимо от того, какие n я использую.

    Предложите способ получить всю цепочку сертификатов клиента от сертификата конечного клиента до родительского сертификата, указанного в директиве SSLCACertificateFile .

1
задан 4 April 2018 в 21:26
1 ответ

Для проверки сертификата клиента серверу требуется полная цепочка сертификатов, поскольку он. Если вы устанавливаете SSLCACertificateFile, то это сертификаты CA, которые отправляются клиенту, но они не должны содержать промежуточный сертификат. Вам также понадобится использовать более громоздкий SSLCACertificatePath, чтобы установить промежуточные сертификаты CA.

0
ответ дан 4 December 2019 в 04:06

Теги

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