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!