UAC: Wie signiert man sein Program?



  • 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!



  • 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.

    Sorry, da hab ich die Frage falsch verstanden.
    Leider bin ich als Hobby Programmierer recht weit entfernt von sämtlichen Informationen zu Zertifikaten und kann dazu leider keine Auskunft geben.
    Im Allgemeinen jedoch ist das finden des Zertifikatnamens quasi ein Teil meiner Frage 😉 wenn es auch nicht von mir speziell genannt wurde.
    Leider kann ich auch nach langen googeln nix zur Zertifikatsbezeichnung finden.
    Evtl. fehlt mir da ein Suchwort? "codesign certificate type"?

    Zur zweiten Lösung im genannten Thread habe ich auch noch eine Dritte.
    Jedoch ist das ohne eine größere Kollekte aller Benutzer nicht möglich.
    Jedoch suche ich tatsächlich sowas wie Bulli aufgeführt hat.
    Also eine Organisation, die für wenig bis gar nix ein solches Zertifikat
    für nicht komerzielle Produkte zur Verfügung steht.
    Irgendwie muss bei der ganzen Aktion eine Datei herausspringen die man dann im Code einbinden kann.

    Grüße
    TheNoName



  • Nochmal zurück zu dieser Aussage/Frage:

    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!

    Stimmt das nun, kommt die Meldung hier mit Zertifikat nur 1x ? Sonst wären die Mühen umsonst.
    Leider habe ich das noch nie gemacht und habe keine Erfahrung.
    So direkt rauslesen kann man das aus den anderen Artikeln auch nicht??


  • Mod

    Ich weiß zwar nicht genau auf was Du Dich beziehst, aber ein Zertifikat reduziert nicht die Anzahl von Kontrolleingaben.



  • Die Überlegung war folgende:

    Was ich weis:
    Ohne Zertifikat kommt jedesmal die Aufforderung das dieses Programm von einem "unbekannten Hersteller" sei. Ist ja klar, keine Code Zertifizierung.
    Das alles mit einem Administrator Manifest.

    Was ich vermute:
    Mit Zertifikat kommt die Meldung 1x, dann merkt sich Windows, das diese Signatur zulässig ist und speichert den Hersteller als "gutartig" ab.
    Einen "Unbekannten Hersteller" wird Windows wohl kaum speichern als "gutartig".
    Der Dateiname + größe + Possition wird er wohl nicht abspeichern?

    Die Folge wäre: 1x die Abfrage. (auch mit admin Manifest) Danach läuft das Programm ohne die Meldung "Unbekannter Hersteller" oder "Hersteller XY" an.

    Die Frage ist nun: könnte das so stimmen, oder kommt trotz Signatur bei einem Admin Manifest die Aufforderung diesen zu bestätigen bei jedem Start der Software?


Anmelden zum Antworten