Neue Parameter für New-SelfSignedCertificate


Per Zufall bin ich heute über eine interessante Sache gestoßen. Bereits mit Windows 8 wurden die PKI-Powershell Cmdlets eingeführt. Mit enthalten ist New-SelfSignedCertificate. Das Problem dabei war, dass das Anwendungsgebiet des Cmdlets wegen fehlender Paramater ziemlich limitiert war.

Als ich heute unter Windows 10 New-SelfSignedCertficate verwendete und mittels TAB-Taste die Parametervervollständigung nutzte, wunderte ich mich nicht schlecht, als auf einmal eine Fülle von unbekannten Parametern auftauchte. Darunter waren so Dinge Extension, KeyUsage, KeyProtection.

Durch die Fülle der Parameter war ich etwas überfordert und mich interessierte vor allem eine komplette Auflistung der Parameter. Wie in Powershell üblich verwendet man dazu Get-Help:

PS > get-help New-SelfSignedCertificate

NAME
    New-SelfSignedCertificate

ÜBERSICHT
    Creates a new self-signed certificate for testing purposes.

SYNTAX
    New-SelfSignedCertificate [-CertStoreLocation <String>] [-CloneCert <Certificate>] [-DnsName <String>] [-Confirm]
    [-WhatIf] [<CommonParameters>]

BESCHREIBUNG
    The New-SelfSignedCertificate cmdlet creates a self-signed certificate for testing purposes. Using the CloneCert

Mmmhh, das war irgendwie nicht das was ich erwartet hatte. OK, vielleicht hilft ein Update der Hilfe, also Update-Help durchgeführt. Leider war das Ergebnis unverändert. Nun noch der Versucht online etwas mehr Infos zu bekommen, mittels

Get-Help New-SelfSignedCertificate –Online

Aber wieder nix. Ganz im Gegenteil, man landet momentan noch auf der Hilfeseite von Windows Server 2012 R2 und Windows 8.1 Hilfe. Mal wieder ein ganz mieses Qualitätsmanagement von Microsoft. Auf der anderen Seite kann man sagen, das ist so gewollt, weil vielleicht doch noch Beta.

Da Powershell wegen seiner flexiblen Innereien so genial ist, gibt es vielleicht noch eine andere Möglichkeit herauszufinden, was Sache ist. Wenn schon Get-Help die falsche Syntax hat, aber die TAB-Vervollständigung die ganzen Parameter kennt, dann kann man diese Parameter sicher auch abfragen. Dem ist tatsächlich so:

PS > $P= get-command New-SelfSignedCertificate
PS > $p.Parameters

Key                         Value
—                         —–
SecurityDescriptor          System.Management.Automation.ParameterMetadata
TextExtension               System.Management.Automation.ParameterMetadata
Extension                   System.Management.Automation.ParameterMetadata
HardwareKeyUsage            System.Management.Automation.ParameterMetadata
KeyUsageProperty            System.Management.Automation.ParameterMetadata
KeyUsage                    System.Management.Automation.ParameterMetadata
KeyProtection               System.Management.Automation.ParameterMetadata
KeyExportPolicy             System.Management.Automation.ParameterMetadata
KeyLength                   System.Management.Automation.ParameterMetadata

Um die Sache etwas übersichtlicher zu machen, verwendet man besser:

PS > $p.Parameters.keys | sort
AlternateSignatureAlgorithm
CertStoreLocation
CloneCert
Confirm
Container
CurveExport
Debug
DnsName
ErrorAction
ErrorVariable
ExistingKey
Extension
FriendlyName
HardwareKeyUsage
HashAlgorithm
InformationAction
InformationVariable
KeyAlgorithm
KeyDescription
KeyExportPolicy
KeyFriendlyName
KeyLength
KeyLocation
KeyProtection
KeySpec
KeyUsage
KeyUsageProperty
NotAfter
NotBefore
OutBuffer
OutVariable
Pin
PipelineVariable
Provider
Reader
SecurityDescriptor
SerialNumber
Signer
SignerPin
SignerReader
SmimeCapabilities
Subject
SuppressOid
TestRoot
TextExtension
Type
Verbose
WarningAction
WarningVariable
WhatIf

Alle fett dargestellten Parameter sind neu hinzugekommene. Wie man sieht, eine ganze Menge. Nun weiß man was es gibt aber welche Parameter kann man konkret füttern? Man kann hergehen und alles ausprobieren. Denn es gibt aktuell keinen einzigen Google Suchtreffer mit z. B. New-SelfsignedCertificate mit KeyUsage: https://www.google.com/search?q=new-selfsigncertificate+keyusage&oq=new-selfsigncertificate+keyusage&aqs=chrome..69i57.7167j0j7&sourceid=chrome&es_sm=93&ie=UTF-8#q=%22new-selfsigncertificate%22+%22keyusage%22
Man kann aber auch nachdenken und entdeckt:

Es kam diese Woche die Server 2016 Technical Preview 3 heraus. Was liegt also näher dort mal die Lage zu checken. Gesagt, getan. Tatsächlich sind hier bei Aufruf von Get-Help die Parameter alle verfügbar:

SYNTAX
New-SelfSignedCertificate [-SecurityDescriptor <FileSecurity>]
[-TextExtension <string[]>] [-Extension <X509Extension[]>] [-HardwareKeyUsage <HardwareKeyUsage[]> {None | SignatureKey | EncryptionKey | GenericKey | StorageKey | IdentityKey}] [-KeyUsageProperty <KeyUsageProperty[]> {None | Decrypt | Sign | KeyAgreement | All}] [-KeyUsage <KeyUsage[]> {None | EncipherOnly | CRLSign | CertSign | KeyAgreement | DataEncipherment | KeyEncipherment | NonRepudiation | DigitalSignature | DecipherOnly}] [-KeyProtection <KeyProtection[]> {None | Protect | ProtectHigh | ProtectFingerPrint}] [-KeyExportPolicy <KeyExportPolicy[]> {NonExportable | ExportableEncrypted | Exportable}] [-KeyLength <int>] [-KeyAlgorithm <string>] [-SmimeCapabilities] [-ExistingKey] [-KeyLocation <string>] [-SignerReader <string>) [-Reader <string>] [-Si gnerPin <securestring>] [-Pin <securestring>] [-KeyDescription <string>] [-KeyFriendlyName <string>] [-Container <string>] [-Provider <string>] [-CurveExport <CurveParametersExportType> {None | CurveParameters | CurveName}] [-KeySpec <KeySpec> {None | KeyExchange | Signature}] [-Type <CertificateType> {Custom | CodeSigningCert | DocumentEncryptionCert | SSLServerAuthentication | DocumentEncryptionCertLegacyCsp}] [-FriendlyName <string>] [-NotAfter <datetime>] [-NotBefore <datetime>] [-SerialNumber <string>] [-Subject <string>] [-DnsName <string[]>] [-Suppressoid <string[]> [-HashAlgorithm <string>] [-AlternateSignatureAlgorithm] [-TestRoot] [-Signer <Certificate>] [-CloneCert <Certificate>] [-CertStoreLocation <string>] [-whatlf] [-Confirm] [<CommonParameters>]

Ja das ist doch mal was.

Es geht noch besser, alle Parameteroptionen die beim Server aufgeführt werden, sind auf Windows 10 auch verfügbar! Ja dann kann man ja was daraus machen.

Eine weitere Hilfe stellt die Implementierung von Vadim Podans dar, welcher bereits früher für eine umfassende PKI-Unterstützung in Powershell gesorgt hat. Er hat in der Powershell Script Gallery bereits ein New-SelfSignedCertificate Skript veröffentlicht: https://gallery.technet.microsoft.com/scriptcenter/Self-signed-certificate-5920a7c6.

So das war es zunächst, sinnvolle Anwendungen kommen bei Gelegenheit…

3 Antworten to “Neue Parameter für New-SelfSignedCertificate”

  1. Quirel Says:

    Nun gibts auch die offizielle Hilfe dazu: https://technet.microsoft.com/en-us/library/hh848633(v=wps.640).aspx

  2. Quirel Says:

    Und so kann man die verfügbaren Crypto-Provider ermitteln: http://www.sysadmins.lv/blog-en/get-registered-csps-on-the-system.aspx

  3. Quirel Says:

    Hier wie man es anwenden kann: https://technet.microsoft.com/en-US/library/mt210892(WS.11).aspx

    und wie man den Private Key mitexportieren kann: http://powershell.com/cs/blogs/tips/archive/2009/10/20/exporting-certificate-with-private-key.aspx

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: