OpenSSL CA a podepisování souborů

martin

OpenSSL CA a podepisování souborů
« kdy: 10. 11. 2013, 00:42:06 »
Zdravim,
potrebuju pro nekolik uzivatelu s "centralnim overenim" podepisovani souboru. Ne sifrovani, jen podepisovani.
Nejvehnodnejsi se mi zda vyuziti OpenSSL.

Vytvoreni CA:
Kód: [Vybrat]
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

Vytvoreni klienta (misto set_serial urcite pouzit slozitejsi postup):
Kód: [Vybrat]
openssl genrsa -out user1.key 2048
openssl req -new -key user1.key -out user1.csr

openssl x509 -req -days 365 -in user1.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out user1.crt
Na tom asi neni co resit.

A ted k samotnemu podepisovani.
Podepsani souboru:
Kód: [Vybrat]
openssl dgst -sha512 -sign user1.key -out soubor.txt.sig soubor.txtvyleze mi binarni soubor s podpisem.

Overeni:
Kód: [Vybrat]
openssl x509 -in user1.crt -pubkey -noout > user1.pub
openssl dgst -sha512 -verify user1.pub -signature soubor.txt.sig soubor.txt
Zde musim nejdriv z certifikatu vyextrahovat verejny klic? Proc?
Neni certifikat sam o sobe jen verejnym klicem? Prece muzu klic z certifiaktu vyextrahovat bez vlastnictvi soukromeho klice.

Pouzivam dobry postup? Da se nejak vylepsit, zjednodusit, nebo jeste vice zabezpecit?

Rad bych misto binarniho souboru s podpisem mel textovy ASCII soubor. Nasel jsem nejake navody, ve kterych se po podpisu prevedl binarni podpis do base64 a pred overenim base64 na binarni. Vetsinou pomoci roury a 2 spusteni openssl. Zda se mi to moc komplikovane. A teoreticky pri ohromnem poctu overeni podpisu za sekundu narocne na vykon.

Jaky postup pouzivate vy?

Je lepsi pouzit PGP/GnuPG? Me se zdaji univerzalnejsi (rozsirenost, podpora klientu na vsech OS) X509 certifiakty pomoci OpenSSL.
« Poslední změna: 11. 11. 2013, 10:02:58 od Petr Krčmář »


Re:OpenSSL CA a podepisovani souboru
« Odpověď #1 kdy: 10. 11. 2013, 11:41:53 »
Certifikát není jen veřejný klíč, je to veřejný klíč + informace o vlastníkovi + to celé podepsané certifikační autoritou. Nevím, zda v openssl neexistuje nějaká zkratka pro použití veřejného klíče z certifikátu při ověřování. Každopádně to dgst je nízkoúrovňová operace, a moc se nepočítá s tím, že ji budou uživatelé používat přímo -- proto asi nebude mít podporu pro nějaké zkratky. Navíc by použití certifikátu bylo trochu matoucí, protože příkaz dgst pouze ověří, že podpis byl vytvořen privátním klíčem příslušným k zadanému veřejnému klíči. Ale neověřuje, že certifikát byl vydán důvěryhodnou CA, že nebyl odvolán ani nic dalšího.

Pro samotné podepsání souboru by asi bylo jednodušší na použití PGP -- pokud vím, tam se operace "podpis souboru" používá a existují pro to postupy. Při použití X509 (OpenSSL) samozřejmě můžete využít pro podpis souboru nízkoúrovňové operace, jak jste to udělal, ale pak si sám musíte nadefinovat, jak se vážou data podpisu k původnímu souboru, v jakém formátu jsou uložená atd.

Ve světě X509 se místo samotného podpisu souboru používá vytvoření kontejneru, který může obsahovat víc objektů (i soubory), následně se podepíše celý kontejner a k tomu se mohou připojit další objekty (např. certifikát příslušný k privátnímu klíči, kterým to celé bylo podepsáno). To popisují standardy PKCS#7, S/MIME a CMS. OpenSSL tyhle standardy podporuje, je ale zaměřené na e-maily, kde se to nejčastěji používá. Můžete ale vyzkoušet, jak se to bude chovat, když mu místo e-mailu podstrčíte váš podepisovaný soubor.
« Poslední změna: 11. 11. 2013, 10:03:25 od Petr Krčmář »

martin

Re:OpenSSL CA a podepisovani souboru
« Odpověď #2 kdy: 10. 11. 2013, 22:50:46 »
Pro samotné podepsání souboru by asi bylo jednodušší na použití PGP -- pokud vím, tam se operace "podpis souboru" používá a existují pro to postupy.

Jak ale u PGP zajistim funkcionalitu "vydani certifikatu certifikacni autoritou"?
Mam si udelat jeden PGP klic, ktery bude slouzit jako CA a kazdemu overenemu uzivateli podepsat jaho klic klicem CA? A pak kontrolovat pri overeni podpisu souboru take jestli je uzivatel podepsan klicem moji CA?

Re:OpenSSL CA a podepisovani souboru
« Odpověď #3 kdy: 11. 11. 2013, 07:08:35 »
Ještě jednodušeji. Každý uživatel si vytvoří svou dvojici klíčů, a vy budete jen udržovat jednu autoritativní klíčenku, na které bude jen seznam důvěryhodných klíčů uživatelů. Při podpisu pak budete ověřovat, zda je klíč podepsán jedním z klíčů v té klíčence. Je to podobné, jako byste u X.509 certifikátů neověřoval CA, ale měl byste přímo seznam důvěryhodných koncových certifikátů.

Re:OpenSSL CA a podepisovani souboru
« Odpověď #4 kdy: 11. 11. 2013, 08:07:04 »
Pouzivam dobry postup? Da se nejak vylepsit, zjednodusit, nebo jeste vice zabezpecit?
Především ten tvůj postup není zabezpečený vůbec :) Ověřuješ sice že adný soubor byl korektně podepsán daným klíčem, ale neověřuješ, že daný klíč je skutečně platným klíčem toho subjektu, jehož klíčem se tvrdí že je. Problém je v tom, že při extrakci klíče z certifikátu se (afaik!) platnost certifikátu neověřuje. Čili když si vytvořím self-signed certifikát, tak ho tímhle postupem ochotně přijmeš.

Správně bys měl prvně ověřit platnost certifikátu:
1. ověřit, že je podepsaný důvěryhodnou autoritou
2. stáhnou CRL dané autority a ověřit, že na něm certifikát není

Teprve potom můžeš ověřovat samotný podpis.

Takže s náročností extrakce klíče z certifikátu si vůbec nemusíš lámat hlavu, protože oproti tomu, co ti tam chybí (stáhnout z webu CRL, ověřit), je to brnkačka. Jinak to jednodušší řešení, na které se ptáš, bude asi http://www.openssl.org/docs/apps/rsautl.html - bude tě zajímat parametr "-certin".


Re:OpenSSL CA a podepisovani souboru
« Odpověď #5 kdy: 11. 11. 2013, 08:18:57 »
Ověřuješ sice že adný soubor byl korektně podepsán daným klíčem, ale neověřuješ, že daný klíč je skutečně platným klíčem toho subjektu, jehož klíčem se tvrdí že je. Problém je v tom, že při extrakci klíče z certifikátu se (afaik!) platnost certifikátu neověřuje. Čili když si vytvořím self-signed certifikát, tak ho tímhle postupem ochotně přijmeš.
Podle původního popisu to vypadalo, že bude mít někde seznam důvěryhodných certifikátů, a proti nim bude ten podpis ověřovat. Tedy  že o certifikátu user1.crt ví, že je to certifikát důvěryhodného uživatele. Pak je vlastně CA v tom procesu zbytečná a je to stejný způsob použití, jako s PGP. Pokud by soubor user1.crt dodával uživatel, pak je samozřejmě nutné ten certifikát ověřit.

Re:OpenSSL CA a podepisovani souboru
« Odpověď #6 kdy: 11. 11. 2013, 08:48:15 »
Pak je vlastně CA v tom procesu zbytečná
Přesně tak. Pokud by to bylo takhle, nemusí se s certifikáty vůbec zalamovat a může rovnou používat jenom klíče.