Sous Windows, pour les classes .NET Framework, nous pouvons spécifier sslkeyrepository
comme * SYSTEM/* USER.On linux
où les classes .NET Core recherchent-elles le certificates
par défaut et quelles pourraient être les valeurs de sslkeyrepository
.
.Net Core
utilise OpenSSL
sous Linux, par conséquent, vous devez configurer votre Linux environment
dans le conteneur pour que OpenSSL
récupère le certificat.
Vous pouvez le faire de deux manières:
Copie du certificat .crt
fichier vers un emplacement qui update-ca-certificates
recherchera les certificats de confiance - par exemple /usr/local/share/ca-certificates/
oron RHEL /etc/pki/ca-trust/source/anchors/
:
COPY myca.crt /usr/local/share/ca-certificates/
Appel de update-ca-certificates
:
RUN update-ca-certificates
Pour Linux et Mac .NET CORE
utilisera OpenSSL
.
commande pour générer une clé privée et une demande de signature de certificat:
openssl req -config https.config -new -out csr.pem
commande pour créer un certificat auto-signé:
openssl x509 -req -days 365 -extfile https.config -extensions v3_req -in csr.pem -signkey key.pem -out https.crt
commande pour générer un fichier pfx contenant le certificat et la clé privée que vous pouvez utiliser avec Kestrel:
openssl pkcs12 -export -out https.pfx -inkey key.pem -in https.crt -password pass:<password>
Après ça Trust the certificate
Cette étape est facultative, mais sans elle, le navigateur vous avertira que votre site est potentiellement dangereux. Vous verrez quelque chose comme ce qui suit si votre navigateur n'est pas trust your certificate
:
Il n'existe aucun moyen centralisé de faire confiance au certificat sous Linux, vous pouvez donc effectuer l'une des opérations suivantes:
Exclure l'URL que vous utilisez dans la liste d'exclusion de votre navigateur
Faire confiance à tous les certificats auto-signés sur localhost
Ajoutez le https.crt à la liste des certificats approuvés dans votre navigateur.
La manière exacte d'y parvenir dépend de votre navigateur/distribution.
Vous pouvez également référencer l'intégralité de exemple d'application Kestrel HTTPS
ou suivez ce blog Configuration de HTTPS dans ASP.NET Core sur différentes plates-formes
La réponse courte est que sous Linux, le magasin LocalMachine/Root
Peut être ouvert en mode lecture seule, et les certificats renvoyés de ce magasin proviennent des répertoires de certificats globaux du système Linux standard. La réponse de @ barr-j fournit des informations sur la façon de copier des certificats dans des répertoires système à l'aide de commandes Linux. Cependant, l'utilisation normale de ces certificats globaux est de spécifier des autorités de certification approuvées, PAS comme un endroit sécurisé pour stocker un certificat https (qui contient une clé privée, qui ne devrait pas être accessible à tous les utilisateurs sur l'hôte).
Sous Linux avec .NET, vous ne pouvez pas écrire directement dans LocalMachine/Root X509Store
Et LocalMachine/My
N'est pas pris en charge.
Si vous souhaitez que votre accès au certificat soit limité à un utilisateur spécifique (une bonne idée pour les certificats https), sous Linux avec .NET, vous pouvez écrire et lire à partir d'un magasin de certificats local utilisateur à l'aide de new X509Store(StoreName.My, StoreLocation.CurrentUser)
.