Перейти до вмісту

Основи безпеки

Сертифікат не довірений: три причини, крім закінчення строку

Сертифікат не довірений, хоча дата в порядку? Він називає іншу адресу, підписав сам себе або в його ланцюжку бракує ланки. Як зрозуміти, що саме.

Vlad Tkachenko9 хв читання
Картка сертифіката з печаткою і датою в акцентному кольорі під адресним рядком, де назва довша за бурштинову назву на картці.

Коротко

  • Сертифікат, якому не довіряють браузери, може бути цілком чинним за датою. Його відхиляють, бо він називає іншу адресу, бо підписав сам себе або бо прийшов без сертифіката, який за нього ручається.
  • Екран попередження той самий, що й для простроченого сертифіката, і поновлення не виправляє жодної з трьох причин. Код під попередженням підкаже, яка саме у вас.
  • У Lovable і Vercel власний домен показує це попередження, доки для нього не видано сертифікат. Таке очікування нормальне. Попередження, яке тримається довше, означає, що щось заважає сертифікату.

Учора ваш застосунок завантажувався без проблем. Сьогодні хтось надсилає вам знімок повноекранного попередження браузера, що підключення не приватне, і питає, чи сайт не зламали. Ви відкриваєте сертифікат, і він чинний до наступної весни. Він не прострочений, а браузер однаково каже, що сертифікат не довірений.

Очевидний крок полягає в тому, щоб його поновити, і для цього екрана він хибний. Кожна з трьох причин нижче стосується сертифіката, який уже чинний за датою, тож поновлення дасть вам пізнішу дату закінчення на сертифікаті, який і далі відхиляють з іншої причини.

У нашій статті про закінчення строку сертифікат є ліцензією у вітрині, яка каже, що ця крамниця справді та сама, що на вивісці. Браузер відвідувача читає на цій ліцензії три речі, перш ніж когось впустити: дату, назву крамниці, для якої її видали, і підпис того, хто її видав. Закінчення строку стосується дати. Ця стаття про дві інші.

Чому сертифікат не довірений, якщо його строк не минув?

Бо не пройшли ім’я або підпис, а браузер ставить ту саму стіну для кожної зі своїх перевірок.

Сертифікату довіряють лише тоді, коли він називає саме ту адресу, що в адресному рядку відвідувача, і його підписав центр, якому браузер уже довіряє, разом з кожним проміжним сертифікатом. Якщо щось одне не проходить, Chrome показує попередження, що підключення не приватне, а Firefox попередження про можливий ризик для безпеки, так само як для простроченого.

Різниця в дрібному тексті під попередженням. Прочитайте його, перш ніж щось змінювати:

Що показує ChromeЩо каже пояснення у FirefoxЩо це означаєЩо це виправляє
NET::ERR_CERT_COMMON_NAME_INVALIDСертифікат недійсний для вашої адресиЙого видали для іншого іменіСертифікат, у якому є саме ваша адреса
NET::ERR_CERT_AUTHORITY_INVALIDСертифікату не довіряють, бо він самопідписанийЗа нього ніхто не ручається, крім самого сервераСертифікат від справжнього центру сертифікації
NET::ERR_CERT_AUTHORITY_INVALIDВидавець сертифіката невідомийБраузер не може пов’язати його з жодним центром, якому довіряєПовний ланцюжок від визнаного центру
NET::ERR_CERT_DATE_INVALIDСтрок дії сертифіката минувДатаНовий сертифікат

Chrome показує той самий код для другого і третього рядка, тому варто відкрити сам сертифікат.

Якщо про попередження повідомила одна людина, а більше ніхто його не бачить, спитайте, в якій мережі вона була. Вихідний код Chrome називає однією з причин помилки імені мережу wifi, яка перенаправляє користувачів на сторінку входу. Така помилка зникає, щойно людина увійде в мережу.

Як побачити, що написано в сертифікаті?

Відкрийте його з попередження і прочитайте два поля: кому його видано і хто його видав.

У Chrome натисніть на позначку тривоги ліворуч в адресному рядку (Not secure в англомовному Chrome) і відкрийте сертифікат з панелі, що з’явиться. У Firefox натисніть Advanced у попередженні, а потім посилання на сертифікат сайту (так вони називаються в англомовному Firefox). Два браузери називають ті самі поля по-різному:

  • Поле про те, кому видано сертифікат (Issued To в англомовному Chrome, Subject Name у Firefox), містить ім’я, для якого його створили. Повний список імен, які він покриває, розташований у Subject Alternative Name, і саме цей список браузер порівнює з адресою.
  • Поле про те, хто його видав (Issued By у Chrome, Issuer Name у Firefox), містить центр, який його підписав.

Кожна з трьох причин читається там по-своєму:

  • Сертифікат називає іншу адресу. Це причина 1.
  • Власник і видавець мають однакову назву. Він підписав сам себе, і це причина 2.
  • Він називає вашу адресу, видавець є центром, про який ви чули, а браузер усе одно його відхиляє. Це причина 3, ланцюжок.

Причина 1: сертифікат виданий для іншої адреси

Сертифікат справжній і чинний за датою, але його видали для іншого імені. Це ліцензія іншої крамниці, яка висить у вашій вітрині.

Буває в трьох формах:

  • Ваш домен вказує на хостинг, у якого ще немає для нього сертифіката. Хостинг відповідає тим сертифікатом, що має, виданим на власне ім’я. Документація Lovable каже про це прямо: доки сертифікат не готовий, браузер показує попередження безпеки замість вашого сайту.
  • Сертифікат покриває одне написання вашої адреси, а відвідувач ввів інше.www.yourapp.com і yourapp.com для сертифіката є двома іменами, і кожне має бути в його списку.
  • Частина вашого DNS досі вказує туди, звідки ви пішли. Старий хостинг або сторінка-заглушка, яку показував ваш реєстратор, доки ви нічого не підключили, відповідає на цьому імені власним сертифікатом.
Для сертифіката адреса з www і адреса без www є двома іменами. Адреса з рядка має бути в списку.

У Lovable і Vercel ви не купуєте і не встановлюєте цей сертифікат самі. Хостинг видає його для кожного імені, яке ви додаєте в його налаштуваннях домену, щойно ваш DNS спрямує це ім’я на хостинг. Документація Lovable додає, що сертифікат, куплений у вашого реєстратора, її хостинг узагалі не використовує. Додайте обидва написання, спрямуйте обидва на хостинг і дочекайтеся, поки кожне матиме статус активного.

Причина 2: сертифікат підписав сам себе

За цей сертифікат не ручається ніхто, крім сервера, який його показує. Це ліцензія, яку власник крамниці надрукував удома.

Кожен браузер відхиляє такий сертифікат на публічному сайті, і так має бути. Коментар у вихідному коді Chrome пояснює причину одним рядком: самопідписаний сертифікат не дає жодного захисту від зловмисника, який стоїть між вашим відвідувачем і вашим застосунком.

Він трапляється на серверах, які хтось налаштовував вручну: орендований сервер, інструмент на власному хостингу, тестове налаштування, що потрапило в продакшн разом із застосунком. Білдер видає справжні сертифікати для доменів, які ви в ньому додаєте. Отже, самопідписаний сертифікат на застосунку, який хостить білдер, означає, що на вашій адресі відповідає щось інше, ніж білдер. Перевірте, куди вказує ваш DNS, перш ніж змінювати щось іще.

Виправлення полягає в сертифікаті від справжнього центру сертифікації. Let's Encrypt видає їх безкоштовно, і саме цей центр використовує Vercel, коли видає ваш.

Причина 3: ланку ланцюжка так і не надіслали

Сертифікат виданий для вашої адреси і підписаний справжнім центром, але сервер надіслав його без проміжного сертифіката, тож браузер не може пов’язати його ні з ким, кому довіряє. Ліцензію підписала філія, а листа від головного офісу, який ручається за цю філію, у вітрині немає.

Mozilla називає відсутній проміжний сертифікат однією з найпоширеніших проблем налаштування серверів. Firefox тепер заздалегідь завантажує копію кожного довіреного проміжного сертифіката, щоб його користувачі більше не стикалися з цією помилкою.

Саме через це причину важко помітити: на вашому ноутбуці все може виглядати нормально, а в когось іншого не працювати. Браузер, який має власну копію відсутньої ланки, заповнює прогалину. Програма, що використовує лише те, що надсилає ваш сервер, не має чим її заповнити. Наш сканер саме така програма, тому він може позначити сертифікат як недовірений, поки ваш власний браузер показує замок.

Той самий неповний ланцюжок, надісланий двом відвідувачам. Завершити його може лише той, у кого відсутня ланка вже була.

У білдері ланцюжком займаються за вас. Він губиться на серверах, налаштованих вручну, і там виправлення полягає в тому, щоб віддавати сертифікат разом із проміжним сертифікатом в одному файлі. Якщо ви користуєтеся certbot від Let's Encrypt, цей файл називається fullchain.pem, а помилка полягає в тому, що сервер дивиться на cert.pem замість нього. Щоб перевірити ззовні, безкоштовний тест сервера від SSL Labs позначає відсутній проміжний сертифікат як проблему ланцюжка.

Випадок власного домену, по порядку

Коли ви підключаєте власний домен до білдера, відвідувачі бачать це попередження, доки хостинг не матиме сертифіката для вашого імені, і попередження каже правду. Воно зникає саме, щойно сертифікат видано.

Порядок у Lovable:

  1. Додайте домен у Lovable. Він налаштовує yourapp.com і www.yourapp.com та показує їх окремо.
  2. Змініть DNS-записи у вашого реєстратора на значення, які дає Lovable. За словами Lovable, більшість змін набуває чинності за кілька годин, а поширення може тривати до 72 годин.
  3. Lovable перевіряє домен і видає сертифікат. Vercel працює так само: він автоматично доводить Let's Encrypt, що ім’я ваше, якщо домен вказує на Vercel.
  4. Відкривайте сайт, коли домен матиме статус Live. Так радить сама Lovable.
Між моментом, коли ваш домен спрямовано на хостинг, і появою сертифіката попередження правильне. Lovable просить звернутися до підтримки, якщо воно не зникло через 72 години.

Якщо попередження не зникло через 72 години, Lovable просить звернутися до її підтримки. Перш ніж писати, варто перевірити два налаштування:

  • Пошукайте запис CAA. Це запис DNS, який визначає, які центри можуть видавати сертифікати для вашого домену. Запис, що не включає центр вашого хостингу, блокує сертифікат, а піддомен успадковує записи CAA батьківського домену, якщо не має власних. Стаття про закінчення строку згадує той самий запис як причину невдалого поновлення. Тут він не дає видати навіть перший сертифікат.
  • Пошукайте проксі перед хостингом. Якщо ваш DNS у Cloudflare і для записів, які дав хостинг, увімкнено помаранчеву хмарку, відповідає Cloudflare замість вашого хостингу. Lovable каже, що тоді не може перевірити домен чи видати для нього сертифікати, і Lovable, і Vercel радять перевести ці записи в DNS only.

Що ми знайшли на 30 879 застосунках

Вісім мали сертифікат, якому не довіряв би жоден браузер, і кожен із них працював на домені, який підключив власник.

У серпні 2026 року наш скан прочитав сертифікат 30 879 живих застосунків: 29 927 на власному піддомені білдера і 952 на власному домені. Усі вісім недовірених сертифікатів були серед цих 952, трохи менше одного на сотню. Жоден застосунок на піддомені білдера такого не мав, що збігається з усім, що вище. На власній адресі білдера і ім’я, і сертифікат належать білдеру.

Наша знахідка фіксує, що сертифікат не пройшов перевірку, але не фіксує, яка з трьох причин це була, тож ми не можемо сказати, як розподіляються ці вісім. Прострочені сертифікати і ті, чий строк скоро мине, з того самого скану пораховані у статті про закінчення строку.

Щоб перевірити власний застосунок, наш безкоштовний скан читає ззовні сертифікат, який надсилає ваш сервер, і називає цю знахідку, коли її бачить. Це займає близько 20 секунд і не потребує облікового запису.

Помітити це наступного разу, коли щось зміниться

Сертифікат перетворюється з довіреного на відхилений, коли щось довкола нього змінюється: новий домен, переїзд DNS, увімкнений проксі. Важить перевірка, яка спрацьовує після зміни.

Проскануйте свій застосунок безкоштовно, щоб побачити, що сьогодні отримує браузер відвідувача.

  • Читає ззовні сертифікат, який надсилає ваш сервер, разом із вісьмома іншими перевірками.
  • Називає знахідку, коли сертифікату не довіряють, а також коли його строк минув або скоро мине.
  • Близько 20 секунд і без облікового запису.

Reeve Monitor, щоб дізнатися невдовзі після зміни.

  • Перевіряє ваш застосунок кожні 60 секунд, і сертифікат, якому він не може довіряти, рахується як збій вашого застосунку. Тож ви дізнаєтеся про це так само, як про будь-який інший збій.
  • Щогодини повторює всі дев’ять перевірок і надсилає вам лист, коли ваша оцінка падає.
  • Покриває до трьох застосунків.

Що робити зараз

Що робити

  • Прочитайте код під попередженням, перш ніж щось поновлювати. Помилка дати потребує нового сертифіката. Помилка імені чи центру потребує іншого.
  • Відкрийте сертифікат і порівняйте ім’я, для якого його видано, з адресою в рядку та з назвою того, хто його видав.
  • У білдері додайте yourapp.com і www.yourapp.com у налаштуваннях домену і спрямуйте обидва на нього.
  • Якщо новий домен і через 72 години показує попередження, пошукайте запис CAA або проксі перед хостингом, перш ніж писати в підтримку.
  • На сервері, яким ви керуєте самі, віддавайте повний ланцюжок і перевіряйте його ззовні через SSL Labs.

Коли попередження зникло, а застосунок однаково не завантажується, наступне питання в тому, чи справа у вашому застосунку, чи в платформі під ним, і Supabase впав чи ваш застосунок? показує, як це розрізнити.

Поширені запитання

Чому мій сайт пише, що підключення не приватне, якщо сертифікат не прострочений?

Бо дата лише одна з трьох речей, які перевіряє браузер, а дві інші не проходять самі по собі. Сертифікат також має називати саме ту адресу, яку ввів відвідувач, і бути підписаним центром, якому браузер довіряє, разом з кожним проміжним сертифікатом. Сертифікат, що не проходить будь-яку з цих двох перевірок, отримує те саме повноекранне попередження, що й прострочений, і поновлення нічого не змінює.

Що таке невідповідність імені в сертифікаті?

Сертифікат, виданий для однієї адреси, а показаний на іншій. Chrome повідомляє про це як NET::ERR_CERT_COMMON_NAME_INVALID, а Firefox пише, що сертифікат недійсний для вашої адреси. Сам сертифікат зазвичай справжній і чинний за датою. Він просто належить іншому імені, часто імені вашого хостингу, і саме таким хостинг відповідає на вашому домені, доки не видав сертифікат для вас.

Чому з www працює, а домен без www ні?

Бо для сертифіката це два різні імені. Або сертифікат містить лише одне з них, або DNS іншого досі вказує деінде, наприклад на сторінку-заглушку вашого реєстратора чи старий хостинг, який відповідає власним сертифікатом. Lovable підключає обидва й показує їх окремо, тож перевірте, що кожен має статус активного.

Скільки часу займає сертифікат для власного домену?

За словами Lovable, налаштування домену зазвичай завершується за кілька хвилин, але може тривати до кількох годин, зміни DNS можуть поширюватися до 72 годин, а якщо сертифікат не видано після 72 годин, варто звернутися до їхньої підтримки. Доки його не видано, відвідувачі бачать попередження безпеки замість вашого сайту.

Чи буває самопідписаний сертифікат прийнятним?

На вашому власному комп’ютері, для розробки, так. На сайті, який відвідує публіка, ні. Браузер кожного відвідувача його відхиляє, а коментар у вихідному коді Chrome зазначає, що самопідписаний сертифікат не дає жодного захисту від зловмисника, який стоїть між відвідувачем і сайтом.

Автор

Vlad Tkachenko

Засновник Reeve

Я щодня дивлюся на застосунки, зібрані в Lovable, Bolt, v0, Cursor і Replit, і на короткий список помилок, які трапляються в них знову і знову.

Більше про автора

Читати далі

Усі статті

Не впевнені, як справи у вашому застосунку?

Запустіть безкоштовне сканування й отримайте зрозумілу оцінку від A до F приблизно за 20 секунд. Без облікового запису й без картки.

Сканувати безкоштовно

Автоматична зовнішня перевірка, а не повний аудит. Відсутність знахідок не є гарантією безпеки.