Comment créer un certificat auto-signé avec PowerShell

Contenu

Logo Powershell

Certificats auto-signés ils sont un moyen simple d'effectuer des tests et d'autres tâches moins importantes. Les certificats auto-signés n'ont pas de chaîne de certificats fiable pour les sauvegarder et sont signés par l'utilisateur qui les a créés. Si vous faites confiance à l'entité qui a signé le certificat, vous pouvez l'utiliser comme vous le feriez avec un correctement validé.

Si vous devez créer un certificat auto-signé, une façon de le faire est avec PowerShell. Dans ce billet, vous apprendrez à créer un certificat auto-signé dans PowerShell.

Création d'un certificat auto-signé

Pour créer un certificat auto-signé avec PowerShell, vous pouvez utiliser le New-SelfSignedCertificate applet de commande. Cette applet de commande est incluse dans le PKI module.

Il existe de nombreuses options lors de la création de certificats. Les types courants de certificats auto-signés sont SSLServerAuthentication (valeur par défaut pour l'applet de commande) et CodeSigning. En même temps, peut créer un DocumentEncryptionCert, ce qui est très utile pour crypter des fichiers, et enfin un Custom certificat qui vous permet de spécifier de nombreuses options personnalisées.

Allons de l'avant et créons un SSLServerAuthentication certificat. C'est celui qui est généralement utilisé pour protéger les sites Web avec le cryptage SSL. Vous pouvez voir un exemple ci-dessous. Dans cet exemple, le certificat est stocké dans le Cert:LocalMachineMy Certificate Store.

$Params = @{
    "DnsName"           = @("mywebsite.com","www.mywebsite.com")
    "CertStoreLocation" = "Cert:LocalMachineMy"
    "NotAfter"          = (Get-Date).AddMonths(6)
    "KeyAlgorithm"      = "RSA"
  "KeyLength"         = "2048"
}

PS C:> New-SelfSignedCertificate @Params

PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineMy

Thumbprint                                Subject              EnhancedKeyUsageList
----------                                -------              --------------------
4EFF6B1A0F61B4BG692C77F09889BD151EE8BB58  CN=mywebsite.com     {Client Authentication, Server Authentication}

Si tout s'est bien passé, Vous devriez maintenant avoir un certificat nouvellement créé! Vous remarquerez que la sortie renvoie le sujet, mais le sujet ne montre que le premier élément qui a été passé par le DnsName paramètre. En effet, la deuxième URL fait partie de la liste alternative des sujets.

* Notez que si vous essayez d'exécuter ce, pas en tant qu'administrateur, vous obtiendrez un message d'erreur comme le suivant:

New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)

Comme tu peux le voir avec lui Access denied, vous n'avez pas encore la permission de l'exécuter. *

Retrouvez les informations dans notre certificat

Assurons-nous que le certificat a été créé comme prévu. Pour trouver des informations sur un certificat particulier avec PowerShell, vous pouvez utiliser le Get-ChildItem applet de commande, de la même manière que vous pourriez lister les fichiers dans un répertoire.

PS C:> Get-ChildItem -Path "Cert:LocalMachineMy" | Where-Object Thumbprint -EQ 4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58 | Select-Object *

PSPath                   : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58
                           58
PSParentPath             : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy
PSChildName              : 4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.SecurityCertificate
PSIsContainer            : False
EnhancedKeyUsageList     : {Client Authentication (1.3.6.1.5.5.7.3.2), Server Authentication (1.3.6.1.5.5.7.3.1)}
DnsNameList              : {mywebsite.com, www.mywebsite.com}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 :
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid,
                           System.Security.Cryptography.Oid, System.Security.Cryptography.Oid}
FriendlyName             :
HasPrivateKey            : True
PrivateKey               : System.Security.Cryptography.RSACng
IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : 6/22/2020 11:50:15 AM
NotBefore                : 12/22/2019 10:40:20 AM
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
RawData                  : {48, 130, 3, 55…}
SerialNumber             : 608C4D5E6B8D41B44ADDC6BD725FE264
SignatureAlgorithm       : System.Security.Cryptography.Oid
SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName
Thumbprint               : 4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58
Version                  : 3
Handle                   : 2628421609632
Issuer                   : CN=mywebsite.com
Subject                  : CN=mywebsite.com

Il y a beaucoup d'excellentes informations ici, mais il est possible d'observer dans le DnsNameList maintenant les deux sites sont affichés. en même temps, les NotAfter La date est correctement renseignée pour être 6 mois à compter de la date de création.

Certificat de signature de code

Si vous travaillez en PowerShell, connaître politiques d'application. Si vous avez une politique d'exécution établie dans AllSigned alors vous devrez signer chaque script en cours d'exécution sur votre système. Créez un certificat pour ce faire, C'est assez simple!

PS C:> New-SelfSignedCertificate -Type 'CodeSigningCert' -DnsName 'MyHost'

PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineMY

Thumbprint                                Subject              EnhancedKeyUsageList
----------                                -------              --------------------
14D535EG834370293BA103159EB00876A79959D8  CN=MyHost            Code Signing

Certificat de protection des documents

Vous n'avez peut-être pas trouvé cela beaucoup plus tôt, pero PowerShell, avec l'API de protection des données, vous pouvez crypter des fichiers sur votre système à l'aide d'un certificat de protection des documents. En utilisant le New-SelfSignedCertificate applet de commande, nous pouvons facilement créer un certificat pour crypter vos documents.

$Params = @{
    "DnsName"           = "MyHost"
    "CertStoreLocation" = "Cert:CurrentUserMy"
    "KeyUsage"          = "KeyEncipherment","DataEncipherment","KeyAgreement"
    "Type"              = "DocumentEncryptionCert"
}

PS C:> New-SelfSignedCertificate @Params

Thumbprint                                Subject              EnhancedKeyUsageList
----------                                -------              --------------------
14D535EG934370293BA203159EB00876A79959D8  CN=MyHost            Document Encryption

Avec ce type de certificat, vous pouvez maintenant utiliser le certificat créé pour chiffrer et déchiffrer le contenu à l'aide de commandes PowerShell telles que Protect-CMSMessage et UnProtect-CMSMessage.

Crypter / le décryptage de contenu comme celui-ci est pratique si vous devez transmettre les données cryptées, puisque vous pouvez plus tard utiliser ce certificat sur un autre système pour déchiffrer les données. Si vous faites confiance à l'API standard de protection des données (DPAP) intégré à Windows, vous ne pourrez pas décrypter les données sur d'autres systèmes ou pour d'autres utilisateurs.

résumé

PowerShell rend la création de certificats auto-signés incroyablement facile à faire. Ces certificats ont une grande variété d'utilisations, mais une note importante à retenir est qu'ils ne doivent être utilisés que dans les tests. Vous n'aurez pas de chaîne de confiance de certificat valide pour valider vos certificats auto-signés.

Découvrez à quel point il est rapide et facile de créer des certificats auto-signés !, vous pouvez commencer à le faire aujourd'hui et crypter correctement toute connexion ou données dont vous avez besoin!

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.