Я вынужден использовать Nginx на a.ddns.net и Apache для b.ddns.net (решение обратного прокси слишком сложно из-за установленных настроек). Реальные имена серверов отредактированы, но оба подтверждены как соответствующие сертификатам IP и SSL, подтвержденным OpenSSL.
В существующих настройках используются IP-хосты соответственно:
server {
listen 192.168.1.174:443 ssl;
server_name a.ddns.net;
root /var/www/html/a.ddns.net/;
add_header Strict-Transport-Security "max-age=31536000";
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
ssl_certificate /etc/letsencrypt/archive/a.ddns.net/cert1.pem;
ssl_certificate_key /etc/letsencrypt/archive/a.ddns.net/privkey1.pem;
Доступны сайты Apache2.4 / a.ddns.net.conf
SSLStrictSNIVHostCheck on
<VirtualHost 192.168.1.173:443>
ServerAdmin webmaster@localhost
ServerName b.ddns.net
DocumentRoot /var/www/html/
Alias /test /media/data/RPi1-Pictures
/media
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
</IfModule>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/b.ddns.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/b.ddns.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLVerifyClient none
Настройка dnsmasq (Pi-hole) и / hosts с такими доменными именами:
127.0.0.1 a.ddns.net b.ddns.net raspberrypi3.home localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.1.174 a.ddns.net
192.168.1.173 b.ddns.net
......
В локальной сети он работает так, как ожидалось, поскольку домены a и b появляются в файлах dnsmasq / hosts, но когда я пробую внешний тест с помощью dig / curl и т. Д., Я сталкиваюсь с проблемой сертификата SSL, которая, похоже, показывает, что a.ddns.net (Nginx) не фактически решается: -
curl https://a.ddns.net -v * Trying 92.106.xxx.xx:443... * TCP_NODELAY set
* Connected to a.ddns.net (92.106.xxx.xx) port 443 (#0)
* ALPN, offering h2 * ALPN, offering http/1.1
* successfully set certificate verify locations: * CAfile: /data/data/com.termux/files/usr/etc/tls/cert.pem CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12):* TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1
ALPN, server accepted to use http/1.1
* Server certificate:
* subject: CN=b.ddns.net
* start date: Oct 13 13:27:18 2019 GMT
* expire date: Jan 11 13:27:18 2020 GMT
* subjectAltName does not match a.ddns.net
* SSL: no alternative certificate subject name matches target host name 'a.ddns.net'
* Closing connection 0
* TLSv1.2 (OUT), TLS alert, close notify (256):
curl: (60) SSL: no alternative certificate subject name matches target host name
Я думал, что описанная выше установка будет более простым решением, чем создание сложного обратного прокси, потому что я понимал, что dnsmasq с SNI как на Apache, так и на Nginx сможет разрешить правильный сервер из URL-адреса клиента. Что мне не хватает?
Есть ли альтернативное или, может быть, более простое решение для редактирования сертификата SSL с помощью SAN, т.е. добавить a.ddns.net в b.ddns.net?
Спасибо за любое руководство
Я думаю, вам не хватает важной части вашей установки. Хотя вы показываете внутреннюю конфигурацию сервера, который имеет разные внутренние IP-адреса для двух серверов, и объясняете внешнюю конфигурацию, в которой оба домена имеют одинаковый IP-адрес, вы не объясняете, как сопоставление внешнего IP-адреса с правильным внутренний IP-адрес сделан.
Я предполагаю, что вы выполняете простую переадресацию портов с внешнего IP-адреса на внутренний IP-адрес одного из серверов (для b.ddns.net, то есть Apache). И из-за этого он всегда будет обращаться только к Apache, у которого нет конфигурации для a.ddns.net.
Один из способов решить эту проблему - использовать только перенаправление портов на nginx, который затем имеет конфигурацию для обоих доменов. Поскольку вам нужен Apache для одного домена, nginx может быть настроен как обратный прокси для этого домена и пересылать (не перенаправлять!) Все на внутренний Apache.