Вопрос или проблема
Я пытаюсь настроить .NET HTTPS сертификат для разработки на Ubuntu 24.04, но Edge и Chrome не распознают его как доверенный сертификат.
Что я сделал до сих пор:
Очистил и сгенерировал сертификат заново:
dotnet dev-certs https --clean
dotnet dev-certs https
Экспортировал сертификат:
dotnet dev-certs https -ep ~/.aspnet/https/dotnet-dev-cert.pfx -p mypassword
Преобразовал сертификат в формат CRT:
openssl pkcs12 -in ~/.aspnet/https/dotnet-dev-cert.pfx -clcerts -nokeys -out ~/.aspnet/https/dotnet-dev-cert.crt -passin pass:mypassword
Переместил сертификат в хранилище доверенных сертификатов:
sudo cp ~/.aspnet/https/dotnet-dev-cert.crt /usr/local/share/ca-certificates/dotnet-dev-cert.crt
sudo chmod 644 /usr/local/share/ca-certificates/dotnet-dev-cert.crt
Обновил системные сертификаты CA:
sudo update-ca-certificates --verbose
Проверил, что сертификат установлен корректно:
openssl x509 -noout -text -in /usr/local/share/ca-certificates/dotnet-dev-cert.crt
Проверил с помощью dotnet dev-certs:
dotnet dev-certs https --check --verbose
Вывод:
Был найден валидный сертификат: 318C61EC862324710949E1644B09097C4FBB0CF5 - CN=localhost - Действителен с 2025-02-19 по 2026-02-19 - IsHttpsDevelopmentCertificate: true - IsExportable: true
Проверил, работает ли сертификат с curl:
curl -v https://localhost:44352
Результат: Соединение прошло успешно, сертификат проверен, и я получил ответ HTTP/2 301.
Браузеры все еще не доверяют сертификату:
Edge и Chrome показывают NET::ERR_CERT_AUTHORITY_INVALID при попытке доступа к https://localhost:44352.
Я проверил edge://net-internals/#hsts и chrome://net-internals/#hsts, и localhost там не указан.
Я также пытался очистить данные сайта в edge://settings/clearBrowserData, но проблема осталась.
Ожидаемое поведение
Браузер должен распознавать .NET HTTPS сертифкат для разработки как доверенный.
https://localhost:44352 должен работать без предупреждений о сертификате.
Фактическое поведение
Браузер все еще показывает NET::ERR_CERT_AUTHORITY_INVALID, несмотря на то, что сертификат правильно установлен на системном уровне.
Дополнительная информация
ОС: Ubuntu 24.04
.NET SDK: 8.0.403
Браузеры: Microsoft Edge 121.0, Google Chrome 121.0
Как мне сделать так, чтобы Edge и Chrome доверяли .NET HTTPS сертификату для разработки на Ubuntu 24.04?
Ответ или решение
Конфигурирование среды для разработки, включающей HTTPS-сертификаты на Ubuntu, часто представляет собой отдельную задачу, особенно при возникновении вопросов доверия к сертификатам в браузерах, таких как Microsoft Edge и Google Chrome. В данном случае проблема заключается в том, что браузеры не признают сертификат, сгенерированный .NET, доверенным, что вызывает ошибку NET::ERR_CERT_AUTHORITY_INVALID.
Теория
Сначала разберем основы работы сертификатов в .NET и их интеграцию с системами Linux, такими как Ubuntu. Когда вы создаете HTTPS-сертификат для локального сервера разработки с помощью dotnet dev-certs
, .NET генерирует самоподписанный сертификат. Этот сертификат обычно используется для того, чтобы обеспечить безопасное соединение при локальной разработке. Однако браузеры, такие как Chrome и Edge, не доверяют самоподписанным сертификатам из-за отсутствия подписанного доверенного корневого центра сертификации (CA).
На Linux, чтобы система доверяла сертифкату, его необходимо добавить в хранилище доверенных сертификатов операционной системы. Однако браузеры могут не унаследовать это доверие напрямую из-за того, что они используют собственные хранилища сертификатов.
Пример
В данном случае, предпринятые вами шаги по установке и доверию сертификату были следующими:
-
Стерли существующие сертификаты и сгенерировали новые:
dotnet dev-certs https --clean dotnet dev-certs https
-
Экспортировали сертификат в формат PFX и преобразовали в формат CRT:
dotnet dev-certs https -ep ~/.aspnet/https/dotnet-dev-cert.pfx -p mypassword openssl pkcs12 -in ~/.aspnet/https/dotnet-dev-cert.pfx -clcerts -nokeys -out ~/.aspnet/https/dotnet-dev-cert.crt -passin pass:mypassword
-
Переместили сертификат в хранилище доверенных сертификатов системы и обновили его:
sudo cp ~/.aspnet/https/dotnet-dev-cert.crt /usr/local/share/ca-certificates/dotnet-dev-cert.crt sudo chmod 644 /usr/local/share/ca-certificates/dotnet-dev-cert.crt sudo update-ca-certificates --verbose
-
Проверили установку и верификацию сертификата с помощью
curl
, что показало положительный результат.
Применение
Однако даже при успешной установке сертификата на уровне системы, браузеры Google Chrome и Microsoft Edge могут использовать свои собственные хранилища доверенных сертификатов, особенно актуально для самоподписанных сертификатов. Чтобы браузеры признали сертификат доверенным:
-
Импорт в собственные хранилища браузеров:
- Обратите внимание, что браузеры Chrome и Edge могут использовать собственные системы управления сертификатами и иногда независимы от системных настроек Ubuntu.
- Для каждого браузера необходимо вручную добавить сертификат в их доверенные хранилища. Это можно сделать, перейдя в "Настройки" -> "Управление сертификатами" и импортировав ваш
.crt
файл.
-
Отключение строгой проверки сертификата (не рекомендуется для постоянного использования):
- Временно отключить проверку сертификатов в браузере для локальной разработки. В Chrome это можно сделать с помощью параметров запуска:
google-chrome --ignore-certificate-errors
- Однако помните, что это снижает безопасность и не должно использоваться в продуктивных средах.
- Временно отключить проверку сертификатов в браузере для локальной разработки. В Chrome это можно сделать с помощью параметров запуска:
-
Дополнительные диагностики:
- Перепроверьте правильность установки пути сертификата и прав доступа к файлам. Проблемы с доступом могут повлиять на возможность браузеров обращаться к сертификату.
- Убедитесь, что все изменения были правильно воспроизведены, перезапустив браузеры и проверив наличие старых данных, которые могли бы конфиктуровать с обновленным статусом сертификата.
Заключение
Проблема с доверенностью сертификата связана с механизмами управления доверенными сертификатами браузеров, которые независимы от системных сертификатных хранилищ. Решение данной проблемы заключается в явной интеграции вашего самоподписанного сертификата в доверенные сертификаты браузеров, что требует отдельного подхода в настройках Chrome и Edge. Однако, несмотря на все вышеописанные методы, помните об осторожности при работе с самоподписанными сертификатами и старайтесь переходить на использование официальных CA при переходе в продуктивные среды.