Signatur
Beschreibung
gnupg_addsignkey() registriert einen Schlüssel (identifiziert durch seinen Fingerabdruck) als Signierschlüssel für die aktuelle GnuPG-Ressource. Anschließend können mit gnupg_sign() Daten mit diesem Schlüssel signiert werden.
Ist der private Schlüssel mit einer Passphrase geschützt, muss diese als drittes Argument übergeben werden. Es können mehrere Signierschlüssel hinzugefügt werden, indem die Funktion mehrfach aufgerufen wird – in diesem Fall werden Daten von allen registrierten Schlüsseln signiert.
Soll die Schlüsselliste für Signierschlüssel geleert werden, kann gnupg_clearsignkeys() verwendet werden. Der Fingerabdruck muss vollständig und exakt angegeben werden, wie er im GnuPG-Schlüsselbund vorhanden ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $identifier Pflicht | resource | Eine GnuPG-Ressource, die mit gnupg_init() erzeugt wurde. |
|
| $fingerprint Pflicht | string | Der vollständige hexadezimale Fingerabdruck des privaten Schlüssels, der zum Signieren verwendet werden soll. | |
| $passphrase | string | Die Passphrase des privaten Schlüssels. Wenn der Schlüssel nicht mit einer Passphrase geschützt ist, kann dieser Parameter leer gelassen oder weggelassen werden. |
Rückgabewert
true zurück, wenn der Schlüssel erfolgreich hinzugefügt wurde, andernfalls false (z. B. wenn der Fingerabdruck nicht im Schlüsselbund gefunden wird oder die Passphrase falsch ist).Beispiele
Einfaches Signieren einer Nachricht
<?php
// GnuPG-Ressource initialisieren
$gpg = gnupg_init();
// Fingerabdruck des eigenen privaten Schlüssels
$fingerprint = 'ABCD1234ABCD1234ABCD1234ABCD1234ABCD1234';
// Signierschlüssel mit Passphrase hinzufügen
if (!gnupg_addsignkey($gpg, $fingerprint, 'meine_geheime_passphrase')) {
die('Fehler beim Hinzufügen des Signierschlüssels.');
}
// Signierungsmodus auf ARMOR (ASCII) setzen
gnupg_setsignmode($gpg, GNUPG_SIG_MODE_CLEAR);
// Nachricht signieren
$nachricht = 'Hallo, dies ist eine signierte Nachricht.';
$signiert = gnupg_sign($gpg, $nachricht);
if ($signiert === false) {
die('Signierung fehlgeschlagen.');
}
echo $signiert;
Mehrere Signierschlüssel verwenden
<?php
$gpg = gnupg_init();
$fingerprint1 = 'ABCD1234ABCD1234ABCD1234ABCD1234ABCD1234';
$fingerprint2 = 'EFGH5678EFGH5678EFGH5678EFGH5678EFGH5678';
// Ersten Signierschlüssel hinzufügen
gnupg_addsignkey($gpg, $fingerprint1, 'passphrase1');
// Zweiten Signierschlüssel hinzufügen (Daten werden von beiden signiert)
gnupg_addsignkey($gpg, $fingerprint2, 'passphrase2');
gnupg_setsignmode($gpg, GNUPG_SIG_MODE_DETACH);
$daten = 'Zu signierende Daten';
$signatur = gnupg_sign($gpg, $daten);
if ($signatur !== false) {
echo 'Daten erfolgreich mit zwei Schlüsseln signiert.';
} else {
echo 'Fehler bei der Signierung.';
}
// Wichtig · Fallstricke
Sicherheitshinweis: Passwörter sollten niemals im Quellcode hartcodiert werden. Verwende stattdessen Umgebungsvariablen oder sichere Konfigurationsdateien außerhalb des Webroot-Verzeichnisses, um Passphrasen zu speichern.
Der private Schlüssel muss im GnuPG-Schlüsselbund des ausführenden Systembenutzers (oft des Webserver-Benutzers) vorhanden sein. Fehlt der Schlüssel im Schlüsselbund, schlägt die Funktion mit false fehl. Mit gnupg_geterror() kann die genaue Fehlermeldung abgerufen werden.
Beachte, dass beim Einsatz des prozeduralen Stils die GnuPG-Ressource als erstes Argument übergeben wird, während in der objektorientierten Variante (gnupg-Klasse) die Methode addsignkey() direkt auf dem Objekt aufgerufen wird.