Table des matières:
Ce module n'est pas officiellement pris en charge. Il a été créé comme module pratique pour la génération de certificats auto-signés afin de simplifier les tests de la fonctionnalité HTTPS.
Ce module ne doit être utilisé dans aucun scénario de production ; il est conçu pour créer des certificats auto-signés à des fins de test uniquement.
Ce module est conçu pour être un moyen pratique et multiplateforme de générer des certificats auto-signés dans PowerShell Core et Windows PowerShell 5.1.
Étant donné que .NET Core intègre déjà sa propre API de cryptographie/certificat multiplateforme, ce module est un module de script PowerShell natif, sans dépendances binaires.
Certains objectifs de ce module incluent :
X509HighlySpecificCryptoObject
Vous souhaiterez peut-être jeter un œil à quelques autres alternatives pour la génération de certificats auto-signés, répertoriées ici :
Applet de commande New-SelfSignedCertificate
de Windows PowerShell à partir du module PkiClient.
Il peut être utilisé depuis PowerShell Core sur Windows en utilisant le module WindowsCompatibility comme ceci :
Install-Module WindowsCompatibility
Import-WinModule PKI
New-SelfSignedCertificate # args as needed
Cependant, ce module n'est disponible que sous Windows — il n'existe pas de version Linux.
L'outil global dotnet dotnet-dev-certs
, conçu pour générer des certificats auto-signés pour le développement ASP.NET Core.
Cela peut être installé à partir de la CLI dotnet.
openssl
, qui fonctionne sur plusieurs plates-formes, mais peut ne pas être avantageux par rapport à une option native PowerShell et utilise un format PEM plutôt que PFX.
Pour créer un certificat simple, les éléments suivants fonctionneront :
> New-SelfSignedCertificate
Certificate written to C:UsersroholtDocumentsDevsandboxcertificate.pfx
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
A51B016324B5D2F11340CDCC52004B8129C88D3B CN = localhost
Cela créera un nouveau certificat appelé certificate.pfx
dans votre CWD pour localhost
. La commande elle-même renvoie un objet X509Certificate2
décrivant le certificat écrit sur le disque. Vous pouvez inspecter cet objet pour trouver ses propriétés. Ce certificat n'aura aucune utilisation de clé, aucune contrainte de base, aucune utilisation de clé améliorée et une extension de clé d'identification de sujet.
Remarque : Pour répéter cette commande, vous aurez besoin du paramètre -Force
afin d'écraser l'ancien certificat que vous avez généré précédemment.
La commande New-SelfSignedCertificate
permet de spécifier des noms distinctifs complets ainsi que quelques autres options :
> $password = ConvertTo-SecureString - Force - AsPlainText ' your password '
> $distinguishedName = @ {
CommonName = ' example.org '
Country = ' US '
StateOrProvince = ' Nebraska '
Locality = ' Omaha '
Organization = ' Umbrella Corporation '
OrganizationalUnit = ' Sales '
EmailAddress = ' [email protected] '
}
> $certificateParameters = $distinguishedName + @ {
OutCertPath = ' C:UsersyouDocumentscert.pfx '
StartDate = [ System.DateTimeOffset ]::Now
Duration = [ timespan ]::FromDays( 365 )
Passphrase = $password
CertificateFormat = ' Pfx ' # Values from [System.Security.Cryptography.X509Certificates.X509ContentType]
KeyLength = 4096
ForCertificateAuthority = $true
KeyUsage = ' DigitalSignature ' , ' KeyEncipherment ' # Values from [System.Security.Cryptography.X509Certificates.X509KeyUsageFlags]
EnhancedKeyUsage = ' ServerAuthentication ' , ' ClientAuthentication '
}
> New-SelfSignedCertificate @certificateParameters - Force
WARNING: Parameter ' EmailAddress ' is obsolete. The email name component is deprecated by the PKIX standard
Certificate written to C:UsersroholtDocumentsDevsandboxhere.pfx
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
7445433CB2BB4948E12794A167C6725DC214AA84 CN = example.org , O.. . {Server Authentication , Client Authentication}
Le certificat produit par la commande ci-dessus aura les propriétés suivantes :
Nom distinctif de l'émetteur et du sujet défini sur :
CN=example.org, OU=Sales, O=Umbrella Corporation, L=Omaha, S=Nebraska, C=US, [email protected]
Protection par mot de passe (dans ce cas avec le mot de passe 'Your password'
).
Une durée de validité d'un an à compter de la création (avec les millisecondes tronquées).
Une clé RSA de 4096 bits.
Une extension de contraintes de base avec CertificateAuthority
défini sur true
.
Les utilisations de base des clés Digital Signature
et Key Encipherment
indiquées.
Utilisations améliorées des clés Server Authentication
et Client Authentication
indiquées.
La commande propose également le paramètre -AdditionalExtension
, qui prend un tableau de System.Security.Cryptography.X509Certificates.X509Extension
à ajouter à tout certificat généré.
Le module ne prend pas encore en charge les fichiers PEM, très utilisés dans le monde Linux. Bien qu'il ne s'agisse pas d'un format de certificat en soi, ils constituent un codage courant des certificats et nous devrions nous efforcer de les prendre en charge d'une manière ou d'une autre.
Actuellement, l'auteur n'est pas au courant de la prise en charge PEM native de PowerShell Core ou .NET Core.
Les extensions de certificat générées par ce module définissent actuellement toutes le champ Critical
sur false
pour permettre une plus grande flexibilité.
Cependant, il peut être souhaitable de configurer tout ou partie de ces éléments pour qu'ils soient désignés comme Critical
. Idéalement, cela pourrait être fait sans encombrer les commandes déjà avec un grand nombre de paramètres.
Actuellement sur ServerAuthentication
et ClientAuthentication
les utilisations de clés améliorées sont prises en charge (de manière contraignante, pour plus de facilité d'utilisation).
Idéalement, davantage d’options pourraient être proposées à cet effet.
Le module pourrait fournir un ensemble de classes qui génèrent des X509Extension
décrivant les extensions de certificat couramment utilisées.
Ce module est sous licence MIT. Voir le fichier LICENSE.txt.