Рейтинг:0

Обратный прокси-сервер Apache с самозаверяющим сертификатом

флаг pl

Я запускаю аппаратное устройство Unifi, которое поставляется с самозаверяющим сертификатом, выпущенным unifi.local. Для моей текущей настройки невозможно напрямую импортировать сертификат на устройство по нескольким причинам, поэтому я попытался избавиться от сообщения о недопустимом сертификате моего браузера с помощью обратного прокси-сервера на основе apache2, который обеспечивает доступ к устройству под другой домен, защищенный сертификатом Letsencrypt.

Моя текущая установка выглядит следующим образом:

Ноутбук <-> Обратный прокси-сервер Apache (2.4.48, Debian, сертификат доверенного домена с подстановочными знаками) <-> Устройство Unifi (самозаверяющий сертификат)

Моя идея состоит в том, чтобы предоставить защищенный домен под названием unifi.mydomain.tld что обеспечивает безопасный доступ к устройству.

В моем обратном прокси-сервере apache я создал и включил файл конфигурации, который выглядит следующим образом:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    Serveradmin [email protected]"
    ServerName unifi.mydomain.tld

    SSLProxyEngine On
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    ProxyPass "/" "https://10.0.1.1/"
    ProxyPassReverse "/" "https://10.0.1.1/"
    ProxyPreserveHost Off

    TransferLog /var/log/apache2/proxies/unifi_access.log
    ErrorLog /var/log/apache2/proxies/unifi_error.log

    <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
    </IfModule>

    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
    SSLCipherSuite SSL ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384
    SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
    SSLOpenSSLConfCmd DHParameters /mnt/certificates/diffie-hellman/dhparam4096.pem
    SSLHonorCipherOrder on
    SSLCompression off
    SSLSessionTickets off

    SSLCertificateFile /etc/letsencrypt/live/mydomain.tld/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.tld/privkey.pem
</VirtualHost>

# Originally from /etc/letsencrypt/options-ssl-apache.conf
# Written directly here because otherwise SSLProtocol etc is overwritten
# Add vhost name to log entries:
SSLOptions +StrictRequire
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common

</IfModule>

Однако, если я получаю доступ unifi.mydomain.tld, мой браузер возвращает сертификат для unifi.local а не для unifi.mydomain.tld и, следовательно, это создает ошибку, что сертификат не является доверенным. Несколько советов, упомянутых, чтобы превратить SSLProxyVerify к никто, и SSLProxyCheckPeerName, SSLProxyCheckPeerCN, и SSLProxyCheckPeerExpire к выключенныйоднако ни один из этих трюков не сработал. Я не могу импортировать самозаверяющий сертификат Unifi snakeoil на свой обратный прокси-сервер.

Я не уверен, жалуется ли сам apache2 на сертификат или возвращает неправильный сертификат. Как я могу получить доступ к устройству, просматривая unifi.mydomain.tld без получения этой ошибки сертификата?

dave_thompson_085 avatar
флаг jp
Это не apache, почти наверняка ваш браузер подключается к Unifi НЕ apache, как вы хотите. Проверьте разрешение имени для unifi.mydomain.tld, используемое браузером. Я говорю «разрешение имен», а не конкретно DNS; разрешение имен _часто_ использует DNS, но может использовать множество других методов. Если вы сомневаетесь, попробуйте получить сетевой захват (wireshark, tcpdump или аналогичный), показывающий соединения браузера и, в частности, IP-адрес и MAC-адрес, к которым он подключается.
Рейтинг:1
флаг us

Это сработало для меня!

Требования:

  1. Apache Tomcat на: 8443 с самозаверяющим ключом
  2. Apache HTTPD с обратным прокси-сервером на локальный хост: 8443 Tomcat
  3. Апач HTTPD ТРЕБУЕТ Взаимная аутентификация клиентов. Если это не является для вас обязательным, то установите: SSLVerifyClient none
  4. Apache HTTPD будет передавать идентификатор X.509 вызывающего абонента через обратный прокси-сервер на tomcat.



 Журналы ErrorLog/ssl_error_log
 Журналы TransferLog/ssl_access_log
 Предупреждение LogLevel
 Прокси-запросы включены
 ProxyPass /test1 https://localhost:8443/test/
 ProxyPassReverse /test1 https://localhost:8443/test/
# Настройки SSL для DMZ
 SSLEngine включен
 SSLПротокол TLSv1.2
 SSLCipherSuite HIGH:!aNULL:!MD5:!SEED:!IDEA
 SSLCertificateKeyFile /home/jdoyle/sample_httpd_server_example_root_ca_.key
 SSLCertificateFile /home/jdoyle/sample_httpd_server_example_root_ca_.cer
 SSLCACertificateFile /home/jdoyle/consolidated_cacerts.cer
# Настройки SSL для обратного прокси
 SSLProxyEngine включен
 SSLProxyVerify требуется
 SSL-прокси-протокол TLSv1.2
 SSLProxyCheckPeerName выключен
 SSLProxyCACertificateFile /home/jdoyle/consolidated_cacerts.cer
 SSLVerifyClient требует
 SSLVerifyDepth 10
# Передаем SSL Conext на tomcat

RequestHeader устанавливает SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
RequestHeader устанавливает SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}s"
RequestHeader устанавливает SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}s"
Заголовок запроса устанавливает SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
Заголовок запроса устанавливает SSL_CLIENT_V_START "%{SSL_CLIENT_V_START}s"
RequestHeader устанавливает SSL_CLIENT_V_END "%{SSL_CLIENT_V_END}s"
Заголовок запроса установил SSL_CLIENT_M_VERSION "%{SSL_CLIENT_M_VERSION}s"
RequestHeader устанавливает SSL_CLIENT_M_SERIAL "%{SSL_CLIENT_M_SERIAL}s"
Заголовок запроса устанавливает SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
RequestHeader устанавливает SSL_SERVER_M_VERSION "%{SSL_SERVER_M_VERSION}s"
RequestHeader устанавливает SSL_SERVER_I_DN "%{SSL_SERVER_I_DN}s"
....

SSLOptions +ExportCertData +StrictRequire
....




Примечания:

а. SSLProxyCACertificateFile предназначен для соединения httpd<->tomcat и содержит открытый ключ самоподписанного сертификата сервера Tomcat.

б. SSLCACertificateFile предназначен для соединения DMZ <-> httpd и должен содержать все сертификаты ЦС для любого входящего соединения.

Drudge avatar
флаг pl
Спасибо, надеялся, что мне не нужно устанавливать дополнительное программное обеспечение, такое как Tomcat, однако это работает.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.