[Gelöst] Authenticode unter Linux und Windows

Für Fragen rund um die Ide und zum Debugger
Antworten
Ich934
Lazarusforum e. V.
Beiträge: 124
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

[Gelöst] Authenticode unter Linux und Windows

Beitrag von Ich934 »

Hallo zusammen,

ich programmiere teilweise unter Linux und Windows abwechselnt. Die Windowsanwendungen signiere ich mit einem CodeSigning-Zertifikat (Authenticode), was grundsätzlich kein Problem ist.

Das bisher immer händisch vorgenommene Signieren möchte ich jetzt automatisieren. Grundsätzlich kein Problem, hierfür eine Batch- bzw. Shell-Datei zu erstellen. Diese kann ich ja als Compiler-Kommando nach dem kompilieren aufrufen.

Das Problem ist jetzt das Betriebssystem. Kann ich das irgendwie abfragen und dann entweder die Batch oder die Shell-Datei ausführen?

Schöne Grüße
Zuletzt geändert von Ich934 am Sa 29. Feb 2020, 19:27, insgesamt 1-mal geändert.
Tipp für PostgreSQL: www.pg-forum.de

Ich934
Lazarusforum e. V.
Beiträge: 124
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Authenticode unter Linux und Windows

Beitrag von Ich934 »

Hm, scheinbar bin ich der einzige der dieses Problem hat... Naja ich habe eine Lösung...

1. ich installiere das Package CodeSigningHelper
2. Problem unter Windows gelöst
3. unter Linux verwende ich ein Bash Script, welches das Ganze umschreibt

Linux braucht eine Sonderbehandlung. Das Microsoft Tool codesign.exe läuft dort nicht (auch nicht mit wine). Es gibt aber mit osslsigncode eine Alternative. Problem ist jedoch, dass ich hier andere Parameter habe. Ich löse das Problem mit einem kleinen Bash-Script, welches ich einfach "codesign" nenne. Dieses übersetzt die Parameter von codesign.exe in die Parameter von ossisgncode. Das Passwort für das Zertifikat habe ich in einer Datei abgelegt und lese ich von dieser ein (wichtig: es muss der komplette Pfad angegeben werden, ~ geht nicht!). Weiterhin muss das Zertifikat vom .pfx-Format in das .p12-Format umgewandelt werden.

Code: Alles auswählen

#!/bin/bash
 
### Dokumentation signtool.exe
#   https://docs.microsoft.com/de-de/dotnet ... gntool-exe
 
para=""
password="-readpass /pfad/zur/passwort.datei"
 
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"
 
case $key in
  sign)
  para+="sign "$password
  shift
  ;;
 
  /ac)
  shift
  shift
  ;;
 
  /as)
  para+=" -nest"
  shift
  shift
  ;;
 
  /nph)
  shift
  ;;
 
  /ph)
  ### erzeugt Absturz
  #para+=" -ph"
  shirt
  ;;
 
  /v)
  para+=" -verbose"
  shift
  ;;
 
  /f)
  para+=" -pkcs12 "$2
  shift
  shift
  ;;
 
  sha256)
  para+=" -h sha256"
  shift
  ;;
 
  /fd)
  para+=" -h "$2
  shift
  shift
  ;;
 
  /tr)
  para+=" -ts "$2
  shift
  shift
  ;;
 
  /d)
  para+=" -n \""$2"\""
  shift
  shift
  ;;
 
  *)
  para+=" -in "$1" -out "$1".signed.exe"
  prog=$1
  shift
  ;;
esac
done
 
#echo $para
/usr/bin/osslsigncode $para
 
if [ $? -eq 0 ];
then
   mv $prog".signed.exe" $prog
else
   exit 1
fi
exit 0


Unter Linux schauen meine Einstellungen dann wie folgt aus:
Bild

Der Vorteil für mich ist jetzt, dass ich auf allen Systemen den gleichen Workflow und das gleiche Verhalten habe. Problem ist für mich gelöst.

cu tb

Bearbeitet:
2020-03-02 22:22: Skript aktualisiert
Tipp für PostgreSQL: www.pg-forum.de

Antworten