Agence web » Actualités du digital » Comment créer un certificat auto-signé avec PowerShell

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

Les certificats auto-signés sont un moyen facile d'effectuer des tests et d'autres tâches moins importantes. Les certificats auto-signés ne disposent pas d'une chaîne de certificats de confiance les sauvegardant 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 pour un certificat correctement validé.

Si vous devez créer un certificat auto-signé, vous pouvez le faire avec PowerShell. Dans cet article, vous allez apprendre à 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 pour créer des certificats. Les types de certificats auto-signés courants sont SSLServerAuthentication (par défaut pour l'applet de commande) et CodeSigning. Vous pouvez également 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 de ceci 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 n'affiche que le premier élément qui lui a été transmis via le DnsName paramètre. Cela est dû au fait que la deuxième URL fait partie de la liste alternative des sujets.

* Notez que si vous essayez d'exécuter ceci, pas en tant qu'administrateur, vous obtiendrez un message d'erreur tel que ci-dessous:

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

Comme vous pouvez le constater avec Access denied, vous n'avez pas encore l'autorisation d'exécuter cela. *

Recherche d'informations sur notre certificat

Assurons-nous que le certificat a été créé comme prévu. Pour rechercher des informations sur un certificat particulier avec PowerShell, vous pouvez utiliser le Get-ChildItem applet de commande, tout comme vous pourriez répertorier des 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 de bonnes informations ici, mais vous pouvez remarquer dans le DnsNameList que les deux sites sont maintenant affichés. De plus, le NotAfter la date est correctement renseignée pour être de 6 mois à compter de la date de création.

Certificat de signature de code

Si vous travaillez dans PowerShell, vous connaîtrez les stratégies d'exécution. Si vous avez une stratégie d'exécution définie sur AllSigned alors vous devrez signer chaque script qui s'exécute sur votre système. Pour créer 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 ne l'avez peut-être pas rencontré auparavant, mais PowerShell, avec l'API Data Protection, peut crypter des fichiers sur votre système à l'aide d'un certificat de protection de document. 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 désormais utiliser le certificat créé pour crypter et décrypter le contenu à l'aide de commandes PowerShell comme Protect-CMSMessage et UnProtect-CMSMessage.

Le cryptage / décryptage de contenu comme celui-ci devient utile si vous devez transmettre les données cryptées car vous pouvez ensuite utiliser ce certificat sur un autre système pour décrypter les données. Si vous vous appuyez sur l'API de protection des données standard (DPAPI) intégrée à Windows, vous ne pourrez pas décrypter les données sur d'autres systèmes ou pour d'autres utilisateurs.

Résumé

PowerShell facilite la création de certificats auto-signés. Ces certificats ont une multitude d'utilisations, mais une note importante à retenir est qu'ils ne doivent être utilisés que pour les tests. Vous n'aurez pas de chaîne d'approbation de certificat valide pour valider vos certificats auto-signés.

En voyant à quel point il est rapide et facile de créer des certificats auto-signés, vous pouvez commencer à le faire dès aujourd'hui et à chiffrer correctement toutes les connexions ou données dont vous avez besoin!

★★★★★