Newsgroup: it.comp.lang.delphi
Titolo: problemi seri con librerie crittografiche!

Salve a tutti, spero di trovare da voi un valido aiuto ai miei
problemi.
Sto facendo un programma in delphi sulla firma digitale usando la
libreria crittografica cryptlib di peter gutman (cl32.dll). Ora, avrei
bisogno di un consiglio su come fare a visualizzare i certificati
X.509 di una busta pkcs-7 (che è il formato di un documento firmato
digitalmente). So di per certo che la libreria windows crytUI.dll
fornisce delle funzioni che permettono in qualche modo di farlo, ma
ovviamente è pressochè impossibile trovare documentazione adeguata a
proposito...nessuno ha qualche valido consiglio? Eventualmente stralci
di programma che fanno visualizzare i certificati?
So anche che una di queste funzioni prende come parametro di ingresso
una variabile di tipo HWND (che sarebbe una finestra in cui io farei
visualizzare il certificato), ma questo in codice C...Nessuno sa
qual'è il corrispondente di questa variabile in codice delphi? E come
si usa? Scusate la mia ignoranza, ma è da poco che uso questo
linguaggio.
In attesa di eventuali risposte, ringrazio chiunque per qualsiasi
forma di aiuto.
Guasoni Massimiliano

smanettare con queste cose senza tools di terze parti è un inferno....
1) Se il tuo scopo è applicare una firma ad un file, creando un file con 
estensione p7m, conforme al maledetto pkcs#7 di 
www.rsa.com
, è un conto.
2) se il tuo scopo è verificare se una mail o un file ha una firma, la 
cosa cambia..
3) dulcis in fundo, se vuoi estrarre il certificato forse la cosa non 
dovrebbe essere estremamente complessa.
L'input scontato che ti do è il seguente:
Se hai soldini da spendere, prendi la suite ipworks smime di 
www.nsoftware.com
.
Costa ma fai tutto in poche righe e senza perdere tempo, fermo restando 
i vincoli imposti da chi produce le interfacce csp e  pkcs#11 che vuoi 
utilizzare.
Ti sconsiglio vivamente la chillkat che oltre ad vere il difetto di 
basarsi su activex, è scritta da cani, tipo interfacce non nomi uguali 
dichiarate in diverse type lib, cosa che oltre ad essere segno di una 
cattiva progettazione, ti costringono a typecast pirotecnici, stendendo 
poi unvelo pietoso sulla impossibilità di mettere i loro componenti su 
data module, costringendoti a crearli a runtime con l'onwer a nil 
oppure, peggio che mai, metterli su un form!
Altrimenti, se fornisci qualche dettaglio in piu' forse (dico, forse!) 
posso darti qualche dritta.
Io ho visto la cryptlib ma l'ho mollata xche, non facendo tutto quello 
che mi serviva, avrei dovuto scrivere un qualcosa per dare in pasto ad 
altri tools cio che da essa viene sfornato, cosa non semplice.
AS

...

Ciao Alberto, e grazie per i consigli, vedo che sei un esperto di
crittografia. Provo allora ad esporti i miei (innumerevoli) problemi.
Voglio realizzare un programma che dato un documento pkcs-7 faccia
queste cose:
1)per ogni firmatario controlli la firma (ci sono riuscito);
2)per ogni firmatario controlli il certificato, la sua validità, lo
stato di revoca etc...(ci sono un po' riuscito);
3)per ogni firmatario visualizzi il suo certificato X.509, in formato
.der o.crt....(non ci sono riuscito);
Bene. al punto 2) ho problemi se voglio implementare il controllo
online con i protocolli RTCS od OCSP: non so se ne hai mai sentito
parlare, in pratica invii una richiesta ad un server RTCS (od
OCSP)perchè ti controlli il certificato X.509 del firmatario. Il
problema è: per inviare la richiesta devi conoscere la URL del server
RTCS (od OCSP), che qualche volta(1%)è riportata nel certificato del
firmatario stesso, moltissime altre volte(99%)non è riportata. Allora
mi chiedo, esiste un modo, o un sito che mi dica dove trovare questa
URL per un certo certificato X.509??
Al punto 3) i problemi abbondano: mi serve un modo per visualizzare i
certificati in formato .der o.crt (che sono i formati in cui si
trovano tutti i certificati X.509). Per farlo esistono apposite
funzioni della libreria windows cryptUI.dll, ma come ben sai le
librerie windows sono spesso poco documentate, e in delphi per
utilizzare funzioni da librerie esterne devi conoscerne alla
perfezione i parametri che prende in ingresso e che restituisce in
uscita.
Tu conosci questa libreria, o conosci metodi alternativi per
visualizzare certificati?
Inoltre, vorrei che il mio programma permettesse di firmare un
documento trasformandolo in una busta pkcs-7, utilizzando una
smartcard. Qui i problemi che ho incontrato sono tanti (usando
cryptlib) perchè non riesco neanche a stabilire una sessione con la
smartcard! Adesso sto analizzando il codice sorgente in C di peter
gutman per vedere se trovo il problema, ma sarà dura.
Hai qualche consiglio in proposito?
Magari stralci di programma?
Vorrei fare il tutto con cryptlib o eventualmentecon altre librerie
freeware, senza ipworks.
Grazie in anticipo.
Guasoni Massimiliano

 freeware, senza ipworks.
se hai link passameli...
Senza impegno, eh? ho tanti di quei casini....
Ma sappi che, tranne il punto 3 su cui non ho tozzato, cio che ti serve 
con ipworks lo fai in 20 righe....Lo dico x esperienza personale.
AS

...

Ciao.
1)Sto facendo tutto quanto con la cryptlib di peter gutman.
2)I server RTCS e OCSP non si riferiscono ad una sola CA. In pratica
questi bei server raccolgono le liste di revoca (nel caso degli OCSP)
o le liste di revoca + tutti i  certificati utente  (nel caso dei
RTCS) per più di una CA. Quindi più CA fanno riferimento ad uno stesso
server RTCS od OCSP...il punto è che talvolta nel certificato X.509 è
riportato il nome della URL al quale connettersi, ma è scorretto!!Così
dixit peter gutman, e non ha tutti i torti dalle prove che ho
fatto...a meno che io non sia stato così scemo  da aver sbagliato le
prove,il che non lo escludo. Il fatto è che sul sito del cnipa (centro
nazionale informatica pubblica amministrazione , 
www.cnipa.gov.it
) si
accenna ai protocolli ocsp per le CA italiane...però come dici tu
dovrebbe essere riportato di preciso da qualche parte...devo
controllare meglio e studiare la situazione, ti saprò dire.
3) per visualizzare i certificati intendo visualizzarli in formato
.der o.crt oppure .crl (per le liste CRL). (Le informazioni del tipo
scadenza, issuer riesco ad ottenerle). Ma forse oggi ho capito come
posso fare.
4)Mio dio, quando sento parlare di smartcard mi vengono i brividi ,
sul serio, ormai è un incubo, non mi apre la sessione con la
smartcard!!...sto usando la smartcard gemplus; la libreria pkcs-11 è
la gclib.dll; il nome del device pkcs-11 è "cryptoki pkcs-11"(sono
sufficienti queste informazioni?)...Però ho capito qual'è l'errore
leggendo i file sorgente in C...o meglio, ho capito qual'è la funzione
che provoca l'errore...ma il codice sorgente in C è per me così
incasinato che non ci ho capito una mazza...non riesco neanche a
trovare la definizione di quella funzione!! Tu che problemi
avevi?Potresti darmi una mano in questo senso?? Scusa la mia
ignoranza, ma cos'è il csp?
Grazie mille per l'aiuto.
Guasoni Massimiliano