Порядок сертификатов в файле
Сервер отдаёт сертификаты списком. Порядок в этом списке не украшение: клиент идёт по нему сверху вниз и строит цепочку.
Как правильно
Первым в файле лежит листовой сертификат, за ним промежуточные, по порядку подписи. Корневой в файл не кладут: он есть у клиента, и лишнее звено только удлиняет рукопожатие.
fullchain.pem = листовой + промежуточный(е) # nginx ssl_certificate /etc/nginx/ssl/example/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/example/privkey.pem;
Если порядок перепутан
Клиенты, которые собирают цепочку сами, могут этого не заметить. Строгие замечают сразу. Частый симптом: в браузере сайт открывается, а в Java или в мобильном приложении падает проверка.
Бывает и наоборот: цепочка собирается не до конца, и клиент сообщает про самоподписанный сертификат. Хотя на самом деле промежуточный просто лежит ниже, чем нужно.
Проверка
Смотреть надо не на файл на диске, а на то, что уезжает наружу:
openssl s_client -connect example.com:443 -servername example.com -showcerts
Сервер должен отдать больше одного сертификата, и первый должен совпадать с именем, к которому вы подключились.
Откуда берётся путаница
У многих инструментов рядом лежат два файла: cert.pem только с листовым и fullchain.pem вместе с промежуточными. В конфиг сервера обычно нужен второй. Если после замены сертификата отвалились не все клиенты, а только часть, скорее всего в конфиг попал первый.
Проверял это на своём сайте: Nginx принимал fullchain, а один старый клиент всё равно ругался, потому что промежуточный в файле стоял после корневого. Переставил, заработало.