В Windows для классов .NET Framework мы можем указать sslkeyrepository
как * SYSTEM/* USER.On linux
, где классы .NET Core ищут certificates
по умолчанию и какие могут быть значения для sslkeyrepository
,
Где.net core ищет сертификаты на платформе linux
Ответ 1
.Net Core
использует OpenSSL
в Linux, поэтому вам нужно настроить Linux environment
в контейнере так, чтобы OpenSSL
забрал сертификат.
Вы можете сделать это двумя способами:
Копирование файла сертификата
.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/
Вызов
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, чтобы вы могли выполнить одно из следующих действий:
-
Исключить URL, который вы используете в списке исключений браузеров
-
Доверяйте всем самоподписанным сертификатам на localhost
-
Добавьте https.crt в список доверенных сертификатов в вашем браузере.
Как именно добиться этого зависит от вашего браузера/дистрибутива.
Вы также можете обратиться к полному образцу приложения Kestrel HTTPS
или Следуйте за этим блогом Настройка HTTPS в ядре ASP.NET на разных платформах
Ответ 3
Короткий ответ заключается в том, что в 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)
.