Avaleht
uus teema   vasta Tarkvara »  WWW »  ID kaardiga autoriseerimine PHP skriptis, localhosti üles panek? märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
iceincube
HV veteran
iceincube

liitunud: 18.11.2005




sõnum 28.10.2014 14:20:22 ID kaardiga autoriseerimine PHP skriptis, localhosti üles panek? vasta tsitaadiga

Tere,

oleks vaja ID kaardiga autentimise võimalust lubada PHP veebis- kuigi see pigem apache https/apache2 keiss (ehk vaja saada nime/isikukoodi info kuidagi)

Kuna pole ammu sellega tegelenud siis tahtsin uurida kuidas see käib. Kui kiirelt vaadelda siis muud infot internetis polegi kui see mis ametlikul ID kaardi veebis üleval. Sealt tõmbasin alla ka mingi demo failid. Seal on mingisugne sertifikaadi check vms ( OCSP ). Hetkel kohe ei hooma mis värk on. Kas see annab vastuseks mulle siis kasutaja nime ja isikukoodi või siiski lihtsalt kontrollib serti? Mulle tundub, et viimast.

http://www.id.ee/index.php?id=30271
http://id.ee/index.php?id=36284

Kontrollib kohe $_SERVER["SSL_CLIENT_CERT"] olemasolu- saan aru, et see tekib sinna ID kaardiga audentides? PHP ei tegelenud iseenesest audentimisegs vaid seda force'is veebiserver kui õigesti mäletan.


Loen näiteks veel lisaks asju nagu:
- https://code.google.com/p/esteid/wiki/VeebisAutentimine#Levinumatele_veebiserverite_seadistamine
- https://code.google.com/p/esteid/wiki/AuthConfApache


Aga need räägivad nagu apache seadistamisest üldse jne. Serveri teemast. Kuidas see muutuja PHP'sse saab vms?

Kuna endal mingit secure serverit hetkel pole siis kas ma saan localhostis virtual serveri luua apache alla nii, et saaksin ID kaardiga autentimist testida oma arvutis?
Kasutusel Linux (kubuntu), Apache2 ja PHP5


Oskab keegi ehk aidata mind selles teemas?
Kommentaarid: 39 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 37
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 28.10.2014 16:31:07 vasta tsitaadiga

Kas sa proovinud oled nende juhiste järgi talitada? Pole küll ise ID-kaardindusega tegelenud, küll aga sai hiljuti siin isegenereeritud sertidega autenditav teenus käima aetud ja natuke üldteooriasse süvenetud sellega seoses. Ja niisama targutada on ka hea. icon_smile.gif

Ühesõnaga, korrektselt seadistatud Apache korral peaks Apache need vajalikud muutujad PHP keskkonda ise tekitama. Sealsamas Google keskkonnas olevas Apache konfis on üks rida, mis ütleb " # Make SSL session data available to scripts", st ka PHP-le.

Mis puutub OCSP-sse ja serdindusse. Nimi ja isikukood peaks olema ID-kaardi serdis kohapeal olemas ja nende jaoks ei pea minema kuhugi teenuse otsa midagi küsima. OCSP on selleks, et kontrollida kas sert kehtib ja seda pole enneaegselt tühistatud (nt inimene kaotab ID-kaardi ja laseb selle "kinni panna"). Aga lisanüanss on siin selles, et ID-kaardi OCSP on vist tasuline teenus, kui ma ei eksi. Alternatiiviks, mida vist saab tasuta, on CRL-ide kasutamine e. kehtetuks tunnistatud sertide nimekiri offline's. Seda tuleb siis regulaarselt uuendada ja põhimõtteliselt on seal viimasest uuendamisest kuni autentimise hetkeni võimalik kehtetuid ID-kaarte kasutada.

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
madisxxx
HV kasutaja

liitunud: 11.09.2004



Autoriseeritud ID-kaardiga

sõnum 28.10.2014 18:03:55 vasta tsitaadiga

tsitaat:
Ühesõnaga, korrektselt seadistatud Apache korral peaks Apache need vajalikud muutujad PHP keskkonda ise tekitama. Sealsamas Google keskkonnas olevas Apache konfis on üks rida, mis ütleb " # Make SSL session data available to scripts", st ka PHP-le.


Just täpselt nii ongi. Kui apache kliendi brauseri käest id-kaardi sertificaadi kätte saab, siis korrektse apache confi puhul ilmuvadki need automaatselt $_SERVER muutujasse.
Kommentaarid: 101 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 96
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
iceincube
HV veteran
iceincube

liitunud: 18.11.2005




sõnum 28.10.2014 18:45:34 vasta tsitaadiga

Tänud vastuste eest- seega olen õigel teel.

Aga mismoodi see käib- mis hetkel küsitakse nn ID kaardiga autoriseerimist (tuleb see pin1 aken)
Tookord tegime vist mingisuguse alamkausta kuhu pidin suunama kasutaja (seal küsis) ja tagasi tulles oligi juba olemas see _SERVER muutujas.

Et igahetk kui veebis olen ei küsi ta ju. Konkreetse URL'i peal küsib (htaccess'is siis ilmselt alamkaustas peale keeratud)

Mis nimega need key'd on mis tekivad peale korrektset (url) külastust sinna $_SERVER muutujasse?
Kommentaarid: 39 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 37
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 29.10.2014 11:24:26 vasta tsitaadiga

DISCLAIMER: ma jätkuvalt peamiselt spekuleerin ja loen ise võrgust infot. Päris elus ma ID autendi realiseerinud pole

iceincube kirjutas:
Tänud vastuste eest- seega olen õigel teel.

Aga mismoodi see käib- mis hetkel küsitakse nn ID kaardiga autoriseerimist (tuleb see pin1 aken)
Pöördudes tagasi üleüldise SSL ja kliendisertifikaatide temaatika juurde, siis peaks asi käima sedasi: Apache'le on öeldud konfiga, et klient peab esitama SSL sertifikaadi, et ühendust saada ja antud loetelu CA sertifikaatidest, millega allkirjastatud kliendiserte aktsepteeritakse. ID puhul siis CA-ks on Sertifitseerimiskeskuse ID-kaardi juurserdid, mis tuleb endale installida ja kliendiserdiks on ID-kaardi pealt tulev isikutuvastamise sert. Kui kasutaja brauser näeb, et server nõuab kliendiserti, siis ta sobrab oma sertifikaadihoidlad läbi ja otsib sobivaid serte (st serte, mis on küsitud CA poolt välja antud). ID puhul peaks see siis lõppema sellega, et pakutakse lugejas oleva ID pealt tulevat serti ja küsitakse selle avamiseks PIN-i.

TL;DR - kui server on konfitud ID-kaardi serti küsima, siis PIN-i küsimise eest peaks kasutaja brauser ise hoolitsema ja rohkem võimlema ei pea.

tsitaat:
Tookord tegime vist mingisuguse alamkausta kuhu pidin suunama kasutaja (seal küsis) ja tagasi tulles oligi juba olemas see _SERVER muutujas.
See muide on üks anti-pattern, millest seal Google keskkonnas juttu on - sel juhul on sul ID-kaardiga turvatud ainult see üks alamkataloog, aga mitte kogu leht. Loe täpsemalt sealt uuesti üle. Samas kui on vaja ainult kasutaja isik tuvastada ja sa ei hooli sellest, et sessioon jätkub ka ID eemaldamisel lugejast, siis lase käia.

tsitaat:
Et igahetk kui veebis olen ei küsi ta ju. Konkreetse URL'i peal küsib (htaccess'is siis ilmselt alamkaustas peale keeratud)
See sõltub juba konkreetse veebi ülesehitusest, aga ruiskareeglina peaks tegelikult kehtima see, et esimesel katsel turvatud keskkonnaga ühenduda küsitakse PIN-i. Järgmiste päringute jaoks on sert juba kuskil cache's, sest sert tegelikult saadetakse iga päringuga uuesti üle ühenduse.

tsitaat:
Mis nimega need key'd on mis tekivad peale korrektset (url) külastust sinna $_SERVER muutujasse?
http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#envvars - see nimistu peaks sind vast selles osas edasi aitama.

Muide, kui on vaja ID-ga ainult isik tuvastada, aga mitte ilmtingimata https ühendust koguaeg ID-ga turvata, siis äkki on lihtsalt vaadata hoopis OpenID.ee poole? Saad ID-ga autentimise OpenID protokolli alusel ära teha, milleks laias maailmas on oluliselt rohkem oskusteavet saadaval ja ei pea ise ID konfimisega mehkeldama. Mobiil-ID toe saad ka kohe kauba peale vist.

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
incx
HV kasutaja
incx

liitunud: 10.11.2001



Autoriseeritud ID-kaardiga

sõnum 08.11.2014 05:22:42 vasta tsitaadiga

NB! Alljärgneb "käib kah" localhostis käiva arenduskeskkonna jaoks ja ei pretendeeri korrektseks kasutusjuhendiks.

1. Kliendisertifikaadipõhine autentimine (mida ID-kaardiga autent sisuliselt on, võti on lihtsalt füüsilise eraldi kaardi peal) on puhtalt Apache pärusmaa ja suhteliselt triviaalne kiirelt käima panna.

Esmalt pead ära otsustama, kas tahad kaitsta kogu saiti, mingit alamkausta või mingit maagilist "sisselogimisURLi", mille alt luuakse sessioon, mida hiljem ID-kaart enam ei turva (nagu ülalpool mainitud, kõige ebaturvalisem, aga mõnikord praktiline kasutada). Oma mänguplatsil mängimiseks käib iga variant.

a) kogu sait - lükka saidi VirtualHost tagi sisse (sait ilmselgelt peab siis SSL-i taga olema):

<VirtualHost 127.0.0.1:443>
    # igast üldist apache confi, st logid, docroot, muu maagia, ssl baasteemad (SSLEngine on, SSLCertificateFile midagi.pem, SSLCertificateKeyFile midagi.key jne)
    SSLCACertificateFile /etc/pki/tls/certs/SK_idkaart.crt # viidatud faili peab sisaldama üksteise järel PEM formaadis SK juurserti, EE Certification Centre Root CA ja teise taseme
                                                                                 # serte ESTEID-SK ja EID-SK, vt https://www.sk.ee/repositoorium/sk-sertifikaadid/)
    SSLOptions +StdEnvVars +ExportCertData # See ütleb apachele, et ta kliendi sertifikaadi andmed enviroment-muutujates su rakendusse (php vms) edasi annaks, et rakendus kah teaks, kellega tegu
    SSLVerifyClient require # See ütleb apachele, et ära ilma ülaltoodud SK sertide alt välja antud kliendisertifikaadita üldse rahvast ligi lase
    SSLVerifyDepth 2 # See on sinu jaoks konstant hetkel, ütleb, kui sügavalt "sertifikaadipuust" lubatakse otsida väljaandja vastavust - SK kasutab hetkel 2-tasemelist puud
</VirtualHost>   


b ja c) mingi alamhulk saidist - lükka saidi VirtualHost tagi sisse (sait ilmselgelt peab siis SSL-i taga olema):

<VirtualHost 127.0.0.1:443>
    # igast üldist apache confi, st logid, docroot, muu maagia, ssl baasteemad (SSLEngine on, SSLCertificateFile midagi.pem, SSLCertificateKeyFile midagi.key jne)
    SSLCACertificateFile /etc/pki/tls/certs/SK_idkaart.crt # viidatud faili peab sisaldama üksteise järel PEM formaadis SK juurserti, EE Certification Centre Root CA ja teise taseme
                                                                                 # serte ESTEID-SK ja EID-SK, vt https://www.sk.ee/repositoorium/sk-sertifikaadid/)
    <Location /id_auth> # Või <Directory "/minu/app/id_auth">
        SSLOptions +StdEnvVars +ExportCertData # See ütleb apachele, et ta kliendi sertifikaadi andmed enviroment-muutujates su rakendusse (php vms) edasi annaks, et rakendus kah teaks, kellega tegu
        SSLVerifyClient require # See ütleb apachele, et ära ilma ülaltoodud SK sertide alt välja antud kliendisertifikaadita üldse rahvast ligi lase
        SSLVerifyDepth 2 # See on sinu jaoks konstant hetkel, ütleb, kui sügavalt "sertifikaadipuust" lubatakse otsida väljaandja vastavust - SK kasutab hetkel 2-tasemelist puud
    <Location /id_auth>
</VirtualHost>   


Eeltoodu tagab, et Apache kontrollib, et kasutaja seadistatud kohta juurde pääsedes on omanud töötavat (NB! mitte tingimata kehtivat) SK poolt välja antud sertifikaadiga ID-kaarti ja on tagunud sisse õige PIN1 või üldse mitte ligi pääsenud.

2. ID-kaardi kehtivuse kontrolliks on kaks meetodit:

a) CRL - nimekiri kehtetuks kuulutatud sertifikaatidest CA (SK) poolt - apache confi lisad lisaks SSLCARevocationPath /etc/pki/esteid/crl või analoogse käsu, laed vastavasse kausta ilusti CRL-e (vt code.google näiteid) ja Apache tagab tasuta teatud viivitusega kindluse, et tõenäoliselt pole vähemalt päeva-kahe eest kaart kehtetuks tunnistatud. Negatiivseks pooleks ongi see viivitus - CRLe pannakse kokku perioodiliselt mitte liiga tihti (!realtime) vastava hetke seisuga ja kui sulle pätt varastatud ID-kaardi ja pinnidega vahetult peale kaardi omastamist sisse tahab logida, saab ta sellega ilmselt hakkama. Mälu järgi vanasti ei viitsinud SK aegunud sertifikaate CRList välja ka kiskuda (ega suurt motivatsiooni ka polnud alternatiivi tõttu), seega olid CRLid lisaks masendavalt suured, nüüd esmapilgul uuesti vaadates seda muret enam vist pole.

b) OCSP - käid SK OCSP teenuse käest reaalajas küsimas, kas sert kehtib või mitte. Selle näiteid leiad SK/id.ee veebist ja see ei käi Apache pädevusse, vaid sinu rakendus peab seda tegema. Negatiivseks osaks on see, et OCSP päringu eest tuleb Eesti riigis SK-le pappi köhida. Omal ajal mõeldi meil välja selline vahva asi nagu ajamärgend, mille nimel bastardiseeriti OCSP teenuse vastus analoogseks loomaks ajatempliga ning sellest tulenevast keerukusest ja ilmselt natuke ikka ka soovist pappi teenida pandi asi paywalli taha, ilma autentimiseks päris ausa OCSP teenuse paralleelselt pakkumiseta.

3. Rakenduses selles kohas ja hetkel, kus kasutajat tuvastada soovid, vaatad nt järgmiseid environi muutujaid (eeldan, et need on selles $_SERVER arrays, ei ole PHP spetsialist) (iga eeldatud muutuja *peaks* olemas olema, puudumisel peaks kood autentimise kukele saatma):
a) SSL_CLIENT_VERIFY - ütleb, kas Apaches kliendiautent reaalselt õnnestus, pm kontrolli, kas väärtus on 'SUCCESS'
b) SSL_CLIENT_S_DN - kliendisertifikaadi DN (distinguished name) - siit saat suurema vaevata enamvähem inimloetavalt kasutaja isikukoodi ja nime kätte. Kui vanu kaarte vaja toetada, siis võib olla vajalik arvestada, et kord võib asi olla UTF-8, siis UTF-16 bigendian ja mõningate vanade sertidega üpris müstika
c) SSL_CLIENT_CERT - siit saad toore kasutaja ID-kaardi sertifikaadi kätte, kui tahad sellega midagi asisemat teha (logida, vaadata väljaandmisaegu vms)

Kui SSL_CLIENT_VERIFY == 'SUCCESS', sa suudad andmetest isikukoodi/nime välja otsida (ja vajadusel oma kasutajate nimekirja vastu kontrollida), ongi autentimine ok. kui mitte, siis saadad kukele.

Fukiku kirjutas:
Muide, kui on vaja ID-ga ainult isik tuvastada, aga mitte ilmtingimata https ühendust koguaeg ID-ga turvata, siis äkki on lihtsalt vaadata hoopis OpenID.ee poole? Saad ID-ga autentimise OpenID protokolli alusel ära teha, milleks laias maailmas on oluliselt rohkem oskusteavet saadaval ja ei pea ise ID konfimisega mehkeldama. Mobiil-ID toe saad ka kohe kauba peale vist.


Mina siinkohal sügavalt kaaluks esmalt, kas isikutuvastus on teenus, mida ma tahaks kolmandalt riikliku tagatiseta osapoolelt "sisse osta". Mitte et mul oleks vähematki kahtlust Paljaku aususes või eesmärkides, aga kliendisertifikaadi kontrolli seadistamine ei ole niivõrd keeruline ja ületamatu teema, et minna "kasutaja on isikukood,nimi sest SK/riik nii ütleb" taseme pealt üle "kasutaja on mingid oma valikul edastatud andmed, sest üks teine mees nii ütles ning ta peaks küll olema igati aus poiss" tasemele.
Lisaks tuleb siiski ilmselt nentida, et PKI on veidi levinum, tuntum, vanem ja ennast tõestanum teema kui OpenId, mis muidugi omakorda on oluliselt popim ja noortepärasem icon_smile.gif

_________________
I have never understood the female capacity to avoid a direct answer to any question.
-- Spock, "This Side of Paradise", stardate 3417.3
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 20
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  ID kaardiga autoriseerimine PHP skriptis, localhosti üles panek?
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.