it-swarm.com.de

"Manifest XML-Signatur ist auf Client-Computer nicht gültig", funktioniert jedoch auf Entwicklercomputern

Bei der Arbeit hatten wir eine ClickOnce-Anwendung, die bei der Installation des Clients die Ausnahme auslöste:

  • Ausnahme Manifest aus Datei lesen:/FILEPATH: Das Manifest ist möglicherweise ungültig oder die Datei konnte nicht geöffnet werden.

    Die Manifest-XML-Signatur ist nicht gültig.

    SignatureDescription konnte für den gelieferten Signaturalgorithmus nicht erstellt werden.

Um dieses Problem zu lösen, haben wir am Ende eine andere Zertifikatsdatei verwendet, und es hat gut funktioniert (resigniert das Manifest).

Aber wir können nicht verstehen, warum es klappt, die Anwendung auf den Entwicklermaschinen zu installieren (auch wenn Entwickler nicht mit der Anwendung arbeiten), aber es funktioniert nicht für die Maschinen der Kunden.

Wir haben nicht viele Informationen zur Erstellung der Zertifikate oder zum ClickOnce-Paket, da die Person, die das Zertifikat erstellt hat, nicht mehr vorhanden ist und keine Dokumentation darüber hinterlassen hat.

Das verwendete Zertifikat hatte kein Kennwort und normale Benutzer haben keine Administratorrechte.

Frage von Stack Overflow Manifest XML-Signatur ist ungültig, ich könnte vermuten, dass das Problem möglicherweise darin bestand, dass sie das Projekt und das Zertifikat mit .NET Framework 4.5 erstellt haben und dann, wenn sie die Anwendung festlegen Bei der Ausführung mit .NET Framework 4.0 wurde der Signaturalgorithmus nicht geändert. Aber ich würde auch annehmen, dass es für die Entwickler nicht funktionieren sollte.

Jeder Einblick, den Sie mir geben könnten, wäre sehr dankbar.

24
Dzyann

Update: Dieses Problem wurde ab Visual Studio 2013 Update 3 behoben. Versuchen Sie, Ihre App aus dieser Version von VS oder höher zu veröffentlichen.

Vorherige Antwort:

Dies liegt daran, dass auf Ihrem Entwicklercomputer .NET 4.5 installiert war, während auf Ihren Clientcomputern nur .NET 4.0 installiert war. Die .NET 4.0-Clientcomputer können das Manifest nicht lesen, da sie SHA-1 erwarten, während die .NET 4.5-Entwicklercomputer dies tun können.

Siehe diesen Blogbeitrag für einen zusätzlichen Kontext.

Diese Änderung ist darauf zurückzuführen, dass wir in NetFX4.5 keine älteren Zertifikate als Standard (SHA-1) zum Signieren des Manifests mehr verwenden, sondern eine neuere Version (SHA-256) verwenden, die von der NetFx4.0-Laufzeit nicht erkannt wird. Daher beschwert sich die Laufzeitumgebung 4.0 während der Analyse des Manifests über ein ungültiges Manifest. Wenn wir bei älteren Frameworks versuchen, eine ClickOnce-App auf einer Box auszuführen, für die keine Laufzeitumgebung vorgesehen ist, wird von ClickOnce eine Meldung an den Benutzer mit der Meldung "Sie benötigen xxxx.xx-Laufzeitumgebung zum Ausführen dieser App" angezeigt. Wenn jedoch .NET 4.5 gestartet wird und eine 4.5-ClickOnce-App auf der Box ausgeführt wird, bei der nur .NET 4.0 installiert ist, wird die Nachricht über ein ungültiges Manifest beschwert. Um das Problem zu beheben, müssen Sie .Net Framework 4.5 auf dem Zielsystem installieren.

Versuchen Sie, Ihr Manifest mit einem SHA-1-Zertifikat anstelle eines SHA-2-Zertifikats zu signieren.

25
MatthewKing

Wir hatten ein ähnliches Problem - wir haben eine .NET 4.0-Anwendung, die auf Computern mit .NET 4.0 oder höher arbeiten soll. Da unser Code-Signing-Zertifikat abgelaufen ist, haben wir ein neues erworben, und da Sha1 dementiert wird, haben wir ein Sha256-Zertifikat erhalten. Ich sollte sagen, dass auf unserer Build-Maschine .NET 4.5 installiert ist, sodass alle Framework-Assemblys auf dieser Maschine aktualisiert werden.

Wir haben festgestellt, dass der folgende Fehler erst nach der Migration auf das neue Zertifikat auf .NET 4.0-Computern angezeigt wurde:

* Activation of http://localhost/publish/Test.application resulted in exception. Following failure messages were detected:
    + Exception reading manifest from http://localhost/publish/Test.application: the manifest may not be valid or the file could not be opened.
    + Manifest XML signature is not valid.
    + SignatureDescription could not be created for the signature algorithm supplied.

Nach ein wenig Recherche haben wir diesen Thread und einige andere herausgefunden, die auf ein Upgrade auf .NET 4.5 hinweisen. Dies ist jedoch keine funktionierende Lösung für uns - wir möchten unsere Kunden nicht dazu zwingen, das .NET-Framework zu aktualisieren (~ 20% verwenden immer noch das System) .NET 4.0). Hier sind die Lösungen, zu denen wir gekommen sind:

  • Signieren Sie die Manifeste auf einem Computer, auf dem nur .NET 4.0 installiert ist
  • Melden Sie sich mit dem folgenden PowerShell-Skript an, anstatt mage.exe zu verwenden:
 function SignFile ($ filePath, $ timeStampUri, $ certThumbprint) 
 {
 # Add-Type System.Security 

 $ x509Store = New-Object -TypeName ([System.Security.Cryptography.X509Certificates.X509Store]) -ArgumentList ([System.Security.Cryptography.X509Certificates.StoreName] :: My), ([System.Security.Cryptography.X509Certificates). StoreLocation] :: CurrentUser) 
 Versuchen
 {
 $ x509Store.Open ([System.Security.Cryptography.X509Certificates.OpenFlags] :: ReadOnly) 
 $ x509Certificate2Collection = $ x509Store.Certificates.Find ([System.Security.Cryptography.X509Certificates.X509FindType]] :: FindByThumbprint, $ certThumbprint, $ false); 
 if ($ x509Certificate2Collection.Count -eq 1) 
 {
 $ cert = [System.Security.Cryptography.X509Certificates.X509Certificate2] @ ($ x509Certificate2Collection) [0] 

 # Dies erzwingt die Verwendung von SHA1 anstelle von SHA256 
 $ cert.SignatureAlgorithm.FriendlyName = "" 

 Add-Type -AssemblyName "Microsoft.Build.Tasks.v4.0" 

 [Microsoft.Build.Tasks.Deployment.ManifestUtilities.SecurityUtilities] :: SignFile ($ cert, $ timeStampUri, $ filePath) 
 } 
 } 
 endlich
 {
 $ x509Store.Close (); 
 } 
} 

EDIT: Ich benutze dieses Kommando-let tatsächlich, um die Manifest-Dateien zu signieren:https://Gist.github.com/nedyalkov/a563dd4fb04d21cb91dc

Hoffen Sie, dass diese Informationen für jemanden Zeit und Mühe sparen!

13

In folgendem Szenario waren wir ebenfalls mit einem ähnlichen Problem konfrontiert.

Wir haben einfach von vs2008 auf vs2013-update 5 umgestellt.

Unsere Clickonce-App ist auf .net 3.5 verfügbar.

Danach gab unsere Clickonce-App, die mithilfe von nant-Skript an der Eingabeaufforderung erstellt wurde, den gleichen Fehler "Manifest-XML-Signatur ist ungültig" auf einem Computer, auf dem die .net-Framework-Version älter als 4.5 ist.

Da wir vs2013-update 5 verwendeten, war dies offensichtlich nicht mit der in vs2013-update 3 durchgeführten Korrektur verbunden.

Nachdem wir mit einer Beispielanwendung ein Versuch durchgeführt hatten, haben wir die Datei mage.exe herausgesucht, mit der wir das Manifest nach der Aktualisierung des Manifests zurücktreten. Wenn wir das Setup mit dem VS2013-Entwicklerbefehl Prompt erstellen, wird mage.exe verwendet, das mit VS2013 installiert wird. Es ist nicht dieselbe Behebung wie in VS2013-Update 3 vorgesehen. C:\Programme (x86)\Microsoft SDKs\Windows\v7.0A\Bin ") hat unser Problem gelöst.

0
rikencpatel