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!