У меня настроен клиентский сертификат и работает в Apache. Я хочу передать сертификаты клиента X.509 в кодировке PEM на внутренний сервер.
Я пробовал использовать SSLOptions + ExportCertData. Это вообще ничего не делает, хотя в документации указано, что в качестве заголовков следует добавить SSL_SERVER_CERT, SSL_CLIENT_CERT и SSL_CLIENT_CERT_CHAINn (с n = 0,1,2, ..). Есть идеи, почему этот вариант не работает?
Затем я попытался сам установить заголовки с помощью RequestHeader. Это отлично работает для всех переменных, кроме SSL_CLIENT_CERT_CHAIN. В заголовке отображается null. Есть идеи, почему цепочка сертификатов не заполняется?
Это моя первая конфигурация Apache:
<VirtualHost 192.168.56.100:443>
ServerName www.test.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/apache2/ssl/certs/www.test.org.crt
SSLCertificateKeyFile /etc/apache2/ssl/private/www.test.org.key
SSLCACertificateFile /etc/apache2/ssl/ca/ca.crt
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
<Location /carbon>
ProxyPass http://www.test.org:9763/carbon
ProxyPassReverse http://www.test.org:9763/carbon
</Location>
<Location /services/GbTestProxy>
SSLVerifyClient require
SSLVerifyDepth 5
SSLOptions +ExportCertData
ProxyPass http://www.test.org:8888/services/GbTestProxy
ProxyPassReverse http://www.test.org:8888/services/GbTestProxy
</Location>
</VirtualHost>
Это моя вторая конфигурация Apache:
<VirtualHost 192.168.56.100:443>
ServerName www.test.org
ServerAdmin webmaster@localhost
DocumentRoot /var/www
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/apache2/ssl/certs/www.test.org.crt
SSLCertificateKeyFile /etc/apache2/ssl/private/www.test.org.key
SSLCACertificateFile /etc/apache2/ssl/ca/ca.crt
<Proxy *>
AddDefaultCharset Off
Order deny,allow
Allow from all
</Proxy>
<Location /carbon>
ProxyPass http://www.test.org:9763/carbon
ProxyPassReverse http://www.test.org:9763/carbon
</Location>
<Location /services/GbTestProxy>
SSLVerifyClient require
SSLVerifyDepth 5
SSLOptions +ExportCertData
RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
RequestHeader set SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}s"
RequestHeader set SSL_CLIENT_S_DN_CN "%{SSL_SERVER_S_DN_CN}s"
RequestHeader set SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}s"
RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}s"
RequestHeader set SSL_CLIENT_CERT_CHAIN_0 "%{SSL_CLIENT_CERT_CHAIN_0}s"
RequestHeader set SSL_CLIENT_CERT_CHAIN_1 "%{SSL_CLIENT_CERT_CHAIN_1}s"
RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
ProxyPass http://www.test.org:8888/services/GbTestProxy
ProxyPassReverse http://www.test.org:8888/services/GbTestProxy
</Location>
</VirtualHost>
Надеюсь, кто-то может помочь.
С уважением, нидкил
Это старый вопрос, но я отвечу на него, если кто-то еще наткнется на него, как я.
Сертификат эмитента фактически находится в позиции 0 в цепочке от Apache, а не 1. Чтобы получить сертификат эмитента, который вы хотите:
RequestHeader set SSL_CLIENT_CERT_CHAIN_0 "%{{SSL_CLIENT_CERT_CHAIN_0}}s"
SSLOptions +ExportCertData
не добавляет заголовки в прокси-запрос, он добавляет переменные среды - переменные среды, которые вы пытаетесь добавить в заголовки во второй конфигурации (но тогда их нет в среде, поскольку вы сбросили SSLOptions
config).
Вам понадобится как RequestHeader set
config, а также SSLOptions +ExportCertData
.