10 messaggi dal 06 febbraio 2008
Ciao,
ho scritto un activeX che applica la firma digitale a documenti con .net framework 3.5 utilizzando le funzionalità offerte dal namespace cryptografy.
Siccome l'activeX dovrà essere fruito attraverso una pagina html e per motivi di sicurezza, ho pensato di creare un CAB che ho inglobato nella pagina con il tag object sotto riportato:
**************************************************
<OBJECT id="FirmaDigitale1" name="FirmaDigitale2" width="648"
height="650" classid="CLSID:a0cabb57-e01e-4f0d-acf6-9063da5e6d4e"
codebase="digitSignCAB.CAB#version=1,0,0,0">
</OBJECT>
**************************************************
Ho aggiunto quindi alla soluzione il progetto CAB, referenziando il file DigitSign.dll che trovo nella cartella release del progetto class library prodotto della compilazione dello stesso.

I problemi che sto riscontrando sono:

1) SICUREZZA: pur avendo inserito (nel mio caso) il sito http://localhost tra i siti affidabili, quando vado sulla pagina con internet explorer mi viene richiesta l'installazione del componente, che effettuo premendo il tasto installa. Dopo l'installazione però, al posto dell'activeX mi compare lo spazio a lui riservato una X ROSSA indice del fatto che IE7 non riesce a visualizzarla. Tengo a precisare che, referenziando direttamente la dll con il tag:
**************************************************
<OBJECT id="FirmaDigitale1" name="FirmaDigitale1" width="648" height="650"
classid="DigitSign.dll#DigitSign.FirmaDigitale">
</OBJECT>
**************************************************
il tutto viene visualizzato correttamente su IE7, quindi l'activeX è funzionante.
Domanda: Qualcuno mi sa dare qualche dritta per la creazione del CAB e/o della sua integrazione per evitare la X ROSSA?

2) SICUREZZA: Supponendo di voler referenziare direttamente la DLL, i problemi che ho riscontrato sono di violazione della sicurezza della macchina client ogni qualvolta tento di aprire un file (system.security.permissions.fileIOPermission) o ogni volta che tento di aprire lo store dei certificati di windows (System.Security.Permissions.StorePermission).
Domande:
a)Come faccio ad impostare le autorizzazioni per, diciamo, avere possesso della macchina per le operazioni suddette?
b)Posso firmare la dll con un certificato attendibile rilasciato da una delle autorità di certificazione installate sulla macchina? Come?

3) WEBSERVER: se invece di pubblicare sotto iis volessi farlo sotto tomcat inglobando la dll in una jsp con uno dei tag object di sopra, potrebbero esserci problemi? Tomcat e le dll vanno "d'accordo"?

Se sei arrivato a leggere fino a questo punto e non sei scappato prima, sei sicuramente uno tosto...aiutami per favore  .

Grazie,

Ciao
Claudio
Modificato da claudiog il 29 gennaio 2009 11.54 -
Modificato da claudiog il 29 gennaio 2009 11.57 -
176 messaggi dal 04 giugno 2007
Contributi | Blog
Mi sa che la risposta non ti piacera' per niente...

E' l'architettura fondamentale che hai scelto che fa a pugni con non uno, ma due security model con i quali ti devi cimentare.

Andiamo con ordine.

Le operazioni che vuoi fare sono tra le piu' privilegiate che possano esistere. Se accedo ad un certificate store, posso impersonare l'utente nel modo piu' profondo.
Per prevenire rischi in un ambiente altamente inaffidabile come IE, il brower non lascia che siano istanziati controlli che non siano marcati esplicitamente come Safe For Initialization (fai una web search per trovare come fare - e' un'interfaccia COM da implementare nel layer di interop)
Se poi disgraziatamente la tua applicazione deve anche gestire il controllo via script, il controllo deve implementare anche la marcatura "Safe for Scripting".

A parte il lavoro per marcare il controllo, e' quello che dichiari che conta. Se un controllo e' safe for scripting/initialization, ogni pagina potrebbe istanziarli. Iddio ti protegga se hai una vulnerabilita' sfruttabile. Saresti 0wn3d in pochi secondi (inclusi i rischi di una compromissione dei certificati).

Se sei su Vista poi, anche se tutto funziona e se stai accedendo al tutto da FS, l'operazione fallisce perche' il browser non gira come utente privilegiato anche se sei admin. A meno che tu non faccia partire il browser con una elevazione (e se lo fai sei da rinchiudere), il token dara' access denied appena provi a toccare i certificate store


A questo punto spero di averti convinto che un ActiveX e' un'idea pessima.

Passiamo alle alternative:
1) un browser control in .NET con una CAS policy molto restrittiva, inclusa la richiesta di una URL evidence da siti noti. Non sono comuni, ma se puoi garantire che i client hanno .NET installato, e' la via piu' sicura.
2) non seguire la moda e scrivere un'applicazione client, magari in click-once, che si occupi delle operazioni privilegiate (di nuovo, ipotesi sul client)

Saluti

--Alessandro
10 messaggi dal 06 febbraio 2008
Grazie Alessandro,

purtroppo non è un problema di moda ma sono costretto a fare un activeX perchè deve essere integrato in una web application che protocolla e firma documenti.

Sai darmi qualche dritta riguardo il punto 1 che mi hai indicato?

Che tu sappia, se firmo digitalmente con un certificato rilasciato da un'autorità di certificazione riconosciuta e installata nello store dei certificati di windows, questo ha le permission per effettuare le operazioni in questione oppure c'è ancora uno strato di sicurezza che non lo permette?

Ciao
Claudio
176 messaggi dal 04 giugno 2007
Contributi | Blog
Vedi un po' se partire da queste informazioni ti aiuta:
http://support.microsoft.com/kb/317346

HTH

--Alessandro

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.