Încărcați temporar cheia clientului SSL pentru autentificarea clientului în C #

Folosesc controlul WebBrowser pentru a adăuga o aplicație WebInterface la aplicația C #. Dorința mea este să verific faptul că numai o astfel de aplicație se poate conecta la serverul nostru Web utilizând certificate de client SSL.

Ideea mea era să încorporez certificatul client în aplicație și să-l folosesc doar când te-ai conectat prin aplicația mea. Oricine are o sugestie despre cum să facă asta? Sau singura modalitate de a face acest lucru este să încărcați cheia în magazinul X509Store.

Dacă am pus-o în X509Store, va face cheia mea disponibilă pentru utilizarea generală a Internet Explorer?

0

3 răspunsuri

Ești sigur că asta vrei să faci? Dacă încorporați cheia privată în aplicație (așa cum presupune abordarea dvs.), un atacator îl poate extrage și îl poate folosi pentru a-și autentifica software-ul necinstit.

Un server nu poate autentifica software-ul client. Se poate testa numai dacă un client posedă un secret. Când încorporați o cheie privată în clientul dvs. și îl distribuiți, acesta nu va mai fi secret.

Aș recomanda să autentificați utilizatorii software-ul dvs., mai degrabă decât software-ul în sine. Trebuie să le permiteți utilizatorilor să-și genereze propriul secret, indiferent dacă este vorba de o parolă sau de o cheie privată, și să le ofere un stimulent să o protejeze.

0
adăugat

Intenția utilizării cheii nu este atât de mult pentru a valida utilizatorii ca să restricționeze accesul la utilizatorii aplicației în loc să utilizeze orice WebBrowser. Acesta este un fel de comportament intranet pe internetul public.

Acesta este DRM-ul unui om sărac. Pierderile datorate persoanelor care extrag cheia nu sunt atât de importante. Cred că riscul de a se întâmpla acest lucru este scăzut și ceea ce am putea pierde este minim.

Cu toate acestea, dacă există altă idee de a restricționa accesul la WebServer doar pentru utilizatorii aplicației, sunt deschis pentru orice sugestii. În principiu, dorința mea este acum de a avea un WebServer public larg deschis pentru a fi citit de oricine, însă este nevoie de acces la rețeaua publică din diverse locuri, astfel încât nu este posibilă înființarea unei infrastructuri intranet.

0
adăugat

Deci, mai multe gânduri aici:

1.

Sunt de acord cu "erickson", validând faptul că numai aplicația dvs. poate comunica cu aplicația este aproape imposibilă cu designul dvs. actual. Este doar o chestiune de timp înainte ca cineva să inverseze aplicația dvs. și apoi jocul să se încheie (dacă aceasta este doar forma de securitate). Dacă doriți să confirmați existența aplicației dvs. și a unui utilizator valid, atunci trebuie să autentificați utilizatorul, precum și un mecanism de verificare a semnării aplicației în cauză (pe care nu cred că este posibilă într-un model client-server. .. după tot ce pot minți întotdeauna și să spun că aplicația mea "hackyou" are aceeași semnătură ca și "realapp" și nu poți verifica asta din partea serverului)

2.

Amintiți-vă că controlul WebBrowser este în esență un înveliș în jurul IE, deci fără niște trucuri (la care voi ajunge într-o secundă) va trebui să adăugați cert-ul la magazinul de utilizatori.

3.

Iată un mod de a realiza ceea ce cereți (chiar dacă este o idee proastă):

  • Folosiți mai întâi WebRequest.Create pentru a crea un obiect HttpWebRequest
  • Încărcați manual un obiect X509Certificate2 fie dintr-un fișier, fie din fluxul binar codificat în program
  • utilizați HttpWebRequest.ClientCertificates pentru a adăuga cert la solicitarea web
  • Trimiteți cererea, primiți răspunsul
  • Trimiteți răspunsul la WebBrowser apăsând ResponseStream al HttpWebResponse la DocumentStream al WebBrowser

Acest lucru înseamnă, în esență, că va trebui să scrieți câteva clase de împachetare care să se ocupe de Cererile și răspunsurile către și de la Server și folosesc doar WebBrowser pentru a gestiona vizualizarea codului HTML.

În realitate, trebuie să reproiectați și să priviți amenințările pe care încercați să le gestionați!

0
adăugat