Переадресация заголовков SSLVerifyClient через ProxyPass в экземпляр Apache Docker - PullRequest
0 голосов
/ 03 апреля 2019

Привет 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_ *, которые мне нужны.Что я могу сделать, чтобы иметь возможность пересылать их?Похоже, что рабочий сервер действительно проверяет сертификат клиента, но после прокси-сервера экземпляр докера об этом не знает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...