Привет Stackoverflowrians!
У меня есть сервер Ubuntu 18.04 с установленным apache2, на котором размещен мой рабочий сервер, а также я создал Docker-контейнер с той же конфигурацией для разработки и тестирования моего WebApp.
На рабочем сервере я использую клиентские сертификаты для авторизации доступа к моему API, и он работает просто отлично.Но на моем сервере разработки я не могу получить заголовки $ _SERVER сертификата клиента (SSL_CLIENT_VERIFY и т. Д.) В моем коде PHP, и кажется, что после ProxyPass он забывает исходные заголовки.
У меня настроен виртуальный хост apache наоба экземпляра и производственный сервер apache просто ProxyPass-ses от порта 443 до док-порта 8080. В экземпляре докера снова перейдите через apache VirtualHost, чтобы найти DocumentRoot.
Все необходимые модули apache включены в обоих экземплярах.
Это моя производственная конфигурация apache VirtualHost
<VirtualHost *:443>
ServerName dev.mywebapp.com
ProxyPass "/" "http://dev.mywebapp.com:8080/"
ProxyPassReverse "/" "http://dev.mywebapp.com:8080/"
#Server Certificate for HTTPS
SSLCertificateFile /etc/letsencrypt/live/dev.mywebapp.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dev.mywebapp.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
#Client Certificate
SSLCACertificateFile /etc/ssl/local-cert.crt
SSLVerifyClient optional
SSLVerifyDepth 10
SSLOptions +StdEnvVars
</VirtualHost>
И это VirtualHost на моем экземпляре докера
<VirtualHost *:80>
ServerName dev.mywebapp.com
ServerAdmin pdo@agrointelli.com
DocumentRoot /var/www/html/mywebapp/public_html
</VirtualHost>
В моем API.php я использую ifутверждение для проверки сертификата отправляющего клиента
if (!isset($_SERVER['SSL_CLIENT_M_SERIAL'])
|| !isset($_SERVER['SSL_CLIENT_V_END'])
|| !isset($_SERVER['SSL_CLIENT_VERIFY'])
|| $_SERVER['SSL_CLIENT_VERIFY'] !== 'SUCCESS'
|| !isset($_SERVER['SSL_CLIENT_I_DN'])
) {
$this->output->set_status_header(403);
echo json_encode(array('response'=>'error','message'=>"Certificate is not provided!"));
}
Я пытался добавить на рабочий сервер VirtualHost Config ProxyPreserveHost On и Set Header Set
Также япытался настроить SSLVerifyClient на сервере разработки, но безуспешно.
и другие опциия нашел, но $ _SERVER в контейнере Docker разработки не имеет всех тех заголовков SSL_CLIENT_ *, которые мне нужны.Что я могу сделать, чтобы иметь возможность пересылать их?Похоже, что рабочий сервер действительно проверяет сертификат клиента, но после прокси-сервера экземпляр докера об этом не знает.