Come creare un certificato autofirmato con PowerShell

Contenuti

Logo Powershell

Certificati autofirmati sono un modo semplice per eseguire test e altre attività meno importanti. I certificati autofirmati non dispongono di una catena affidabile di certificati per eseguirne il backup e sono firmati dall'utente che li ha creati. Se ti fidi dell'entità che ha firmato il certificato, puoi usarlo come faresti con uno correttamente convalidato.

Se devi creare un certificato autofirmato, un modo per farlo è con PowerShell. In questo post, imparerai come creare un certificato autofirmato in PowerShell.

Creazione di un certificato autofirmato

Per creare un certificato autofirmato con PowerShell, puoi usare il New-SelfSignedCertificate cmdlet. Questo cmdlet è incluso nel PKI modulo.

Ci sono molte opzioni durante la creazione dei certificati. I tipi comuni di certificati autofirmati sono SSLServerAuthentication (predefinito per cmdlet) e CodeSigning. Allo stesso tempo, può creare un DocumentEncryptionCert, che è molto utile per crittografare i file, e infine a Custom certificato che consente di specificare molte opzioni personalizzate.

Andiamo avanti e creiamo un SSLServerAuthentication certificato. Questo è generalmente utilizzato per proteggere i siti Web con crittografia SSL. Puoi vedere un esempio di questo qui sotto. In questo esempio, il certificato è archiviato in 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}

Se tutto è andato bene, Ora dovresti avere un certificato appena creato! Noterai che l'output restituisce l'oggetto, ma il soggetto mostra solo il primo elemento che è stato passato attraverso il DnsName parametro. Questo perché il secondo URL diventa parte dell'elenco alternativo di argomenti.

* Nota che se provi a eseguirlo, non come amministratore, riceverai un messaggio di errore come il seguente:

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

Come puoi vedere con lui Access denied, non hai ancora l'autorizzazione per eseguirlo. *

Trova le informazioni nel nostro certificato

Assicuriamoci che il certificato sia stato creato nel modo in cui ci aspettavamo. Per trovare informazioni su un determinato certificato con PowerShell, puoi usare il Get-ChildItem cmdlet, allo stesso modo in cui potresti elencare i file in una directory.

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

Ci sono molte informazioni eccellenti qui, ma è possibile osservare nel DnsNameList ora vengono mostrati entrambi i siti. allo stesso tempo, il NotAfter La data è stata compilata correttamente per essere 6 mesi dalla data di creazione.

Certificato di firma del codice

Se lavori in PowerShell, incontrare politiche di applicazione. Se hai una politica di esecuzione stabilita in AllSigned allora dovresti firmare ogni script in esecuzione sul tuo sistema. Crea un certificato per farlo, È piuttosto semplice!

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

PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineMY

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

Certificato di protezione del documento

Potresti non averlo trovato molto prima, pero PowerShell, con l'API per la protezione dei dati, puoi crittografare i file sul tuo sistema utilizzando un certificato di protezione dei documenti. Usando il New-SelfSignedCertificate cmdlet, possiamo creare facilmente un certificato per crittografare i tuoi documenti.

$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

Con questo tipo di certificato, ora puoi utilizzare il certificato creato per crittografare e decrittografare il contenuto utilizzando comandi PowerShell come Protect-CMSMessage e UnProtect-CMSMessage.

Crittografa / decifrare contenuti come questo è utile se è necessario passare i dati crittografati, poiché in seguito puoi utilizzare questo certificato su un altro sistema per decrittografare i dati. Se ti fidi dell'API standard per la protezione dei dati (DPAP) integrato in Windows, non potrai decifrare i dati su altri sistemi o per altri utenti.

Riepilogo

PowerShell semplifica la creazione di certificati autofirmati. Questi certificati hanno un'ampia varietà di usi, ma una nota importante da ricordare è che dovrebbero essere usati solo nei test. Non avrai una catena di certificati valida per convalidare i tuoi certificati autofirmati.

Vedere quanto è facile e veloce creare certificati autofirmati!, puoi iniziare a farlo oggi e crittografare correttamente qualsiasi connessione o dati di cui hai bisogno!

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.