Signatur
Beschreibung
gnupg_setsignmode() legt fest, in welchem Format GnuPG eine Signatur erzeugt. Je nach Anwendungsfall kann eine eingebettete (normal), eine losgelöste (detached) oder eine Klartext-Signatur (clear-text) gewünscht sein. Der gewählte Modus gilt für alle nachfolgenden Signieroperationen auf dem übergebenen Ressource-Handle.
Die verfügbaren Modi werden über vordefinierte Konstanten angegeben: GNUPG_SIG_MODE_NORMAL erzeugt eine komprimierte Binärsignatur, bei der die Nutzdaten eingebettet sind; GNUPG_SIG_MODE_DETACH trennt Signatur und Daten, was besonders für E-Mails oder Paketdistributions-Szenarien empfehlenswert ist; GNUPG_SIG_MODE_CLEAR erzeugt eine lesbare ASCII-Signatur, bei der der Originaltext unverändert sichtbar bleibt.
Die Funktion muss nach dem Erstellen des GnuPG-Handles mit gnupg_init() und nach dem Hinzufügen eines Signierschlüssels via gnupg_addsignkey() aufgerufen werden. Der Modus kann jederzeit vor einem neuen gnupg_sign()-Aufruf geändert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $identifier Pflicht | resource | Das GnuPG-Ressource-Handle, das zuvor mit gnupg_init() erzeugt wurde. |
|
| $signmode Pflicht | int | Der gewünschte Signierungs-Modus. Gültige Werte sind:
|
Rückgabewert
true zurück, wenn der Modus erfolgreich gesetzt wurde, andernfalls false (z. B. bei einem ungültigen Wert für signmode).Beispiele
Detached-Signatur einer Nachricht erzeugen
<?php
// GnuPG-Handle initialisieren
$gpg = gnupg_init();
// Signierschlüssel hinzufügen (Fingerprint + optionale Passphrase)
$fingerprint = 'ABCDEF1234567890ABCDEF1234567890ABCDEF12';
gnupg_addsignkey($gpg, $fingerprint, 'geheime-passphrase');
// Losgelösten Signier-Modus setzen
if (!gnupg_setsignmode($gpg, GNUPG_SIG_MODE_DETACH)) {
die('Signier-Modus konnte nicht gesetzt werden.');
}
$nachricht = 'Dies ist eine wichtige Nachricht.';
$signatur = gnupg_sign($gpg, $nachricht);
if ($signatur === false) {
die('Signierung fehlgeschlagen: ' . gnupg_geterror($gpg));
}
echo "Detached-Signatur (Base64-Ausschnitt):\n";
echo substr(base64_encode($signatur), 0, 60) . "...\n";
Klartext-Signatur für eine E-Mail erstellen
<?php
$gpg = gnupg_init();
$fingerprint = 'ABCDEF1234567890ABCDEF1234567890ABCDEF12';
gnupg_addsignkey($gpg, $fingerprint);
// Klartext-Modus: Originaltext bleibt lesbar
gnupg_setsignmode($gpg, GNUPG_SIG_MODE_CLEAR);
$text = 'Vertragsangebot vom 2024-06-01';
$signierterText = gnupg_sign($gpg, $text);
if ($signierterText !== false) {
echo $signierterText;
} else {
echo 'Fehler: ' . gnupg_geterror($gpg);
}
// Wichtig · Fallstricke
Sicherheitshinweis: Verwende GNUPG_SIG_MODE_DETACH bevorzugt, wenn Signaturen unabhängig von den Daten verifiziert werden müssen (z. B. bei Software-Releases). GNUPG_SIG_MODE_CLEAR ist praktisch für E-Mails, jedoch anfälliger für Manipulationen an Zeilenenden (CRLF/LF-Problematik), die die Verifikation fehlschlagen lassen können.
Die GnuPG-Erweiterung muss explizit kompiliert oder als PECL-Paket installiert sein (pecl install gnupg). Stelle sicher, dass der GnuPG-Schlüsselbund für den PHP-Prozess zugänglich ist (Dateisystemberechtigungen, GNUPGHOME-Umgebungsvariable).