ugrás a tartalomhoz

GnuPG + PHP

blabla · 2011. Nov. 17. (Cs), 16.46
Sziasztok

PHP-ban szeretnék egy aláírást készíteni, azt beletenni egy xml fileba (azaz valamelyik elementbe) és ezt elküldeni egy webcímre. Az aláírás készítés azonban a PHP GnuPG extensionnel sehogysem sikerül. Azaz az aláírás elkészül, de nem jó.

Tesztként van egy perl script is, ami szintén futás közben állítja elô az aláírást a GnuPG modul sign parancsával:
$gpg->sign(armor => 1,plaintext => "/tmp/".$$.".txt",output =>"/tmp".$$.".out",passphrase=>$gpgpass,'detach-sign'=>1,);
Ez a perl szépen lefut és az aláírás hiteles, mert a távoli szerver fogadja.

A php-ban készült aláírást viszont elutasítja a távoli gép. Azért gondolom, hogy a php-ben az aláíráskészítéssel van a gond, mert ha a perl script által készített aláírást teszem be az xml-be és azt küldöm el a php-ból, akkor minden ok.

A kulcskészítés a php scriptben:

  $res = gnupg_init();
  $info = gnupg_keyinfo($res, '######');
  $fingerprint =  $info[0]['subkeys'][0]['fingerprint'];
  print_r($info);

  gnupg_addsignkey($res,$fingerprint);
  gnupg_setarmor($res,1);
  gnupg_setsignmode($res,GNUPG_SIG_MODE_DETACH);
  $signed = gnupg_sign($res,$xmldata);

  $xmltotal = str_replace("<SIGNATURE>","<SIGNATURE>$signed",$xmldata);
Olyan érzésem van, mintha nem azt a kulcsot használná az aláíráskészítéshez amit kellene. Az addsignkey függvény vajon a publikus vagy a titkos kulcsot használja az aláírás készítéséhez?
Mi lehet a hiba?

Köszönöm
 
1

CLI

janoszen · 2011. Nov. 17. (Cs), 17.53
Ha jót akarsz magadnak, akkor exec-el hajtsd végre az aláírást és hagyd ki belőle a GnuPG extensiont, ugyanis az is csak pontosan ennyit fog csinálni, de legalább tudod parancssorból debuggolni.

Azt tudni kell, ha ezt webszerver alól futtatod, akkor a webszerver usernevével fog futni (www-data, apache, stb) és annak home könyvtárában keresi az aláíró kulcsot. Ha a Perl programot nem az adott userrel futtatod, akkor ez lehet a különbség a kettő között.

Egyébként tudom, milyen API-ra írsz klienst, én is írtam rá, a nevét ne említsd meg itt, mert a cégednek / munkáltatódnak titoktartási kötelezettsége van rá.
2

Jó lenne az exec csak

blabla · 2011. Nov. 17. (Cs), 18.02
Az exec le van tiltva a disabled_function-nél a php-iniben...
És nem is lenne célszerû visszakapcsolni, mert tárhelyszerverrôl van szó.

Mindkét script azonos user alól fut.
3

Tárhely?

janoszen · 2011. Nov. 18. (P), 09.10
Ez számomra kicsit WTF, ilyesmit az ember jobbára már minimum virtgépen csinál, főleg hogy az aláíró kulcs érzékeny adat, amit nem mernék egy osztott tárhelyre bízni.
4

Tudatlanságom okozta a gondot

blabla · 2011. Nov. 18. (P), 13.21
Fogalmam sem volt róla, hogy az aláírás készítéséhez fontos a tartalom. Azt hittem, ha van egy aláírásom akkor azt bármihez használhatom. Hát nem. A probléma ott volt, hogy a perl script és a php script más-más tartalomhoz készítette el az aláírást. És a php nem a megfelelôhöz és ezért nem volt elfogadva.
5

Másolható

janoszen · 2011. Nov. 18. (P), 16.00
Nézz utána a két kulcsos titkosításnak. Ha az aláírásod független lenne a tartalomtól, akkor gyakorlatilag csak egy jelszó lenne.