415 Stimmen

Die Schlüsseldatei 'blah.pfx' kann nicht importiert werden - Fehler 'Die Schlüsseldatei ist möglicherweise passwortgeschützt'

Wir haben gerade ein Upgrade unserer Visual Studio 2008-Projekte auf Visual Studio 2010 durchgeführt. Alle unsere Assemblies wurden mit einer starken Signatur versehen. Verisign Code Signing-Zertifikat. Seit dem Upgrade erhalten wir ständig den folgenden Fehler:

Die folgende Schlüsseldatei kann nicht importiert werden: Firmenname.pfx. Die Schlüsseldatei ist möglicherweise passwortgeschützt. Versuchen Sie zur Behebung des Problems, das Zertifikat erneut zu importieren, oder installieren Sie das Zertifikat manuell auf dem Strong Name CSP mit dem folgenden Schlüsselcontainernamen: VS_KEY_3E185446540E7F7A

Bei einigen Entwicklern ist dies der Fall, bei anderen nicht. Einige Methoden zur Behebung dieses Problems, die in einigen Fällen funktionierten, sind:

  • Neuinstallation der Schlüsseldatei über den Windows Explorer (Rechtsklick auf die PFX-Datei und Klick auf Installieren)
  • 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 Rechnern, die von Visual Studio 2008 aktualisiert wurden, erhalten Sie diese Option nicht.

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

Warum passiert das, und was sind klare Schritte, um das Problem zu lösen? Ich bin kurz davor, aufzugeben ClickOnce Installationen und Microsoft Code Signing.

31voto

Jarek Kardas Punkte 8425

VSCommands 2010 (Plugin für Visual Studio) kann dies automatisch für Sie beheben - klicken Sie einfach mit der rechten Maustaste auf den Fehler und klicken Sie im Menü auf Fix anwenden. Sie können aus der Visual Studio-Galerie abrufen .

1 Stimmen

Ich glaube, das ist für die Pro-Version - in meiner Lite-Version gibt es diese Option nicht.

2 Stimmen

Die Version, die ich gerade heruntergeladen habe (im September 2011), enthielt diese Option.

4 Stimmen

Dafür ist nach wie vor eine Pro-Lizenz erforderlich.

29voto

atlaste Punkte 29028

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

Verhalten

Ich verstehe, dass "sign" einen starken Namen und keinen authentischen Code auf eine DLL oder EXE anwendet. Deshalb ist das signtool wird funktioniert in diesem Fall, aber "sign" in Visual Studio wird nicht funktionieren.

Grund

In der Vergangenheit habe ich Erfahrungen mit Zertifikaten von Verisign gemacht. Sie haben eine KeySpec=2 im Zertifikat, das mit der Signierfunktion in Visual Studio verwendet wird. Diese Zertifikate funktionieren sowohl mit Visual Studio als auch mit signtool.

Ich habe jetzt Zertifikate von Comodo gekauft, die eine falsche KeySpec=1 in den Code Signing-Zertifikaten. Das bedeutet, dass diese Zertifikate gut mit signtool (authenticode) funktionieren, aber nicht mit strong naming (dem sign drop-down).

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 . Signieren Sie die Assembly mit dem snk und verwenden Sie anschließend signtool mit Ihrem Code Signing-Zertifikat, um die DLL/EXE mit der authenticode-Signatur zu signieren. Obwohl dies seltsam erscheint, ist dies meines Wissens nach ein korrekter Weg, um mit Zertifikaten umzugehen, da starke Namen einen anderen Zweck haben als authenticode (siehe auch dieser Link für Details zur Funktionsweise).
  2. Importieren Sie Ihr Zertifikat als KeySpec=2 . Das Verfahren hierfür lautet ausführlich hier .

Da ich mehrere starke Namen verwenden möchte, verwende ich derzeit 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 der MMC "Certifiates" exportieren Sie den bestehenden Schlüsselsatz ( 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 importiert werden kann, wenn Sie wirklich auf Nummer sicher gehen wollen!
  2. Löschen Sie das vorhandene Zertifikat aus dem Kryptospeicher (immer noch 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 einen Schlüsselsatz/Zertifikat mit KeySpec=2 . Bei Bedarf können Sie diese nun wieder über die MMC in eine andere PFX-Datei exportieren.

0 Stimmen

Ihre Lösung Nr. 2 war die einzige, die bei mir funktioniert hat (ohne ein zweites Befehlszeilentool oder einen Prozess zu verwenden).

1 Stimmen

Ja, ich verstehe wirklich nicht, warum einige Lösungen hier so viele Stimmen haben; dies ist wirklich die einzige Sache, die bei mir funktioniert hat, und ich bin ziemlich sicher, dass die meisten Leute, die ein CS-Zertifikat kaufen, das gleiche Problem haben. Tja...

1 Stimmen

Das ist die einzige Lösung, die bei mir funktioniert hat. Außerdem kann die .pfx-Datei keine Zertifikatsverkettungsinformationen zum Signieren von Baugruppen enthalten.

16voto

Romeo Punkte 1691

Um dieses Problem in Visual Studio 2012 zu lösen, klicke ich mit der rechten Maustaste auf das Projekt, Eigenschaften -> "Signieren", und deaktiviere dann die Option "Signieren der ClickOnce-Manifeste".

2 Stimmen

Dies ist eine perfekte Antwort, wenn keine Notwendigkeit für die Unterzeichnung besteht. Damit entfällt die Notwendigkeit, das Projekt zu unterzeichnen.

11voto

Bala Kumar Punkte 627

Ich habe die Key(pfx)-Datei im Dropdown-Feld "Choose a Strong Name Key File" erneut ausgewählt und dann im Popup-Fenster "ENTER PASSWORD" das Passwort eingegeben. Ich speicherte mein Projekt und führte rebuild.build erfolgreich durch.

  • Öffnen Sie die Projekteigenschaften.
  • Klicken Sie auf den Abschnitt Unterzeichnung.
  • Wählen Sie an der Stelle, an der es heißt "Wählen Sie eine Schlüsseldatei mit starkem Namen:", den aktuellen Wert aus dem Dropdown-Feld aus:

enter image description here

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

enter image description here

  • Speichern Sie Ihr Projekt und führen Sie einen Neuaufbau durch.

  • Wenn Sie die Fehlermeldung erhalten: "Es wurde versucht, auf ein Token zu verweisen, das nicht existiert", ignorieren Sie diese und fahren Sie mit den folgenden Schritten fort

  • Klicken Sie auf die Schaltfläche "Passwort ändern":

enter image description here

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

  • Speichern Sie Ihr Projekt und führen Sie einen Neuaufbau durch.

Mehr Info..

3 Stimmen

Dieser ganze Fehler scheint völlig willkürlich zu sein, aber diese Lösung hat bei mir funktioniert. Wenn jemand anderes so weit unten auf der Seite landet, kann ich nur empfehlen, alles zu versuchen.

6voto

user350076 Punkte 89

Als Abhilfe habe ich versucht, Visual Studio 2010 als Administrator auszuführen, und es hat funktioniert.

Ich hoffe, das hilft.

0 Stimmen

Aus irgendeinem Grund funktioniert sie nicht mehr. Ich konnte nicht glauben, dass dies tatsächlich das Problem gelöst. Danke!!!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X