Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   eigenes Zertifikat (https://www.delphipraxis.net/199773-eigenes-zertifikat.html)

haentschman 19. Feb 2019 12:06


eigenes Zertifikat
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo...:P

Tutorial: https://www.delphipraxis.net/90725-e...nfuehrung.html

Ich habe schon eigene Zertifikate erstellt und die EXEn signiert. Diesmal will er nicht. :?

1. Das Zertifikat ist im Store. (Bild Zertifikat)
2. Über eine Batch (PostBuild) wird die EXE signiert.
Zitat:

Target PostBuildEvent:
E:\Projects\Projects_Delphi\YYY\Work\Source\_PostB uild\XXX_Release.bat

Aktive Codepage: 850.

The following certificate was selected:
Issued to: XXX Signierung

Issued by: XXX Signierung

Expires: 01.01.2040 00:59:59

SHA1 hash: E62296F40E24A5E02DEA1FFB0CC8A984245C3613




Attempting to sign: E:\Projects\Projects_Delphi\YYY\_out\Development_R untime\YYY.exe

Successfully signed: E:\Projects\Projects_Delphi\YYY\_out\Development_R untime\YYY.exe

Number of files successfully Signed: 1

Number of warnings: 0

Number of errors: 0



Verifying: E:\Projects\Projects_Delphi\YYY\_out\Development_R untime\YYY.exe

Signing Certificate Chain:
Issued to: XXX Signierung

Issued by: XXX Signierung

Expires: 01.01.2040 00:59:59

SHA1 hash: E62296F40E24A5E02DEA1FFB0CC8A984245C3613


File is not timestamped.
Successfully verified: E:\Projects\Projects_Delphi\YYY\_out\Development_R untime\YYY.exe


Number of files successfully Verified: 1

Number of warnings: 0

Number of errors: 0


1 Datei(en) kopiert.
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:01:01.78
3. Aber die Eigenschaften (Bild Eigenschaften) haben keinen Reiter "Digitale Signaturen" und mich grinst immer noch das gelbe Bild an. :evil:

Nachtrag: W10

Danke für Ideen...

mjustin 19. Feb 2019 12:36

AW: eigenes Zertifikat
 
Zitat:

Zitat von haentschman (Beitrag 1425968)
Danke für Ideen...

Wie sehen die signtool Parameter denn aus?

haentschman 19. Feb 2019 12:39

AW: eigenes Zertifikat
 
Danke...
Zitat:

E:\Projects\Projects_Delphi\YYY\Certificate\Tools\ signtool.exe sign /v /s "XXX Certificate Store" /n "XXX Signierung" E:\Projects\Projects_Delphi\YYY\_out\Development_R untime\YYY.exe
E:\Projects\Projects_Delphi\YYY\Certificate\Tools\ signtool.exe verify /pa /v E:\Projects\Projects_Delphi\YYY\_out\Development_R untime\YYY.exe
PS: ich habe auch das SignTool aus dem W10 SDK genommen...wie gehabt.

mjustin 19. Feb 2019 12:49

AW: eigenes Zertifikat
 
Mit Windows 10 SDK signtool habe ich noch nicht gearbeitet...

unter Windows 7 und mit signtool.exe aus dem Windows 8 SDK sieht das Skript so aus:

Code:
signtool sign /fd SHA256 /a /f <pfad zur pfx Datei> /p <passwort> /t http://timestamp.comodoca.com projekt.exe
Laufzeitumgebung ist Windows 7 Enterprise (Desktop-Virtualisierung unter VMWare)

haentschman 19. Feb 2019 12:58

AW: eigenes Zertifikat
 
Danke...

Wir reden über unterschiedliche Dinge...ich habe keine pfx Datei, ich habe kein Paßwort, ich habe keinen Timestamp. :? Das Tutorial hat immer funktioniert...was habe ich übersehen? :?
Zitat:

Number of files successfully Signed: 1
Number of files successfully Verified: 1

mjustin 19. Feb 2019 13:08

AW: eigenes Zertifikat
 
Zitat:

Zitat von haentschman (Beitrag 1425975)
Danke...
Wir reden über unterschiedliche Dinge...ich habe keine pfx Datei, ich habe kein Paßwort, ich habe keinen Timestamp. :? Das Tutorial hat immer funktioniert...was habe ich übersehen? :?

Ja, ist mir auch aufgefallen, es macht aber keinen großen Unterschied ob man mit oder ohne PFX arbeitet. Timestamp ist optional (wenn es bisher auch ohne funktioniert hat).
Werden denn die früher signierten Anwendungen weiterhin korrekt als signiert auf diesem Windows Rechner angezeigt?

Schokohase 19. Feb 2019 13:29

AW: eigenes Zertifikat
 
Du sollst nicht mehr nur mit SHA1 signieren, sondern zusätzlich oder ausschließlich mit SHA256. Und bei SHA256 (zusätzlich) brauchst du auch den Zeitserver.

Das Tutorial ist gut, beschreibt allerdings nur SHA1 und nicht die mehrfach Signierung (SHA1/SHA256) oder eben die mit SHA256, ist somit in der Form veraltet und sollte überarbeitet werden.

haentschman 21. Feb 2019 05:21

AW: eigenes Zertifikat
 
Liste der Anhänge anzeigen (Anzahl: 2)
Moin...8-)
Zitat:

Du sollst nicht mehr nur mit SHA1 signieren, sondern zusätzlich oder ausschließlich mit SHA256. Und bei SHA256 (zusätzlich) brauchst du auch den Zeitserver.
Das ist nur interne Software. Mir geht es darum nur den gelben Bildschirm beim Starten des Updaters zu "verhindern". Klar kann man das besser machen. :P
Zitat:

Werden denn die früher signierten Anwendungen weiterhin korrekt als signiert auf diesem Windows Rechner angezeigt?
Nach dem ich das andere Zertifikat (DIMOWA®) installiert hatte, wurde die EXE (dSRG.exe) richtig erkannt.

:gruebel:

philipp.hofmann 21. Feb 2019 08:18

AW: eigenes Zertifikat
 
Vielleicht eine doofe Frage, da ich generell nur mit pfx-Zertifikaten arbeite: Kannst Du dein Wunschzertifikat nicht im Internet Explorer (ja Internet Explorer, nicht Edge) nicht als pfx exportieren?
Falls doch, dann weiß Du auf jeden Fall durch die Mitgabe als /f-Parameter, welches Zertifikat er beim Signieren verwendet.
Und dann kannst Du das Zertifikat auch als sha256 exportieren, so dass auch dies auf dem Stand der Zeit ist
Und dann sagt dir auch /v genau, was bei diesem Zertifikat nicht stimmt.

Assarbad 21. Feb 2019 09:24

AW: eigenes Zertifikat
 
Das Tutorial ist in der Tat hoffnungslos veraltet. Selbst die KB-Artikel der diversen CAs sind meist hoffnungslos veraltet. Die Dokumentation von Microsoft existiert teils in so vielen widersprüchlichen Versionen, daß einem schlecht wird. Wer des Englischen mächtig ist, ist noch immer mit dieser Abhandlung am besten bedient. Wird von Zeit zu Zeit aktualisiert und ist besser als jegliche Informationen der vorgenannten Quellen.

Ich habe auch festgestellt, daß es durchaus ein paar Minuten dauern kann, bis eine Signatur als gültig angesehen wird. Das kann man selber testen indem man eine signierte und auf einem anderen System geprüfte Datei, welche Elevation erfordert, auf ein anderes System kopiert und startet. Zuerst kommt üblicherweise eine Warnung, während ein paar Minuten später das übliche blaue oder grüne Häkchen im Dialog auftaucht. Grund ist vermutlich, daß hier vom System auch noch die CRLs konsultiert werden und eben nicht nur der lokale Zertifikatsspeicher.

Zitat:

Zitat von haentschman (Beitrag 1425973)
PS: ich habe auch das SignTool aus dem W10 SDK genommen...wie gehabt.

... auf? Klingt vielleicht seltsam, aber /verify basiert bspw. auf den systemspezifischen Policies. Ein Windows 10 wird sich hier also anders verhalten als ein Windows 7. Egal ob du nun das signtool aus dem neuesten Windows 10 SDK nutzt oder nicht. Sprich: benutzt du dasselbe signtool (inklusive entsprechender DLLs) auf einer anderen Windowsversion, bekommst du ein anderes Verhalten. Sogar Windows 10 1803 kann sich anders verhalten als 1809 ... aber das sind üblicherweise kleinere Sprünge als eben Windows 7 auf 10.

Übrigens gibt es nicht das Windows 10 SDK. Mittlerweile dürfte es ein halbes Dutzend geben. Auf meinem System habe ich zumindest allein vier verschiedene Windows 10 SDKs installiert (10.0.10240.0, 10.0.16299.0, 10.0.17134.0, 10.0.17763.0).

Zitat:

Zitat von mjustin (Beitrag 1425976)
Timestamp ist optional (wenn es bisher auch ohne funktioniert hat).

Ein Zeitstempel ist immer optional, korrekt. Aber ohne Zeitstempel läuft die Signatur zusammen mit dem Zertifikat aus. Das ist eher selten gewünscht. Zumal man aus Sicherheitsgründen immer ein Zertifikat mit einer eher beschränkten Gültigkeitsdauer benutzt.

Sollte das Verhalten gewünscht sein, daß die Signatur mit der Zertifikatsgültigkeit verfällt, kann im Zertifikat noch die EKU 1.3.6.1.4.1.311.10.3.13 (Lifetime Signing) gesetzt werden ... oder man läßt halt den Zeitstempel weg. Das ist aber wiederum so unkonventionell, daß es üblicherweise auf einen Fehler des Anwenders verweist. Die EKU kannst du mit "makecert -eku 1.3.6.1.4.1.311.10.3.13" setzen ...

Falls hier die Angst bestehen sollte, daß der Zeitstempel von einem bestimmten Anbieter sein muß, so darf ich das als unbegründet zurückweisen. Beispielsweise bietet Certum keinen SHA256-gehashten-Zeitstempel an, weshalb sie auf andere Anbieter von Zeitstempelservern verweisen. Für WinDirStat benutze ich dann http://timestamp.digicert.com für SHA256 und http://time.certum.pl für SHA1.

Übrigens, als Admin würde ich an die Decke gehen wenn ein kommerzieller Softwareanbieter selbstsignierte Zertifikate benutzt und mglw. sogar noch die Zertifikate ohne deutlichen Hinweis als vertrauenswürdig installiert. Ist aber ein anderes Thema und du schreibst ja es sei allein für interne Zwecke.

Zitat:

Zitat von haentschman (Beitrag 1425975)
...ich habe keine pfx Datei, ich habe kein Paßwort, ich habe keinen Timestamp. :?

Irrelevant wo das Zertifikat (bspw. Zertifikat und privater Schlüssel) herkommt. Der Zertifikatsspeicher ist aber definitiv sicherer als eine PFX-Datei die womöglich noch nicht einmal paßwortgeschützt ist.

Zitat:

Zitat von haentschman (Beitrag 1425975)
Das Tutorial hat immer funktioniert...was habe ich übersehen? :?

Was du übersehen, bzw. "verschlafen" hast, sind die teils drastisch verschärften Anforderungen an Zertifikate und damit erstellte Signaturen. Siehe auch (aber nicht nur) hier.

Zitat:

Zitat von haentschman (Beitrag 1426150)
Nach dem ich das andere Zertifikat (DIMOWA®) installiert hatte, wurde die EXE (dSRG.exe) richtig erkannt.

:gruebel:

Was darauf hindeutet, daß signtool womöglich ein anderes Zertifikat zum Signieren aussucht, als du dachtest (mit höheren Verbosity-Leveln kannst du schauen was genau signtool da macht). Schließlich hat signtool ganz eigene Regeln welches Zertifikat genommen wird (bspw. mit der längsten Gültigkeit) wenn man nur den Namen benutzt um das Zertifikat zu identifizieren. Stattdessen sollte man eigentlich den Fingerabdruck des Zertifikats benutzen, muß dann aber das entsprechende Skript alle paar Jahre aktualisieren.

Auch immer dran denken, daß zum Signieren das Zertifikat und der passende private Schlüssel verfügbar sein müssen. Zertifikat allein reicht nur zum verifizieren einer Signatur, aber eben nicht zum Signieren.

Und dann noch ein paar Notizen ...
  • Zertifikate werden üblicherweise von einer CA (Certification Authority) signiert, diese Signatur ist üblicherweise mit SHA1 oder SHA-256 (also SHA2 mit 256bit) gehasht, die Zertifikate werden in diesem Sinn als SHA1 oder SHA2 kategorisiert
  • Die Zertifikate bis hinauf zur Wurzel sollten alle Signaturen mit dem gleichen Hash-Algorithmus gehasht sein
  • Zertifikate ohne Wurzel sind üblicherweise selbstsigniert, da aber Systeme immer den Zertifikaten aus einer Zertifikatskette vertrauen schenken, muß eben dieses Zertifikat selbst als vertrauenswürdig im System installiert werden
  • Man kann ohne weiteres ein SHA1-Zertifikat nehmen um eine Signatur zu erzeugen die einen SHA2-Hash enthält und umgekehrt
  • Gleiches gilt für Zeitstempel, auch hier kann man theoretisch mischen wie man will, sollte man aber nicht

haentschman 26. Feb 2019 12:21

AW: eigenes Zertifikat
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallöle...8-)

jetzt geht es. :P

Hörensagen: Ich hatte, vermutlich durch das Ausprobieren, 2 Zertifikate die in das "Raster" gefallen sind. Da ich die "Automatikfunktion :wink:" nicht aktiviert hatte, wußte er nicht welches er nehmen sollte. Manchmal hilft es in die Batch eine PAUSE einzubauen um zu sehen was er treibt. :oops:

haentschman 2. Jul 2019 08:58

AW: eigenes Zertifikat
 
Moin...8-)

...ich muß das mal wieder hochholen. :? Kurzzeitig hat die Signierung wieder geklappt. Jetzt wieder nicht. :evil: Ich habe schon die Zertifikate entfernt, neu erstellt. Delphi (Postbuild Batch) sagt "Successfully signed" ... aber nix in den Eigenschaften. :roll:

Ideen?

Danke

philipp.hofmann 2. Jul 2019 09:41

AW: eigenes Zertifikat
 
Ich signiere per Batch-File außerhalb von Delphi während meiner Auslieferung

"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /f C:\Daten\Philipp\Delphi-Projects\PhilippHofmannSectigo256.pfx /p [pwd] /fd sha256 /tr http://timestamp.comodoca.com/?td=sha256 /du https://ictrainer.com /td sha256 /v C:\Daten\Philipp\Delphi-Projects\icTrainer\Win32\Release\icTrainer.exe

Damit funktioniert es.

haentschman 2. Jul 2019 10:15

AW: eigenes Zertifikat
 
Zitat:

Ich signiere per Batch-File außerhalb von Delphi während meiner Auslieferung
...ich auch.
Zitat:

E:\Projects\Projects_Delphi\XXX\Certificate\Tools\ signtool.exe sign /a /v /s "XXX Certificate Store" /n "XXX Signierung" /fd SHA256 {DATEINAME}
...nix anderes als dein Aufruf nur ohne "pfx"
Zitat:

Damit funktioniert es.
...nö. Bei mir grad nicht. :evil: Manchmal ja, manchmal nein. Gerade stehe ich bei NEIN. :evil:

Assarbad 2. Jul 2019 12:23

AW: eigenes Zertifikat
 
Hast du denn mal "signtool verify" benutzt anstatt den Eigenschaftendialog? Da bekommst du deutlich mehr Infos. Selbst sigverify aus der Sysinternals-Reihe von Werkzeugen könnte hier helfen. Auch läßt sich der Signiervorgang mithilfe von "/v" gesprächiger machen, womit sich wiederum auch das eine oder andere Problem finden läßt.

Also was ich bei dir aber absolut nicht verstehe ist, daß du dich auf die automatische Auswahl eines Zertifikats verläßt. Lies mal bitte hier nach was für Stolperfallen es da so geben kann.

Auf die Wichtigkeit eines Zeitstempels wollte ich nochmal verweisen :zwinker:

haentschman 2. Jul 2019 12:35

AW: eigenes Zertifikat
 
Moin...8-)
Zitat:

Hast du denn mal "signtool verify" benutzt anstatt den Eigenschaftendialog?
...immer. Aber was bedeutet "Successfully verified" :stupid: Aber die EXE ist nicht signiert. :roll:
Zitat:

Verifying: E:\Projects\Projects_Delphi\YYY\_out\Development_R untime\YYY.exe

Signing Certificate Chain:
Issued to: XXX Signierung

Issued by: XXX Signierung

Expires: 01.01.2040 00:59:59

SHA1 hash: E62296F40E24A5E02DEA1FFB0CC8A984245C3613


File is not timestamped.
Successfully verified: E:\Projects\Projects_Delphi\YYY\_out\Development_R untime\YYY.exe


Number of files successfully Verified: 1

Number of warnings: 0

Number of errors: 0
Noch mal der Hinweis: Wir reden nicht über ein gekauftes Zertifikat sondern über ein selbst erstelltes und nur in der Firma intern benutztes.

Assarbad 2. Jul 2019 12:43

AW: eigenes Zertifikat
 
Faszinierend. Und du schaust dir auch 100%ig exakt die gleiche Datei an? Das klingt dann doch sehr mysteriös. Welches signtool verwendest du da exakt? Kommt eine seiner Abhängigkeiten (DLLs) vielleicht aus einem anderen Verzeichnis? Und vor allem du verifizierst die gleiche Datei welche du auch signierst?

Mir fiel da das Leerzeichen im Pfad auf ... haste die Argumente sauber in Anführungszeichen übergeben?

haentschman 2. Jul 2019 12:58

AW: eigenes Zertifikat
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Und du schaust dir auch 100%ig exakt die gleiche Datei
Ich habe die Datei "E:\Projects\Projects_Delphi\XXX\_out\Development_ Runtime\XXX.exe" gelöscht und mit dem Build neu erstellt. Der Reiter in den Eigenschaften fehlt. :?
Zitat:

Und vor allem du verifizierst die gleiche Datei welche du auch signierst?
Ja...
Successfully signed: E:\Projects\Projects_Delphi\XXX\_out\Development_R untime\XXX.exe
Verifying: E:\Projects\Projects_Delphi\XXX\_out\Development_R untime\XXX.exe

Zitat:

Kommt eine seiner Abhängigkeiten (DLLs) vielleicht aus einem anderen Verzeichnis?
Nein.
Zitat:

Mir fiel da das Leerzeichen im Pfad auf ... haste die Argumente sauber in Anführungszeichen übergeben?
Das kommt vom Copy/Paste in diesen Beitrag. :wink:
Zitat:

echo off

if not exist E:\Projects\Projects_Delphi\XXX\_out\Development_R untime\XXX.exe exit
if not exist E:\Projects\Projects_Delphi\XXX\_out\app\XXX_Relea se\Win32 md E:\Projects\Projects_Delphi\XXX\_out\app\KTE_Relea se\Win32

E:\Projects\Projects_Delphi\SEAM\Certificate\Tools \signtool.exe sign /v /s "XXX Certificate Store" /n "XXX Signierung" /fd SHA256 "E:\Projects\Projects_Delphi\XXX\_out\Development_ Runtime\XXX.exe"
E:\Projects\Projects_Delphi\XXX\Certificate\Tools\ signtool.exe verify /pa /v "E:\Projects\Projects_Delphi\XXX\_out\Development_ Runtime\XXX.exe"

copy E:\Projects\Projects_Delphi\XXX\_out\Development_R untime\XXX.exe E:\Projects\Projects_Delphi\XXX\_out\app\XXX_Relea se\Win32\XXX.exe
Das einzige was ich nicht einordnen kann:
Zitat:

Done Adding Additional Store
Successfully signed: E:\Projects\Projects_Delphi\XXX\_out\Development_R untime\XXX.exe
Zitat:

Welches signtool verwendest du da exakt
...siehe Bild

Assarbad 2. Jul 2019 14:07

AW: eigenes Zertifikat
 
Hmm, ist mir ein Rätsel. Dann kann ich vermutlich nicht helfen.

haentschman 2. Jul 2019 15:17

AW: eigenes Zertifikat
 
Schade...:wink: Trotzdem Danke.

hoika 2. Jul 2019 15:23

AW: eigenes Zertifikat
 
Hallo,
das steht SHA-1.
Das zeigt Windows glaube ich seit neuestem nicht mehr an.
Teste doch mal SHA-256.

THY4243 2. Jul 2019 22:26

AW: eigenes Zertifikat
 
Gerade nachgesehen, Windows 10 1903 zeigt sowohl SHA1 als auch SHA256 in dem Tab "Digitale Signaturen" an.

Die verwendeten Parameter sind bis auf das "/as" identisch zu meinem Ansatz.:

SignTool.exe sign /a /s MY /n "Cert-name" /fd sha256 /as /v %filetosign%

/as Append this signature. If no primary signature is present, this
signature will be made the primary signature instead.

Vielleicht hilft das.

Noch ein Gedanke, die Eigenschaften der signierten Datei auf einem anderen System zu prüfen (ob der Tab da zu sehen ist).

haentschman 3. Jul 2019 05:44

AW: eigenes Zertifikat
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...8-)
Zitat:

Hallo,
das steht SHA-1.
Das zeigt Windows glaube ich seit neuestem nicht mehr an.
Teste doch mal SHA-256.
Das Zertifikat ist mit SHA1 erstellt. Das ist eine der Optionen. (siehe Bild). Der 2. Part ist die eigentliche Signierung mit SHA256. :wink:
Zitat:

E:\Projects\Projects_Delphi\SEAM\Certificate\Tools \signtool.exe sign /v /s "XXX Certificate Store" /n "XXX Signierung" /fd SHA256 "E:\Projects\Projects_Delphi\XXX\_out\Developm ent_ Runtime\XXX.exe"
Zitat:

/as Append this signature. If no primary signature is present, this
signature will be made the primary signature instead.
...probiere ich mal. :wink:

Nachtrag: Auch /as hat keine Auswirkung. :?

THY4243 3. Jul 2019 14:48

AW: eigenes Zertifikat
 
Manchmal ist es gut zu wissen, was nicht hilft - hier der Parameter "/as".

Als Hinweis, ich trenne SHA1 von SHA256 - arbeite also mit zwei unterschiedlichen Zertifikaten und signiere entsprechend nur im jeweiligen SHA-Level.

Es gibt da eine Antwort in der Diskussion, die m.E. ein Ansatz sein könnte:
Zitat:

Nach dem ich das andere Zertifikat (DIMOWA®) installiert hatte, wurde die EXE (dSRG.exe) richtig erkannt.
Lässt sich denn mit dem DIMOWA Zertifikat immer eine signierte Exe erstellen? Falls ja, scheint die Signierung mittels Signtool und die Batch zu stimmen.
Wenn es dann mit dem anderen Zertifikat nicht klappt, würde ich eher dort ansetzen - so das Zertifikat in Ordnung ist, wovon ich ausgehe.
Dem Tipp von Assarbad mit der Auswahl folgend:
Zitat:

Was darauf hindeutet, daß signtool womöglich ein anderes Zertifikat zum Signieren aussucht, als du dachtest (mit höheren Verbosity-Leveln kannst du schauen was genau signtool da macht). Schließlich hat signtool ganz eigene Regeln welches Zertifikat genommen wird (bspw. mit der längsten Gültigkeit) wenn man nur den Namen benutzt um das Zertifikat zu identifizieren. Stattdessen sollte man eigentlich den Fingerabdruck des Zertifikats benutzen, muß dann aber das entsprechende Skript alle paar Jahre aktualisieren.
Zumindest würde da ein möglicher Fehler bei der Auswahl des Zertifikates wegfallen.

haentschman 24. Jul 2020 11:17

AW: eigenes Zertifikat
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo alle...8-)
ich mache mich mal wieder dran...Tipps sind immer gern gesehen. :P

Neue Infos:
1. Postbuild BAT (oben)
2. rechtes Fenster Kompilat
3. linkes Fenster Kopie des Kompilates
4. Build Ausgabe:
Zitat:

Build started 24.07.2020 12:52:52.
.
.
.

Target PostBuildEvent:
E:\Projects\Projects_Delphi\xxx\Work\Source\_PostB uild\xxx_Release.bat

The following certificate was selected:
Issued to: xxx Signierung

Issued by: xxx Signierung

Expires: Sun Jan 01 01:59:59 2040

SHA1 hash: B072C0649B1F43AB7F14950BFFDC38ED379303D1


Done Adding Additional Store
Successfully signed: E:\Projects\Projects_Delphi\xxx\_out\Development_R untime\xxx.exe


Number of files successfully Signed: 1

Number of warnings: 0

Number of errors: 0



Verifying: E:\Projects\Projects_Delphi\xxx\_out\Development_R untime\xxx.exe


Signature Index: 0 (Primary Signature)
Hash of file (sha256): ADEED8AD4D62E3B4F64638F1660749EB96FA46817589B3C8E2 288CFA50E68569

Signing Certificate Chain:
Issued to: xxx Signierung

Issued by: xxx Signierung

Expires: Sun Jan 01 01:59:59 2040

SHA1 hash: B072C0649B1F43AB7F14950BFFDC38ED379303D1


File is not timestamped.


Successfully verified: E:\Projects\Projects_Delphi\xxx\_out\Development_R untime\xxx.exe


Number of files successfully Verified: 1

Number of warnings: 0

Number of errors: 0

1 Datei(en) kopiert.
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:01:39.24
!!! alle Dateien in den Ordnern entfernt

Fragen:
1. Warum ist die Kopie 3 Minuten älter?
2. Warum hat die Kopie die richtige Signatur?
3. Warum unterscheiden sich die Dateigrößen?


Danke.

generic 24. Jul 2020 11:31

AW: eigenes Zertifikat
 
Diesen Artikel hast du bestimmt schon gefunden oder?
https://stackoverflow.com/questions/...ing-on-windows

himitsu 24. Jul 2020 11:38

AW: eigenes Zertifikat
 
Ich weiß es jetzt nicht, aber um für Virenscanner nicht böse dazustehn, wird man das bestimmt nicht einfach "blind" und ohne Verlinkung hinten an die EXE anhängen.

Also entweder das Zertifikat wird als Ressource eingefügt, was du leicht mit einem Ressource-Editor/Hacker/... nachsehn kannst.
Oder es wird als Section ins PE-Format integriert. IMAGE_SECTION_HEADER ... da gibt es auch ein paar Progrämmchen, welche dir die Sektionen auflisten.

haentschman 24. Jul 2020 12:16

AW: eigenes Zertifikat
 
Danke...siehe meinen vorhergehenden Post. (EDIT) https://www.delphipraxis.net/1470277-post25.html

generic 24. Jul 2020 17:55

AW: eigenes Zertifikat
 
Ihr habt mich inspiriert ein Video zu erstellen - danke dafür.

Code-Signierung - Wie ihr eure Programme und Firma schützen könnt
https://www.youtube.com/watch?v=UhhaNX2zQwY

haentschman 25. Jul 2020 10:50

AW: eigenes Zertifikat
 
Moin...8-)
Zitat:

Warum hat die Kopie die richtige Signatur?
Ich denke inzwischen, daß das Signieren klappt. Aber bei der Dateierstellung irgendetwas schiefläuft. Wenn ich die Datei, mit der Signatur (die Kopie), in irgendeinen Ordner, auch im Netzwerk (mit installiertem Zertifkat), kopiere, wird das mit Zertifikat in den Eigenschaften angezeigt. Im Original nach dem Kompilieren nicht. :gruebel:

Seht ihr an der Batch was Falsches? Irgend ein Cache der das auslöst? :gruebel:

Danke...

haentschman 25. Jul 2020 10:54

AW: eigenes Zertifikat
 
Moin...8-)
Zitat:

Warum hat die Kopie die richtige Signatur?
Ich denke inzwischen, daß das Signieren klappt. Aber bei der Dateierstellung irgendetwas schiefläuft. Wenn ich die Datei, mit der Signatur (die Kopie :gruebel:), in irgendeinen Ordner, auch im Netzwerk (mit installiertem Zertifkat), kopiere, wird das mit Zertifikat in den Eigenschaften angezeigt. Im Original nach dem Kompilieren nicht. :gruebel:

Seht ihr an der Batch was Falsches? Irgend ein Cache der das auslöst? :gruebel:

Code:
echo off

if not exist E:\Projects\Projects_Delphi\xxx\_out\Development_Runtime\xxx.exe exit
if not exist E:\Projects\Projects_Delphi\xxx\_out\app\KTE_Release\Win32 md E:\Projects\Projects_Delphi\xxx\_out\app\xxx_Release\Win32

E:\Projects\Projects_Delphi\xxx\Certificate\Tools\signtool.exe sign /v /s "xxx Certificate Store" /n "xxx Signierung" /fd SHA256 "E:\Projects\Projects_Delphi\xxx\_out\Development_Runtime\xxx.exe"
E:\Projects\Projects_Delphi\xxx\Certificate\Tools\signtool.exe verify /pa /v "E:\Projects\Projects_Delphi\xxx\_out\Development_Runtime\xxx.exe"

copy E:\Projects\Projects_Delphi\xxx\_out\Development_Runtime\xxx.exe E:\Projects\Projects_Delphi\xxx\_out\app\KTE_Release\Win32\xxx.exe
PS: xxx_Release\Win32\xxx.exe hat das richtige Zertifikat, _out\Development_Runtime\xxx.exe nicht
...das ist die Frage. :roll:

Danke...

himitsu 25. Jul 2020 11:31

AW: eigenes Zertifikat
 
Nee, sieht OK aus.

Wenn die KTE_Release das hat, dann muss die Development_Runtime das natürlich auch haben, dazumal in der ja die Signatur hinzugefügt wurde.

Und egal ob das Zertifikat installiert ist oder nicht, angezeigt muß es dennoch werden, da es ja in der EXE drin stekt.
Das "Installiert" im Zertifikatsspeicher entscheidet nur darüber wie es angezeigt wird, also ob es verifiziert werden kann oder nicht.


Ich denke hier eher daran, dass z.B. der Explorer noch den alten Inhalt anzeigt und nicht aktualisiert wurde.
Ich hab das öfters mal mit der Dateigröße oder dem Änderungsdatum ... da hilft dann nichtmal ein F5 oder Explorer zu+auf ... aber mal kurz den Dateieigenschaftendialog auf und schon stimmte es auch in der Liste wieder, das kappte bisher eigentlich immer. :gruebel:


Aber du weißt doch bestimmt selbst, dass eine Fehlerhandlung nie schaden kann. :zwinker:
Code:
@echo off

:: ExitCode: 0 = OK / 1 = Failure / 2 = Warning

set file=xxx
set outdir=E:\Projects\Projects_Delphi\%file%\_out
set signtool="E:\Projects\Projects_Delphi\%file%\Certificate\Tools\signtool.exe"

if not exist "%outdir%\Development_Runtime\%file%.exe" exit /b 1
if not exist "%outdir%\app\KTE_Release\Win32" (
  md "%outdir%\app\%file%_Release\Win32"
  if errorlevel 1 exit /b 1
)

%signtool% sign /v /s "%file% Certificate Store" /n "%file% Signierung" /fd SHA256 "%outdir%\Development_Runtime\%file%.exe"
if errorlevel 1 exit /b %errorlevel%

%signtool% verify /pa /v "%outdir%\Development_Runtime\%file%.exe"
if errorlevel 1 exit /b %errorlevel%

copy "%outdir%\Development_Runtime\%file%.exe" "%outdir%\app\KTE_Release\Win32\%file%.exe"
if errorlevel 1 exit /b 1
@ : damit auch das echo off nicht angezeigt wird, weil ist ja erst danach aus ;)
set : damit das Ganze bissl übersichtlicher wird
exit 123 und errorlevel : damit man außerhalb auch eine Fehlerprüfung vornehmen kann, z.B. im FinalBuilder/BuildServer/BuildScript oder Dergleichen das Ergebnis auswerten
exit /b statt exit : damit nur dieses Script abgebrochen und nicht gleich ALLEs (das aufrufende Script)

Statt BEFEHL mit anschließendem IF ginge z.B. auch
Delphi-Quellcode:
COPY source dest || exit 1
, also wenn beim Ersten der ErrorLevel > 0, dann das Zweite ausführen.
https://ss64.com/nt/syntax-conditional.html

Code:
deine.cmd
if errorlevel 1 echo Fehler %errorlevel% & pause

haentschman 25. Jul 2020 13:37

AW: eigenes Zertifikat
 
Danke...:P

Morgen habe ich Zeit mich damit zu beschäftigen. :wink:

himitsu 25. Jul 2020 15:12

AW: eigenes Zertifikat
 
Na dann viel Spaß.

PS: noch was bezüglich dem @
Alles unsichtbar, abgesehn von den 3 großen Aufgaben, so als Status-/Fortschtittsanzeige,
alternativ geht aber auch ECHO oder TITLE.

Und :: ist ein unsichtbarer Kommentar, ähnlich einem @REM, wobei das Unsichtbar mir da nie so wichtig ist ... es ist im Code einfach übersichtlich/auffällig und kein REM-Wort stört den Text)

Code:
:: ExitCode: 0 = OK / 1 = Failure / 2 = Warning

@set file=xxx
@set outdir=E:\Projects\Projects_Delphi\%file%\_out
@set signtool="E:\Projects\Projects_Delphi\%file%\Certificate\Tools\signtool.exe"

@if not exist "%outdir%\Development_Runtime\%file%.exe" exit /b 1
@if not exist "%outdir%\app\KTE_Release\Win32" (
  md "%outdir%\app\%file%_Release\Win32"
  if errorlevel 1 exit /b 1
)

%signtool% sign /v /s "%file% Certificate Store" /n "%file% Signierung" /fd SHA256 "%outdir%\Development_Runtime\%file%.exe"
@if errorlevel 1 exit /b %errorlevel%

%signtool% verify /pa /v "%outdir%\Development_Runtime\%file%.exe"
@if errorlevel 1 exit /b %errorlevel%

copy "%outdir%\Development_Runtime\%file%.exe" "%outdir%\app\KTE_Release\Win32\%file%.exe"
@if errorlevel 1 exit /b 1

haentschman 26. Jul 2020 09:45

AW: eigenes Zertifikat
 
Moin...:P
Zitat:

Na dann viel Spaß.
...der ironische Unterton ist mir nicht entgangen. :zwinker:

haentschman 27. Jul 2020 07:32

AW: eigenes Zertifikat
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...:P

Neuigkeiten:
1. Wenn ich die BAT nach dem kopilieren manuell ausführe, ist alles so wie es sein soll. Alle Dateien haben das Zertifikat. :gruebel:
2. Wenn ich die BAT als Postbuild Event ausführen lasse, habe ich die Konstellation wie im Eingangspost. :shock:
...es sieht danach aus, daß die IDE nach dem PostBuild Event die Datei nochmal überschreibt. :roll: Das paßt zu "die Kopie hat das Zertifikat, das original nicht". :roll:
...oder das PostBuild Event ist eigentlich ein PreBuild Event. :evil:

Jetzt fällt mir nichts mehr ein...:(

himitsu 27. Jul 2020 08:56

AW: eigenes Zertifikat
 
Das PostBuild ist ja gerade für sowas da.

Nett ist, dass ich demächts auch sowas machen wollte,
also das blöde Eurekalog aus Delphi rauswerfen, weil es beim Debuggen absolut nervt.
Und dann im PostBuild manuell Eurekalog-Infos nur "anhängen" und wenn ich schon dabei bin auch endlich mal die schon lange überfällige Signierung hinzufügen.

Wenn man Eurekalog das selbst machen lässt, dann pfuscht der an den DCC-Setings rum und macht die Delphi-Debuginfos kaputt (denkt wohl seine Debuginfos sind besser und man braucht die Anderen nicht, was der Debugger aber anders sieht)
und dann natürlich ÜBERALL die schwachsinnigsten Hooks, in denen ich ständig lande und nicht mehr raus finde.



Da wirst wohl mal mit SysInternals nachsehn müssen, ob die Datei wirklich anschließend nochmal verändert wird, bzw. wer das macht, was ja eigentlich nicht passieren sollte.
Oder ganz böse: im PostBuild eine EXE starten, welche die Datei öffnet (Sharing: ohne Schreibrechte für Andere) und geöffnet lässt und dann schauen wo Delphi knallt.

Hängt vielleicht noch ein Addon im Delphi?
Via OpenToolsAPI im PostBuild ... k.A. in welcher Reihenfolge die ausgeführt werden.




PS: Im PreBuild hättest du ja noch die alte EXE (oder noch Keine), weil ist ja davor.

Ins PreBuild war ich schon drauf und dran irgendwann mal eine Prüfung einzubauen:
Läuft EXE noch, dann benenden. (vergesse ich manchmal, wenn ich die ohne Debugger starte, bzw. wenn sie beim Beenden im Hintergrund noch hängt)

haentschman 27. Jul 2020 08:59

AW: eigenes Zertifikat
 
Hallöle...:P
Zitat:

SysInternals
...auf die einfachen Sachen kommt man nicht. :oops:

Zitat:

Hängt vielleicht noch ein Addon im Delphi?
Die üblichen Verdächtigen...MadExcept, CnPack

Info:
Nach Deaktivieren des MadExcept ist die EXE mit dem Zertifikat versehen. :shock: Das kann man beliebig oft wiederholen. Wahrscheinlich wird die EXE nach dem PostBuild vom MadExcept noch/erst gepatcht.
Eine Mail an Matthias ist raus... Schaun wir, was er sagt. :wink:

himitsu 27. Jul 2020 10:50

AW: eigenes Zertifikat
 
Aber dann sollte doch dennoch das Zertifikat drin sein, weil wenn, dann darf/kann MadExcept die bestehende Datei doch nur ändern/erweitern,
auch wenn das Zertifikat dann vielleicht "ungültig" ist, weil die Datei verändert wurde.

Stimmt, also das gleiche Problem, was ich mit Eurekalog oft hab,
dort wird ja auch anschließend noch aus der MAP-Datei eine detailiertere Debuginfo erstellt und in die EXE eingefügt.

himitsu 27. Jul 2020 12:18

AW: eigenes Zertifikat
 
Zitat:

Wahrscheinlich wird die EXE nach dem PostBuild vom MadExcept noch/erst gepatcht.
Drum will ich ja den ECC anschließend manuell aufrufen, also im PostBuild.
Und das Designtime-Package von denen aus'm Delphi rauswerfen.

Denn aktuell kann ich mit FinalBuilder kompilierte Dateien nicht richtig debuggen
und muß einige/alle nochmals im Delphi kompilieren, weil sich diese Dateien unterscheiden (Dateigröße und eben dass der Debugger keine Haltepunkte mehr findet)
Scheinbar arbeiten die Wenigsten mit Eurekalog und exzessiv mit Packages oder es benutzt wirklich fast niemand den Debugger ... k.A. warum sonst so Wenige damit Probleme haben.

Im Delphi hängt sich Erekalog rein und macht sein Ding beim Kompilieren.
Und im FinalBuilder ruft der FB den ECC statt dem DCC auf.
Der ECC pfuscht dann noch bissl an den Compiler-Settings rum, startet den DCC und modifiziert anschließend die EXE.

Das will ich gern auf MSBUILD umstellen, welches statt der DPR direkt die DPROJ mit den "selben" Optionen und inkl. PostBuild ausführt, so dass "hoffentlich" im Delphi und FB die selben Dateien entstehen.
Wenn erst DCC ausgeführt wird und der ECC nur noch seine DebugInfos "anhängt", ohne die EXE und Compileroptionen zu verpfuschen.

MSBUILD xyz.dproj
* DCCxxx
* PostBuild
** PE-Flags ändern/prüfen (wegen Netzlaufwerken)
** ECC, WasEigenes oder MadExcept
** SignTool

Weil aktuell nutzt der FB seine eigenen Projekoptionen und Delphi nutzt die aus der DPROJ ... alles Doppelt, auch wenn bei den wichtigsten Projekten die Optionen "eigentlich" gleich sind, kommt dennoch was ganz Unterschiedliches bei raus.


Wobei ich den Eurekalog eher mal gern rauswerfen werde/würde, da wir effektiv eh nur den Stacktrace und Fehlerdialog benutzen und die Masse der meisten Hooks eher nervt, als hilft.
Und dann mach ich das selbst.
* VCL-Fehlerdialog ersetzen (unten den Stack mit anhängen)
* an Exception meine eigenen zwei/drei StackTrace-Frunktionen registrieren Delphi-Referenz durchsuchenException.StackTrace
** StackStrace erstellen mit der WinAPI MSDN-Library durchsuchenStackWalk
** die Delphi-DebugInfos in Windows-DebugInfos übersetzen (map2dbg.exe oder tds2pdb.exe)
** am schönsten wäre es, wenn ich noch rausbekomm, wie ich die PDB von der Einzeldatei in die EXE verschiebe ... sind beides PE-Dateien und die Debuginfo hängt als Section drin


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz