visual-studio-2010 - Kann die Schlüsseldatei 'blah.pfx' nicht importieren-Fehler 'Die Schlüsseldatei kann passwortgeschützt sein'




passwords (19)

Wir haben gerade unsere Visual Studio 2008-Projekte auf Visual Studio 2010 aktualisiert. Alle unsere Assemblys wurden mit einem Verisign signiert. Seit der Aktualisierung erhalten wir kontinuierlich den folgenden Fehler:

Die folgende Schlüsseldatei kann nicht importiert werden: Firmenname.pfx. Die Schlüsseldatei kann passwortgeschützt sein. Um dies zu korrigieren, versuchen Sie, das Zertifikat erneut zu importieren, oder installieren Sie das Zertifikat manuell mit folgendem Schlüsselcontainernamen im CSP für starke Namen: VS_KEY_3E185446540E7F7A

Dies geschieht auf einigen Entwicklungsmaschinen und nicht auf anderen. Einige Methoden, die verwendet wurden, um dies zu beheben, die zeitweise funktionierten, sind:

  • Erneute Installation der Schlüsseldatei vom Windows Explorer (Rechtsklick auf die PFX-Datei und Klick auf Install)
  • Wenn Sie Visual Studio 2010 zum ersten Mal auf einem neuen Computer installieren, werden Sie beim ersten Öffnen des Projekts zur Eingabe des Kennworts aufgefordert, und dann funktioniert es. Auf Computern, die von Visual Studio 2008 aktualisiert wurden, wird diese Option nicht angezeigt.

Ich habe versucht, das SN.EXE Dienstprogramm (Strong Name Tool) zu verwenden, um den Schlüssel mit dem Strong Name CSP zu registrieren, wie die Fehlermeldung vorschlägt, aber wann immer ich das Tool mit beliebigen Optionen unter Verwendung der mit Visual Studio 2010 SN SN.EXE Version ausführe .EXE listet nur seine Befehlszeilenargumente auf, anstatt etwas zu tun. Dies geschieht unabhängig davon, welche Argumente ich anbiete.

Warum passiert das und was sind klare Schritte, um es zu beheben? Ich bin dabei, ClickOnce Installationen und Microsoft-Code-Signaturen aufzugeben.


Answers

Ich habe eine Fehlerbehebung gefunden, mit der Sie in einer Umgebung mit mehreren Entwicklern erfolgreich erstellen können:

Anstatt das Kennwort zu ändern (wodurch die PFX-Datei geändert wird), wählen Sie erneut die PFX-Datei aus der Combobox. Dies ruft dann den Passwortdialog auf. Nach Eingabe des Passworts wird das Projekt OK. Jeder Entwickler kann dies auf seinem lokalen Rechner tun, ohne die .pfx Datei zu verändern.

Ich habe immer noch Probleme, Baugruppen auf unserem Build-Server-Rechner zu signieren. Ich bekomme den gleichen Fehler dort, aber die Verwendung der sn.exe-i Methode behebt das Problem für den Buildserver nicht.


Nachdem ich all diese Lösungen (und noch viel mehr) getestet hatte, stellte ich fest, dass das Problem woanders liegt. Für Leute, die nach dem Kauf eines Zertifikats dasselbe Elend durchmachen wie ich, teile ich die Lösung für mein Problem.

Verhalten

Ich verstehe, dass "sign" einen starken Namen und keinen authenticode auf eine DLL oder EXE anwendet. Dies ist der Grund, warum signtool in diesem Fall funktioniert, aber "signieren" in Visual Studio wird nicht funktionieren.

Grund

In der Vergangenheit hatte ich Erfahrung mit Zertifikaten von Verisign. Sie haben eine KeySpec=2 im Zertifikat - die mit der Sign-Funktionalität in Visual Studio verwendet wird. Diese Zertifikate funktionieren sowohl für Visual Studio als auch für Signtool.

Ich habe jetzt Zertifikate von Comodo gekauft, die eine falsche KeySpec=1 in den KeySpec=1 haben. Das bedeutet, dass diese Zertifikate mit signtool (authenticode) funktionieren, aber nicht mit starker Namensgebung (Dropdown-Liste).

Lösung

Es gibt zwei Möglichkeiten, dieses Problem zu lösen:

  1. Erstellen Sie ein separates Zertifikat für Ihren starken Namen mit sn -k [name].snk . Unterzeichnen Sie die Assembly mit dem Befehl snk, und verwenden Sie anschließend signtool mit Ihrem Codesignaturzertifikat, um die DLL / EXE mit der Authenticode-Signatur zu signieren. Dies ist zwar seltsam, aber nach meinem Verständnis ist dies ein korrekter Umgang mit Zertifikaten, da starke Namen einen anderen Zweck als authenticode haben (siehe auch diesen Link für Details darüber, wie das funktioniert).
  2. Importieren Sie Ihr Zertifikat als KeySpec=2 . Die Vorgehensweise hierzu ist hier detailliert beschrieben .

Da ich mehrere starke Namen verwenden möchte, verwende ich zur Zeit Option (1), obwohl Option (2) auch funktioniert.

Um sicherzustellen, dass diese Lösung in Zukunft nicht verloren geht, ist hier die Vorgehensweise von Lösung 2:

  1. Mit dem MMC "Certifiates" exportieren Sie das vorhandene Keyset ( KeySpec=1 ) in eine PFX-Datei. Hinweis: Bitte sichern Sie diese Datei an einem sicheren Ort und testen Sie, ob die Datei auf einem anderen Rechner ok importiert werden kann, wenn Sie wirklich auf Nummer sicher gehen wollen!
  2. Löschen Sie das vorhandene Zertifikat aus dem Crypto Store (früher mit der MMC).
  3. Öffnen Sie eine CMD-Eingabeaufforderung.
  4. Importieren Sie die PFX-Datei mit diesem Befehl:
    1. certutil -importPFX -user <pfxfilename> AT_SIGNATURE
    2. Geben Sie die Passphrase für die pfx ein, wenn Sie dazu aufgefordert werden.

Sie sollten nun ein Keyset / Zertifikat mit KeySpec=2 . Bei Bedarf können Sie dies jetzt mit der MMC erneut in eine andere PFX-Datei exportieren.


Als der ursprüngliche Autor der Arbeit über den Connect-Fehlerbericht gibt es ZWEI Varianten dieser Nachricht (ich habe später entdeckt)

Für eine Variante verwenden Sie sn.exe (normalerweise, wenn Sie starke Namensgebung durchführen), um den Schlüssel in den Speicher für starke Namen zu importieren.

Die andere Variante, für die Sie certmgr zum Importieren verwenden, ist, wenn Sie sich für Dinge wie Click-Once-Bereitstellung anmelden (beachten Sie, dass Sie für beide Zwecke dasselbe Zertifikat verwenden können).

Hoffe das hilft.


Ich hatte das gleiche Problem nach dem Verschieben meiner Windows-Installation auf eine SSD . Keine der anderen Lösungen funktionierte für mich.

Meine Lösung bestand darin, die Projektdatei in Notepad zu öffnen und alle Verweise auf PFX-Schlüssel zu entfernen. Sobald die Datei gespeichert ist, öffnen Sie die Lösung in Visual Studio. Gehe zum Projekt -> Eigenschaften -> Signieren. Sie sollten keine Schlüssel im Kombinationsfeld "Wählen Sie den Namen der Schlüsseldatei mit starken Namen" finden. Suchen Sie im Kombinationsfeld nach dem Schlüssel, wählen Sie ihn aus, und Ihr Projekt kann nun erstellt werden.


Dies löste mein Problem: Öffnen Sie Ihr VS-Projekt

Doppelklicken Sie auf Package.appxmanifest

Gehe zur Registerkarte Verpackung

Klicken Sie auf Zertifikat auswählen

Klicken Sie auf Zertifikat konfigurieren

Wählen Sie aus der Datei und verwenden Sie example.pfx diese Einheit oder irgendetwas anderes erstellt


Als Workaround habe ich versucht, Visual Studio 2010 als Administrator auszuführen, und es funktionierte für mich.

Ich hoffe das hilft.


Alle hier beschriebenen Methoden haben mir nicht geholfen. Aber als ich die * .pfx-Datei aus meinem Projekt löschte und sie der Signierung der Assembly wieder hinzufügte, baute ich mein Projekt mit ohne Fehler! Ich kann Gründe nicht erklären warum. Aber es hat für mich funktioniert.


Ich habe festgestellt, dass Sie in einigen Fällen versuchen sollten, diesen Schlüssel zu löschen, bevor Sie ihn installieren. Also folgendes tun:

  1. sn -d VS_XXXX
  2. sn -i mykey.pfx VS_XXX

VSCommands 2010 (Plugin für Visual Studio) kann dies automatisch für Sie beheben - klicken Sie einfach mit der rechten Maustaste auf Fehler und klicken Sie auf Apply Fix aus dem Menü. Sie können es von Visual Studio-Galerie erhalten .


In meinem Szenario verwendete der Build-Dienst nicht dasselbe Benutzerkonto, das ich den Schlüssel mit sn.exe importierte.

Nach dem Ändern des Kontos in mein Administratorkonto funktioniert alles einwandfrei.


Um dieses Problem in Visual Studio 2012 zu beheben, klicke ich mit der rechten Maustaste auf das Projekt, Eigenschaften -> "Signieren", und deaktivieren Sie dann die "Sign the ClickOnce Manifeste".


Ich habe zu früh gesprochen! Rebuild brachte die Fehler wieder ins Spiel ...

Ich fand das funktioniert - klicken Sie mit der rechten Maustaste in den Projektmappen- Explorer und schließen Sie es aus dem Projekt aus. Klicken Sie auf Alle Dateien anzeigen , klicken Sie mit der rechten Maustaste und fügen Sie sie erneut in das Projekt ein. Jetzt ausstehende Änderungen rückgängig machen ...

Aus irgendeinem Grund hat es das für mich erledigt und war relativ schmerzlos!


FYI

Ich benutzte die sn.exe mit -p Flagge zum offiziellen Code-Zeichen PFX-Datei (gekauft als Code-Signierung) wie unten, die SNK Datei erstellt und in Visual Studio 2013 dass SNK Datei wurde zur Verwendung durchsucht.

  • Welches das Kennwortproblem löste.

Aber das Problem ist immer noch, dass es immer wieder sagt: "Die Schlüsseldatei * .. SNK enthält kein öffentliches / privates Schlüsselpaar."


Mein Problem war, dass der TFS-Build-Controller als Netzwerkdienst ausgeführt wurde, und aus irgendeinem Grund habe ich nicht verstanden, warum die Visual Studio-Build-Host-Dienstzertifikate nicht verwendet wurden. Ich änderte die Identität des Visual Studio Build-Diensts in etwas überschaubarer, stellte sicher, dass es Rechte auf dem TFS-Server hatte, und fügte die Zertifikate mithilfe der MMC manuell hinzu.

Das Problem bestand auch darin, dass MSBuild die kennwortgeschützten Zertifikate nicht zum Speicher hinzufügen konnte.


Okay, das hat für mich funktioniert. Öffnen Sie die alte Projektmappe in Visual Studio 2010 als Administrator, und öffnen Sie die neue oder kopierte Projektmappe. Entfernen Sie als Administrator die kopierte PFK-Datei in der neuen Visual Studio 2010-Projektmappe und gehen Sie zu den Projekteigenschaften, und heben Sie die Auswahl auf.

Wenn beide Projekte geöffnet sind, kopieren Sie sie in die neue. Wechseln Sie zu den Projekteigenschaften und wählen Sie Erstellen. Ich habe Visual Studio geöffnet und geschlossen und auch nach dem Entfernen aus dem neuen Projekt erstellt, bevor ich es aus dem alten Projekt kopiert und es ausgewählt habe. Ich habe den Fehler zu Beginn dieses Posts erst erhalten, als ich das Projekt kopiert und versucht habe es zu bauen.


Ich hatte ein ähnliches Problem, aber nach dem Auswählen der pfx in einer "Strong Name Key-Datei" ComboBox und Eingabe des Passworts habe ich immer noch einen ähnlichen Fehler (ohne den Container-Namen Teil):

Die folgende Schlüsseldatei kann nicht importiert werden: Firmenname.pfx. Die Schlüsseldatei kann passwortgeschützt sein. Versuchen Sie, das Zertifikat erneut zu importieren, oder installieren Sie das Zertifikat manuell um dieses Problem zu beheben

Außerdem wurde das Zertifikat-Informationsfenster "Sign the ClickOnce manifests" nicht ausgefüllt.

Ich habe "Select from File ..." auf meiner pfx, und es löste das Problem.


Ich habe die Key (pfx) -Datei in der Dropdown-Liste "Choose a Strong Name Key" (Gewählte Namen-Schlüsseldatei auswählen) erneut ausgewählt. Anschließend wurde das Passwort im Popup-Fenster "PASSWORT EINGEBEN" angegeben. Ich habe mein Projekt gespeichert und rebuild.build erfolgreich ausgeführt.

  • Öffnen Sie die Projekteigenschaften.
  • Klicken Sie auf den Signierungsbereich.
  • Wo es heißt Wählen Sie eine starke Name Schlüsseldatei: ', wählen Sie den aktuellen Wert erneut aus der Drop-Down-Box:

  • Visual Studio fordert Sie nun zur Eingabe des Kennworts auf. Geben Sie es ein.

  • Speichern Sie Ihr Projekt und führen Sie eine Neuerstellung durch.

  • Wenn eine Fehlermeldung angezeigt wird: "Es wurde versucht, auf ein Token zu verweisen, das nicht existiert", ignorieren Sie es einfach und fahren Sie mit den folgenden Schritten fort

  • Klicken Sie auf den Button "Passwort ändern":

  • Geben Sie das ursprüngliche Passwort in alle drei Felder ein und klicken Sie auf OK. Wenn Sie Ihr Passwort ändern möchten (oder Ihr altes Passwort die Komplexitätsanforderungen nicht erfüllt), können Sie dies jetzt tun.

  • Speichern Sie Ihr Projekt und führen Sie eine Neuerstellung durch.

Mehr Info..


Ich hatte das gleiche Problem und löschte den Laden und das Lesen hat nicht funktioniert. Ich musste folgendes tun.

  • Holen Sie sich eine Kopie von OpenSSL . Es ist für Windows verfügbar . Oder benutze eine Linux-Box, wie sie alle haben.

  • Führen Sie Folgendes aus, um in eine Schlüsseldatei zu exportieren:

    openssl pkcs12 -in certfile.pfx -out backupcertfile.key
    
    openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
    

Dann können Sie in den Projekteigenschaften die PFX-Datei verwenden.


Vorsicht beim Reinigen einer Lösung; Wenn Sie eine Lösung bereinigen und wenn Sie in Ihrem Projekt auf eine Bibliothek (z. B. nhibernate) verweisen und diese Bibliothek eine Abhängigkeit hat (z. B. iesi.collections), dann werden Sie sehen, dass iesi.collections gelöscht wird, selbst wenn Sie die Lösung und Sie müssen diese DLL wieder in Ihren Ordner legen. oder Sie können auch auf iesi.collections verweisen und in den Eigenschaften die Option copy-local: yes wählen





visual-studio-2010 visual-studio passwords pfx