Как сделать самоподписанный сертификат доверенным на Windows?

Ссылка скопирована
1 ответ

Нужно поставить локальный SSL сертификат на Windows для подключения проекта React на asp.net core web api через https с использованием сертификата. Мне предоставили следующие файлы:

  • cert.pem
  • cert.pfx
  • encryptedkey.pem

Я пытался их добавить в certmgr.msc и, вроде бы, они поставились, но при попытке запуска проекта получаю ошибку NET::ERR_CERT_COMMON_NAME_INVALID Error. Вот конфигурация проекта на asp.net, appsettings.json:

"Kestrel": {   "Endpoints": {     "Https": {       "Url": "https://localhost:5001",       "Certificate": {         "Path": "Certificates/cert.pfx",         "Password": "qwerty"       }     }   } },

"Kestrel": { "Endpoints": { "Https": { "Url": "https://localhost:5001", "Certificate": { "Path": "Certificates/cert.pfx", "Password": "qwerty" } } } },

Вот Program.cs:

var httpsConnectionAdapterOptions = new HttpsConnectionAdapterOptions {     SslProtocols = System.Security.Authentication.SslProtocols.Tls12,     ClientCertificateMode = ClientCertificateMode.AllowCertificate,     ServerCertificate = new X509Certificate2("Certificates/cert.pfx", "qwerty"), }; builder.WebHost.ConfigureKestrel(options =>     options.ConfigureEndpointDefaults(listenOptions =>         listenOptions.UseHttps(httpsConnectionAdapterOptions)));

var httpsConnectionAdapterOptions = new HttpsConnectionAdapterOptions { SslProtocols = System.Security.Authentication.SslProtocols.Tls12, ClientCertificateMode = ClientCertificateMode.AllowCertificate, ServerCertificate = new X509Certificate2("Certificates/cert.pfx", "qwerty"), }; builder.WebHost.ConfigureKestrel(options => options.ConfigureEndpointDefaults(listenOptions => listenOptions.UseHttps(httpsConnectionAdapterOptions)));

Дополнительно:

COMMON_NAME_INVALID

Это тебе браузер показывает? Ты наверное на localhost обращаешся? Говорит что COMMON_NAME (domain name) в сертификате и в URL не совпадают. Соответственно пропиши domain name в hosts на клиенте и открывай в браузере по domain name.

  • Valentin Barbolin, тут немного потерялся. Можете, пожалуйста, немного подробнее написать?
  • Nik Faraday, Сначала ты. Где ты эту ошубку видиш? NET::ERR_CERT_COMMON_NAME_INVALID
  • Valentin Barbolin, при запуске проекта asp.net core web api локально. Это мне отсвечивает браузер
  • Nik Faraday, на windows?
  • Nik Faraday, У сертификата есть поле Common Name или Certificate Subject, там где ты указывал имя при генерации сертификата.
    Оно должно соответствовать имени домена (например localhost)

    Либо у сертификата есть дополнительное поле Alternative Subject Names, где можно перечислить несколько DNS имен, тогда localhost должен быть или там или там.
    Иначе не пройдет валидация, браузер не будет видеть что сертификат соответствует твоему сайту localhost

  • Saboteur, да, вы правы. В Certificate Subject указанно имя текущей компании на которой я работаю, выглядит примерно вот так:
    E = company@company.com CN = Nik OU = company O = company L = city S = city C = UA

    E = company@company.com CN = Nik OU = company O = company L = city S = city C = UA

    На сколько я понял, нужно добавить Alternative Subject Names вручную и указать там localhost?

  • Valentin Barbolin, да
  • Nik Faraday, Открываем c:WindowsSystem32driversetchosts
    и добавляем строчку
    localhost DOMAIN_NAME # Где DOMAIN_NAME это CN из сертификата.

    Потом открываем у браузере страничку уже по DOMAIN_NAME

  • Saboteur, напишите отдельным ответом, я отмечу решением. Именно ваш комментарий помог сориентироваться в нужном направлении, спасибо
  • надо импортировать cert.pfx в хранилище сертификатов локальной машины (через certlm.msc), затем там же перенести/скопировать импортированный сертификат в "Доверенные корневые центры сертификации"

    • Я это уже всё сделал. Что дальше? Почему ошибка есть до сих пор?
    • Nik Faraday, а точно это проделали в хранилище локальной машины, а не текущего пользователя?
    • Роман Безруков, да. Я перед тем, как написать вопрос перерыл пол интернета и поиске решения проблемы
    • Nik Faraday, что указано в полях CN (Common Name), Subject, Subject Alternative Names? где-то присутствует localhost ?
    • Роман Безруков,

      да, вы правы. В Certificate Subject указанно имя текущей компании на которой я работаю, выглядит примерно вот так:

      E = company@company.com
      CN = Nik
      OU = company
      O = company
      L = city
      S = city
      C = UA

      На сколько я понял, нужно добавить Alternative Subject Names вручную и указать там localhost?

    • Nik Faraday, вам уже, в принципе, подсказали что делать...надо перевыпустить сертификат, добавив localhost в поле Subject Alternative Names
    • Роман Безруков, есть альтернатива: не перевыпускать сертификат, а добавить имя DNS из него в файл hosts (%SystemRoot%system32driversetchosts , без расширения, если нет - создать такой файл, можно для этого скопировать hosts.sam из той же папки): нужно добавить строчку
      127.0.0.1 имя-DNS-из-сертификата
      IMHO так проще. А кроме того, это имя еще может быть прописано в проекте и обращение https://localhost/ может не сработать
    • MVV, можно и так...

    У сертификата есть поле Common Name или Certificate Subject, там где ты указывал имя при генерации сертификата.
    Оно должно соответствовать имени домена (например localhost)

    Либо у сертификата есть дополнительное поле Alternative Subject Names, где можно перечислить несколько DNS имен, тогда localhost должен быть или там или там.
    Иначе не пройдет валидация, браузер не будет видеть что сертификат соответствует твоему сайту localhost

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Виктор Sys Ответ

    Для того чтобы сделать самоподписанный сертификат доверенным на Windows, вам нужно выполнить следующие шаги:

    1. Откройте управление сертификатами Windows, нажав Win + R и введя "certmgr.msc".

    2. Перейдите в "Личное" -> "Сертификаты".

    3. Нажмите правой кнопкой мыши на ваш самоподписанный сертификат и выберите "Все задачи" -> "Экспорт".

    4. В мастере экспорта выберите "Да, экспортировать закрытый ключ" и нажмите "Далее".

    5. Выберите формат файла - "Кодированный файл PKCS #12 (.PFX)" и установите пароль для защиты ключа. Нажмите "Далее".

    6. Укажите путь к файлу и завершите процесс экспорта.

    7. Теперь откройте "Сертификаты" -> "Доверенные корневые центры сертификации" и перенесите ваш сертификат в эту папку.

    8. Теперь ваш самоподписанный сертификат будет доверенным на Windows.

    Примечание: Пожалуйста, помните, что самоподписанные сертификаты не являются такими же надежными, как сертификаты, выданные доверенным удостоверяющим центром. Их использование рекомендуется только в тестовых или локальных средах.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно