UAC: Wie signiert man sein Program?



  • Hallo zusammen,

    seit Vistas UAC ist das Starten eigener "privater" Programme ein Hindernis.
    Hier schon mal meinen ausdrücklichen Dank an MS.
    Jedesmal beim Starten der eigenen Programme kommt nun ein "unbekanntes Programm"
    Dialog, welcher irgendwann recht deutlich nervt.
    Nun sind anscheinend eigene Entwicklungen nicht mehr gewollt?
    Wenn ich es richtig gelesen habe, handelt es sich um .snk Key Dateien, die noch
    hinzucompiliert werden.

    Gibt es schon universelle Signaturen?
    Was kosten solche Signaturen und wo bezieht man sie am günstigsten?
    (für private Programmierer!!)
    Die nächste Frage ist dann noch: kann man mit "einer" Signatur für alle eigenen
    Programme leben, oder muss es pro EXE eine eigene Signatur sein?

    Ist pro VS Packet eine Signatur zur Anmeldung umsonst dabei?
    Ich mein: wozu kauf ich mir das Zeug? Etwa zum Entwickeln?

    Grüße
    TheNoName


  • Mod

    1. Hast Du scheinbar keine Ahnung wann welche Meldungen kommen. Ich empfehle Dir mnal etwas Literatur aus der MSDN über UAC.
    2. Nur wenn Dein Programm ein requireAdmin Manifest hat, bekommst Du auch immer einen Prompt. Oder Du hast Dein Programm aus dem Internet heruntergeladen. Im letzten Fall kommt die Meldung evtl. einmalig, aber das auch schon seit XP. Oder Dein Programm heißt SETUP.EXE oder ähnliches und hat kein Manifest!
    Alle anderen Programme zeigen keine Prompts.
    3. Benötigt man für das signieren von Code ein entsprechendes Zertifikat, dass Du in jedem Fal bei Verisign oder andren Herausgebern kaufen musst.
    4. Was stört Dich die Meldung, dass der Herausgeber nicht identifiziert werden kann, wenn es sowieso ein privates Programm ist.

    Mein Blog enthält massenweise Hinweise zu Manifesten und Links dazu.



  • 1. Hast Du scheinbar keine Ahnung wann welche Meldungen kommen. Ich empfehle Dir mnal etwas Literatur aus der MSDN über UAC.

    Klar desshalb frag ich ja 😮

    2. Nur wenn Dein Programm ein requireAdmin Manifest hat,

    Das hat es!

    Oder Dein Programm heißt SETUP.EXE oder ähnliches und hat kein Manifest!

    Nein, darüber habe ich schon gelesen und alles entfernt was install oder setup heisst in den Resourcen Info Applikation name und information ...

    4. Was stört Dich die Meldung, dass der Herausgeber nicht identifiziert werden kann, wenn es sowieso ein privates Programm ist.

    Es wird von mehreren privat genutzt und mich nervt einfach nur der 100st Popup. Die davor verkrafte ich noch.

    3. Benötigt man für das signieren von Code ein entsprechendes Zertifikat, dass Du in jedem Fal bei Verisign oder andren Herausgebern kaufen musst.

    Das war die eigentliche Frage: Wo am günstigsten, ca. wieviel, was tut man da so nachdem das Geld weg ist und wo gibt es günstige Alternativen für private Bastler.

    Dein Blog ist ein Anhaltspunkt aber nicht Moses Buch mit den 10 Manifesten.
    Nachdem hier bestimmt mehrere das Problem hatten interressiert mich die Meinung andere "Hobby" Programmierer und deren Lösungen.


  • Mod

    Bevor man fragt sollte man die Grundlagen gelesen haben!

    1. Mit einem Zertifikat wird nicht die Abfrage des requireAdmin Manifest unterdrückt, sondern nur der Name des Herausgebers angegeben.
    2. Es gibt keine Billiglösungen. Und ich würde niemals mit anderen ein Zertifikat teilen. Was weiß ich was ein anderer unter meinem Namen dann veröffentlicht.
    3. Was ist Dein Problem? Die Meldung des UAC? Die bekommst Du nicht weg, außer Du schaltest UAC aus.
    4. Wenn Du ein Manifest hast, spielt es keine Rolle wie die EXE heißt. Der Name der EXE spielt nur eine Rolle, wenn Du {b]kein Manifest [/b]hast!
    5. Mein Blog ist zwar nicht die Tontafel mit den 10 Manifesten, aber ein Ausgangspunkt. Man muss nur lesen und Links klicken. Zudem habe ich einen eigenen Tag dafür.

    Siehe http://blog.m-ri.de/index.php/2006/12/12/vista-und-die-notwendigkeit-eines-manifestes-fur-die-uac/

    Weitere Infos, Dokus und Hilfsprogramme:
    - Understanding and Configuring User Account Control in Windows Vista
    http://technet.microsoft.com/en-us/windowsvista/aa905117.aspx
    - Windows Vista Application Development Requirements for User Account Control Compatibility
    http://www.microsoft.com/downloads/details.aspx?FamilyID=BA73B169-A648-49AF-BC5E-A2EEBB74C16B&displaylang=en
    - Microsoft Application Verifier
    http://www.microsoft.com/downloads/details.aspx?familyid=BD02C19C-1250-433C-8C1B-2619BD93B3A2&displaylang=en
    - Microsoft Standard User Analyze
    http://www.microsoft.com/downloads/details.aspx?familyid=DF59B474-C0B7-4422-8C70-B0D9D3D2F575&displaylang=en



  • 1. Mit einem Zertifikat wird nicht die Abfrage des requireAdmin Manifest unterdrückt, sondern nur der Name des Herausgebers angegeben.

    Zu deutsch: das Popup kommt weiterhin, aber dann mit meinem Namen statt "unbekannte Herkunft"?
    Das aber dann doch nur 1x, wenn ich bestätige?

    3. Was ist Dein Problem? Die Meldung des UAC? Die bekommst Du nicht weg, außer Du schaltest UAC aus.

    z.B. ganz einfach als neue Taskmanager Aufgabe einrichten um das Program mit höchsten admin Rechten beim Windows Startup automatisch laufen zu lassen.



  • Schreibe einen Dienst!



  • Schreibe einen Dienst!

    Jep, sowas ist mir mit der obigen Aussage vorgeschwebt.
    -Wenn Vista+UAC erkannt wird, dann installiere mir 1x einen admin Dienst.
    (Dazu kann er ja gerne 1x seine Warnmeldung lostreten)
    -Wenn erkannt wird, das "meine exe" gestartet wird, dann tue das nicht, sondern sage meinem Dienst er soll es mit seinen Rechten machen. (Simpler Hook)

    Dann wäre die Sicherheitsabfrage gegeben und er nervt mich nicht mehr beim Starten.

    Auch eine Idee ist es das Programm nach dem Schliessen nicht wirklich zu beenden und zu warten bis es wieder verlangt wird. Dann kommt die Meldung nur 1x pro Computersession.



  • 1. Codesigning-Zertifikat ordern (z.B. bei https://globalsign.wis.de/ für ca. 208 Euro für ein Jahr Laufzeit, bei mehreren Jahren wird es etwas günstiger)

    2. Programmdatei(en) mit signtool.exe signieren



  • Habe kein Vista, aber mir kommt es so vor, als ob es vergleichbar mit den Zertifikaten für Java-Webstarter-Anwendungen, oder? Auf Arbeit bei uns bekommt auch jeder Anwender eine solche Meldung, und muß dieser vertrauen oder ablehnen. Aber, der Anwender kann auch sagen "Immer vertrauen". In dem Fall wird dem einen bestimmten Zertifikat immer vertraut, und der Anwender erhält beim nächsten Aufruf diese Meldung nicht mehr. (außer das Zertifikat ist abgelaufen)

    Ist das unter Vista bzw. UAC nicht möglich, einem Zertifikat immer zu zustimmen?

    Dann mal noch eine Frage von mir: handelt es sich um X.509-Zertifikate? Weil dann kann man als Hobby-Entwickler sich kostenlos ein Zertifikat bei CAcert.org besorgen. Nur leider wird wahrscheinlich Vista es als nicht vertrauenswürdig einstufen, da CAcert.org auch in den Mainstream-Browsern nicht vertraunswürdig ist.

    Ein Zertifkat kann man aber trotzdem günstig erwerben, kostet glaube ich bei den Trustcentern der Sparkassen um die 20 EUR für 1 oder 2 Jahre. Es ist nicht unerschwinglich.





  • Ist das unter Vista bzw. UAC nicht möglich, einem Zertifikat immer zu zustimmen?

    Anscheinend nur, wenn eine Signatur mitgeführt wird, bei mir ist da aber nix, also kommt "unbekannt" und es wird wahrscheinlich nicht universell "unbekannt" zugestimmt. Kann mich aber auch irren!



  • Na, ist ja auch logisch: Wie kann man einem Zertifikat immer zustimmen, wenn es kein Zertifikat gibt?

    Also besorge dir ein Zertifikat, und gut ist. Es gibt diese von kostenlos (CAcert.org), über günstig (S-Trust) bis teuer.

    Wo ist also die Schwierigkeit?


  • Mod

    Dann hat Deine gestartete EXE aber keine UI.

    Also besser einen Dienst starten. Den die Arbeit tun lassen und mit einen normalen UI Programm diesen steuern.



  • Früher war bei Verisign etc. die Codesignatur für ca. 79$ zu erhalten.
    Jetzt ist es ein Vielfaches.
    Muss wohl eine Sondervergünstigung gewesen sein.
    Die genannten obigen Zertifizierungsstellen sehen nicht nach Code Signatur aus 😞



  • Was ist denn eine Codesignatur?



  • Was ist denn eine Codesignatur?

    Das was mir fehlt: http://blogs.msdn.com/dparys/archive/2007/07/19/signieren-von-komponenten-uac-teil-3.aspx

    Zitat dort:

    Wer weitere gute kennt, kann in den Comments diese nennen.
    

    Leider tat das keiner 😞



  • Toll, das ist ja keine Antwort auf meine Frage! WAS ist denn eine Codesignatur? D.h. wie lautet die Definition oder besser wie heißt die Norm dazu? Ist es X.509? Es scheint so! Und somit können weiterhin CAcert.org und S-TRUST in Betracht kommen. Natürlich muß man sich dort informieren, ob sie von X.509 die Codesignatur-Variante anbieten. X.509 ist nunmal Standard, und somit nicht unwahrscheinlich.

    Und wenn man sich etwas bemüht und seine bevorzugte Internet-Suchmaschine füttert, kann man z.B. hier landen:
    http://wiki.cacert.org/wiki/CodesigningCert



  • So, laut MSDN muß es ein PKCS#7 Objekt eines X.509 Zertifikates sein.

    http://msdn.microsoft.com/en-us/library/aa140234(office.10).aspx schrieb:

    Create a Software Publishing Certificate (SPC)

    After generating a test X.509 certificate (myNew.cer in this example), you can now create a Software Publishing Certificate (SPC) using the cert2spc.exe program. The cert2spc.exe program wraps either one or multiple X.509 certificates (depending on the command line syntax used to invoke the program) into a PKCS #7 signed-data object, which conforms to the Public Key Certificate Standards (PKCS). For more information about PKCS #7, refer to the RSA specification listed in Appendix C: Suggested Reading of the Authenticode Appendixes documentation.

    Und wenn ich mal hier schaue:

    http://de.wikipedia.org/wiki/X.509 schrieb:

    PKCS #7 ist ein Standard zum Signieren und Verschlüsseln von Daten. Da das Zertifikat gebraucht wird, um die signierten Daten zu verifizieren, kann es in der „SignedData“-Struktur untergebracht werden. Eine .p7c-Datei ist der Spezialfall einer Datei, die keine Daten zum Signieren enthält, sondern nur die „SignedData“-Struktur.

    Dann passt das alles.

    Also folgende Möglichkeiten:

    1. Selber ein Zertifikat mit den MS-Tools erstellen. Dann kann wenigstens der Anwender deinem Zertifikat "Immer vertrauen" anklicken und wird nicht genervt. Aber das Zertifikat wird dann wohl als "Unbekannt und nicht vertrauenswürdig" eingestuft.

    2. Bei der CAcert.org ein Zertifikat besorgen und 100 Trustpoints sammeln. Ist zwar auch "Unbekannt und nicht vertrauenswürdig" (da CAcert.org von den Betriebssystem- und Browser-Herstellern nicht in die PKI-Roots aufgenommen wird, da CAcert.org "nur" aus Freiwilligen besteht), aber CAcert.org ist zumindest den "Freaks" bekannt und somit vertrauensvoller als wenn man ein Cert selber erstellt.

    3. Bei S-TRUST oder einem anderen Aussteller ein X.509 mit PKCS#7 Objekt ausstellen lassen und blechen. Dafür ist es dann "Vertrauenswürdig". 😃



  • thenoname schrieb:

    Was ist denn eine Codesignatur?

    Das was mir fehlt: http://blogs.msdn.com/dparys/archive/2007/07/19/signieren-von-komponenten-uac-teil-3.aspx

    Zitat dort:

    Wer weitere gute kennt, kann in den Comments diese nennen.
    

    Leider tat das keiner 😞

    Wenn Du Dir mal alle Beiträge in diesem Topic hier durchliest, dann würdest Du noch eine Alternative finden.



  • Bulli schrieb:

    http://www.s-trust.de/elektronischesignatur/index.htm

    Ich bezweifle, dass man damit Code signieren kann. Jedes Zertifikat enthält auch einen Verwendungszweck, bei einem Codesigning-Zertifikat sollte in etwa sowas drin stehen:

    - Garantiert, dass die Software von einem Software-Herausgeber stammt
    - Schützt die Software vor Änderungen nach der Veröffentlichung



  • Und? Das wird mit einem X.509-Zertifikat erreicht. Meinste das S-TRUST sowas nicht vergeben kann? Die unterliegen direkt VeriSign, die werden das schon machen dürfen. Und Fragen kostet ja nichts!


Anmelden zum Antworten