New SelfSignedCertificate - PowerShell
Overview
The New-SelfSignedCertificate command creates a self-signed certificate and adds it to the local certificate store. It is commonly used when secure communication is needed but a trusted certificate authority is not readily available.
Syntax
New-SelfSignedCertificate [-Subject <String>] [-NotAfter <DateTime>] [-KeyUsage <KeyUsage>] [-KeyAlgorithm <String>] [-Provider <String>] [-FriendlyName <String>] [-DnsName <String[]>] [-CertStoreLocation <CertStoreLocation>] [-KeyLength <Int32>] [-HashAlgorithm <String>] [-ValidityPeriod <Int32>] [-IncludeEmailProtection <Boolean>] [-Signer <String>]
Options/Flags
- -Subject: Specifies the subject name for the certificate.
 - -NotAfter: Sets the expiration date for the certificate.
 - -KeyUsage: Defines the intended key usage(s) for the certificate (e.g., 
DigitalSignature,KeyEncipherment,DataEncipherment). - -KeyAlgorithm: Specifies the algorithm to use for the certificate key (e.g., 
RSA,ECC). - -Provider: Selects the certificate provider to use (e.g., 
Microsoft Enhanced Cryptographic Provider v1.0). - -FriendlyName: Assigns a friendly name to the certificate for easier identification.
 - -DnsName: Adds specified DNS names as subject alternative names to the certificate.
 - -CertStoreLocation: Determines the location in the certificate store where the certificate will be placed (e.g., 
CurrentUser,LocalMachine). - -KeyLength: Sets the key length for the certificate (default: 2048 bits).
 - -HashAlgorithm: Specifies the hash algorithm to use for signing the certificate (e.g., 
SHA256,SHA512). - -ValidityPeriod: Defines the validity period of the certificate in days (default: 397).
 - -IncludeEmailProtection: Includes email protection in the certificate (default: false).
 - -Signer: Signs the certificate using the specified certificate (requires a signing certificate with appropriate permissions).
 
Examples
- Create a self-signed certificate with a friendly name:
 
New-SelfSignedCertificate -FriendlyName "MySelfSignedCert"
- Generate a certificate with specific DNS names:
 
New-SelfSignedCertificate -DnsName "example.com" -DnsName "www.example.com"
- Create a certificate with a custom validity period:
 
New-SelfSignedCertificate -ValidityPeriod 730
- Sign a certificate using an existing certificate:
 
$cert = New-SelfSignedCertificate -FriendlyName "RootCert"
New-SelfSignedCertificate -Signer $cert.Thumbprint
Common Issues
- Missing Provider: Ensure the specified certificate provider is installed and registered in the system.
 - Insufficient Permissions: Verify that the user has sufficient permissions to create certificates in the target certificate store.
 - Certificate Not Trusted: Self-signed certificates are not automatically trusted by all applications. Import the certificate into the trusted root certificate store for trusted communication.
 
Integration
- Integration with PowerShell DSC: Use the 
New-SelfSignedCertificatecommand in PowerShell DSC configurations to provision self-signed certificates for secure configurations. - Combined with Get-Certificate: Use 
Get-Certificateto retrieve the certificate after creation and perform further operations (e.g., export, install).