Lets Encypt, Firefox, издатель сертификата Peer's не распознан

Lets Encypt, Firefox, издатель сертификата Peer's не распознан

Недавно я перенес терминацию TLS обратно на обратный прокси-сервер с внутреннего сервера и столкнулся с этой весьма специфической проблемой.

При подключении к моему сайту nextcloud Firefox пишет SEC_ERROR_UNKNOWN_ISSUER.

Дополнительная информация об ошибке (информация о сертификате внизу):

https://nextcloud.domain.com/

Peer’s Certificate issuer is not recognized.


HTTP Strict Transport Security: false

HTTP Public Key Pinning: false

Странно то, что эта проблема не возникает ни в одном другом браузере, только в Firefox (Firefox 95, Ubuntu 20.04, Windows 10 и Android 12; без расширений). Она возникает только после первоначального просмотра сайта, затем закрытия Firefox, а затем его повторного открытия и перехода по любому URL-адресу на NextCloud, и возникает ошибка. К сожалению, это не совсем то, что ошибка возникает при втором просмотре, но она будет происходить независимо от того, будет ли это второй, третий или четвертый просмотр после перезапуска Firefox. Я могу устранить ошибку, перезапустив nginx на моем обратном прокси-сервере.

Чтобы было ясно, похоже, что перезапуск Firefox вызывает ошибку; закрытие вкладки и повторное открытие не приводит к ошибке. Я также пробовал очистить Firefox от данных сайта и перезапустить, ошибка все равно возникает.

Самое странное, что у меня есть еще пара сайтов на том же обратном прокси, использующих lets encrypt certs (другой поддомен), и я не могу воспроизвести ошибку там. Похоже, она ограничена firefox+nextcloud+nginx. Хотя перезапуск бэкэнда nginx/server не влияет на нее. Так что я предполагаю, что должна быть определенная конфигурация, которую я упускаю на своем обратном прокси.

Я в растерянности, единственное, что изменилось, это где TLS прекращается и новый сертификат Lets Encrypt. Надеюсь, я упускаю что-то очевидное, и это не большая проблема.

Полная конфигурация nginx (без других поддоменов и типов MIME):

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}
http {
        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/sites-enabled/*;

        ##
        # Hardening
        ##
 
        add_header Allow "GET, POST, HEAD" always;
        add_header X-XSS-Protection "1; mode=block";
}


# configuration file /etc/nginx/snippets/ssl-params.conf:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
add_header Strict-Transport-Security "max-age=15552000; includeSubdomains; preload";
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer" always;
add_header X-Download-Options "noopen" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

# configuration file /etc/nginx/sites-enabled/nextcloud.domain.com:
server {
        listen 443 ssl http2;
        ssl_certificate /etc/letsencrypt/live/nextcloud.domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/nextcloud.domain.com/privkey.pem;
        include snippets/ssl-params.conf;
        server_name nextcloud.domain.com;
        location / {
                proxy_pass https://BACKENDIP;
                proxy_set_header X-Real-IP $remote_addr;
        }
}

# configuration file /etc/nginx/sites-enabled/reverseproxy.conf:
server {
        listen 80;
        server_name _;
        return 301 https://$host$request_uri;
}

Некоторая информация с сертификата сервера через Firefox:

Subject Name
Common Name nextcloud.domain.com

Issuer Name
Country US
Organization Let's Encrypt
Common Name R3

Validity
Not Before Fri, 10 Dec 2021 19:29:21 GMT
Not After Thu, 10 Mar 2022 19:29:20 GMT

Промежуточный сертификат:

Subject Name
Country US
Organization Let's Encrypt
Common Name R3

Issuer Name
Country US
Organization Internet Security Research Group
Common Name ISRG Root X1

Validity
Not Before Fri, 04 Sep 2020 00:00:00 GMT
Not After Mon, 15 Sep 2025 16:00:00 GMT

Корневой сертификат:

Subject Name
Country US
Organization Internet Security Research Group
Common Name ISRG Root X1

Issuer Name
Organization Digital Signature Trust Co.
Common Name DST Root CA X3

Validity
Not Before Wed, 20 Jan 2021 19:14:03 GMT
Not After Mon, 30 Sep 2024 18:14:03 GMT

Никаких ошибок на прокси или сервере, связанных с чем-либо. HTTP-запрос отображается как код 200.

Вот сравнение двух сертификатов на двух моих серверах, которые были выпущены через Lets Encrypt Certbot с разницей в несколько минут:

Это сертификат, с которым у Firefox возникла проблема: Плохой сертификат

Это сертификат, который принимает Firefox: Хороший сертификат

Немного тревожная проблема заключается в том, что при переходе на сайт, которому Firefox не доверяет, в Chrome я получаю корневой сертификат, который НЕ выдан той же организацией.

Связанный контент