PFX-Zertifikat erstellt, aber die Verschlüsselung ist nicht aktiviert

1

Ich habe ein PFX-Zertifikat mit der Visual Studio Developer-Eingabeaufforderung wie folgt erstellt.

makecert -r -pe -n "CN=mycert" -sky exchange "mycert.cer" -sv "mycert.pvk"
pvk2pfx -pvk "mycert.pvk" -spc "mycert.cer" -pfx "mycert.pfx" -pi [password]

Dann benutze ich PowerShell, um das Zertifikat abzufragen

$cert = Get-PfxCertificate [Location]
$cert.Verify()
# Returns 'False'

Wie kann ich dieses Zertifikat für die Verschlüsselung verwenden?

Aktualisieren

@ root vorgeschlagen mit Import-PfxCertificate Befehl. Dies ist, was passiert, wenn ich es laufen lasse.

Import-PfxCertificate -FilePath [Path]
Import-PfxCertificate : The PFX file you are trying to import requires either a different password or membership in an Active Directory principal to which it is protected.
At line:1 char:1
+ Import-PfxCertificate -FilePath [...]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Import-PfxCertificate], Win32Exception
    + FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.CertificateServices.Commands.Im 
   portPfxCertificate

Weiteres Update

@ McDonald's schlug eine sichere Methode vor, um das Passwort an das zu übergeben Import-PfxCertificate Befehl. Das habe ich versucht;

Import-PfxCertificate -FilePath [Path] -Password (Get-Credential).Password
$cert = dir cert:\localmachine\my | where { $_.Thumbprint -eq [Thumbprint] } | Select-Object
$cert.Verify()

Gibt immer noch false zurück. Noch mehr Hinweise?

Steztric
quelle
@root Ich bekomme das ist ein PowerShell-Befehl. Wie hilft es mir? Hast du ein Beispiel?
Steztric
Es gibt drei Beispiele am Ende dieses Links.
root
Es wäre hilfreich, wenn Sie etwas in der Art von "Zertifikate müssen in Ihrem Zertifikatspeicher installiert werden, um sie für die Verschlüsselung zu verwenden" sagen, wenn dies tatsächlich der Fall ist, anstatt mich nur mit der Dokumentation für einen bestimmten Befehl zu verknüpfen, der gibt mir keinen grund warum $cert.Verify() gibt false zurück. Aufgrund dieses neuen Fehlers denke ich jedoch nicht, dass dies tatsächlich mein Problem ist. Vielmehr ist das Zertifikat falsch konfiguriert. Meine Frage ist, warum das Zertifikat falsch konfiguriert ist.
Steztric
Dies kann einfach nur ein Passwortproblem sein. Geben Sie dieser Syntax eine Chance (ändern Sie natürlich, was für Ihr System zutrifft) und melden Sie mir Ihre Ergebnisse, wenn dies für Sie von Bedeutung ist. Import-PfxCertificate –FilePath C:\mycert.cer cert:\localMachine\my -Password (ConvertTo-SecureString -String "[Password]" -Force –AsPlainText).... technet.microsoft.com/en-us/itpro/powershell/windows/pkiclient/…
Pimp Juice IT

Antworten:

3

Das Verify Methode prüft, ob ein Zertifikat vertrauenswürdig ist. Um genau zu sehen, warum die Überprüfung fehlschlägt, müssen wir die Kette erstellen:

$cert = Get-PfxCertificate -FilePath .\mycert.pfx
$chain = New-Object System.Security.Cryptography.X509Certificates.X509Chain
$chain.Build($cert)
$chain.ChainStatus

Wenn ich Ihre Schritte wiederhole und diese Befehle ausführe, erhalte ich eine Status von UntrustedRoot. Dies bedeutet, dass die Überprüfung fehlgeschlagen ist, da das Zertifikat nicht von einer vertrauenswürdigen Zertifizierungsstelle signiert wurde -r einschalten makecert ).

Importieren Sie das Zertifikat in den Speicher vertrauenswürdiger Stammzertifizierungsstellen, um es zu überprüfen:

Import-PfxCertificate -CertStoreLocation Cert:\CurrentUser\Root -FilePath .\testcert.pfx -Password (Read-Host 'Password' -AsSecureString)

Geben Sie das PFX-Passwort ein, akzeptieren Sie den großen Warndialog und das Zertifikat wird hinzugefügt. Dann wird die Überprüfung bestanden. Wenn Sie GUIs bevorzugen, certmgr.msc werde den Job machen.


Sie können die RSA-Parameter problemlos verwenden, ohne dass das Zertifikat von Ihrem Computer als vertrauenswürdig eingestuft wird. Angenommen, die Nummer 137 ist eine geheime Nachricht an den Inhaber des privaten Schlüssels. Wir können den öffentlichen Schlüssel verwenden, um unsere Nachricht zu verschlüsseln:

$public = Get-PfxCertificate .\mycert.cer
$public.PublicKey.Key.Encrypt(@(137), $false)

Dann irgendwie das resultierende verschlüsselte große Array von Bytes (nennen Sie es $message ) gelangt zum privaten Schlüsselhalter, der die ursprüngliche Nummer wiederfindet:

$private = Get-PfxCertificate .\mycert.pfx
$private.PrivateKey.Decrypt($message)

Normalerweise etwas Interessanteres / Fortgeschritteneres ( siehe MSDN ) wäre mit den Schlüsseln erledigt. Der Punkt ist, dass Anwendungen das Zertifikat verwenden können, ohne dass es vom Computer als vertrauenswürdig eingestuft wird.

Ben N
quelle
Netter Ben, anscheinend hast du den Rat des MSDN-Posts befolgt und gezeigt, wie es geht Überprüfen Sie das Zertifikat direkt mit dem X509Chain-Objekt und gab dann einige andere Hinweise.
Pimp Juice IT
@BenN danke für die Hinweise. Das Hauptproblem war, dass das Zertifikat vom Host nicht als vertrauenswürdig eingestuft wurde und als Stammzertifikat installiert werden muss.
Steztric
0

Ich habe die Antwort von @ BenN akzeptiert, da dies die eigentliche Lösung ist. Ich wollte die Dinge, die ich gelernt habe, zu einem zusammenhängenden Prozess zusammenfassen, damit andere leicht Zertifikate für die Verschlüsselung generieren können.

Schritt 1: Erstellen Sie ein Zertifikat

$publicCert = New-SelfSignedCertificate -DnsName $dnsName `
    -CertStoreLocation Cert:\LocalMachine\My

Das Zertifikat ist nicht vertrauenswürdig

$publicCert.Verify()
False

Schritt 2: Exportieren Sie das PFX-Zertifikat

$cred = Get-Credential
Export-PfxCertificate -Cert $publicCert -FilePath $certPath -Password $cred.Password

Schritt 3: Installieren Sie das Zertifikat im Stammzertifikatsspeicher

Import-PfxCertificate -FilePath $certPath -CertStoreLocation Cert:\CurrentUser\Root `
    -Password $cred.Password

Schritt 4: Überprüfen Sie das Zertifikat erneut

$publicCert.Verify()
True

Befolgen Sie dann die Anweisungen von @ BenN zur Verwendung des Zertifikats für die Entschlüsselung.

Steztric
quelle