Где.net core ищет сертификаты на платформе linux

В Windows для классов .NET Framework мы можем указать sslkeyrepository как * SYSTEM/* USER.On linux, где классы .NET Core ищут certificates по умолчанию и какие могут быть значения для sslkeyrepository ,

Ответ 1

.Net Core использует OpenSSL в Linux, поэтому вам нужно настроить Linux environment в контейнере так, чтобы OpenSSL забрал сертификат.

Вы можете сделать это двумя способами:

  1. Копирование файла сертификата .crt в место, которое update-ca-certificates будет сканировать на наличие доверенных сертификатов - например, /usr/local/share/ca-certificates/ oron RHEL /etc/pki/ca-trust/source/anchors/:

    COPY myca.crt /usr/local/share/ca-certificates/
    
  2. Вызов update-ca-certificates:

    RUN update-ca-certificates
    

Ответ 2

Для Linux и Mac .NET CORE будет использовать OpenSSL.

команду для создания закрытого ключа и запроса подписи сертификата:

openssl req -config https.config -new -out csr.pem

для создания самозаверяющего сертификата:

openssl x509 -req -days 365 -extfile https.config -extensions v3_req -in csr.pem -signkey key.pem -out https.crt

команду для создания файла pfx, содержащего сертификат и закрытый ключ, который вы можете использовать с Kestrel:

openssl pkcs12 -export -out https.pfx -inkey key.pem -in https.crt -password pass:<password>

После этого Trust the certificate

Этот шаг является необязательным, но без него браузер предупреждает вас о том, что ваш сайт потенциально опасен. Вы увидите что-то вроде следующего, если браузер не trust your certificate:

Нет централизованного способа доверять сертификату в Linux, чтобы вы могли выполнить одно из следующих действий:

  1. Исключить URL, который вы используете в списке исключений браузеров

  2. Доверяйте всем самоподписанным сертификатам на localhost

  3. Добавьте https.crt в список доверенных сертификатов в вашем браузере.

Как именно добиться этого зависит от вашего браузера/дистрибутива.

Вы также можете обратиться к полному образцу приложения Kestrel HTTPS

или Следуйте за этим блогом Настройка HTTPS в ядре ASP.NET на разных платформах

Ответ 3

На этой странице содержится хорошее (и официальное) краткое описание местоположений X509Store в Linux (и всех платформах) для .NET Core.

Короткий ответ заключается в том, что в Linux хранилище LocalMachine/Root можно открыть в режиме ReadOnly, а сертификаты, возвращаемые из этого хранилища, поступают из стандартных системных глобальных каталогов сертификатов Linux. Ответ @barr-j содержит информацию о том, как скопировать сертификаты в системные каталоги с помощью команд Linux. Однако обычное использование этих системных глобальных сертификатов - указывать доверенные центры сертификации, а НЕ как безопасное место для хранения сертификата https (который содержит закрытый ключ, который не должен быть доступен всем пользователям на хосте).

В Linux с .NET вы не можете писать в LocalMachine/Root X509Store напрямую, и LocalMachine/My не поддерживается.

Если вы хотите, чтобы доступ к вашему сертификату был ограничен конкретным пользователем (хорошая идея для сертификатов https), в Linux с .NET вы можете писать и читать из локального хранилища сертификатов пользователя, используя new X509Store(StoreName.My, StoreLocation.CurrentUser).