Thanks Michele,I am going to generate keys using simpatica, I will let you know if i face any problem.
Thanks, Amit On Wed, Jul 25, 2012 at 7:01 PM, Michele Comitini < michele.comit...@gmail.com> wrote: > 2012/7/25 Amit <amit.khaw...@gmail.com>: > > Michele, > > > > I have gone through the X509_Auth class and its methods : > > > > login_form > > > > login_url > > get_user > > > > But not able to visualize how to use this class in my model/controller, I > > just write below what I understood, please confirm > > whether I understood correctly or not. > > > > > > My requirement is : I have one web service method add() in controller > > default.py , I just want to enable x509 authentication > > so for that purpose i will use simpatica to generate keys and > certificates > > then in model class db.py I will use below code: > > > > > > """ > > Login using x509 cert from client. > > > > from gluon.contrib.login_methods.x509_auth import X509Account > > auth.settings.actions_disabled=['register','change_password', > > > > 'request_reset_password','profile'] > > auth.settings.login_form = X509Account() > > > > """ > > > > > > and then in add method I will put @auth.requires_login() annotation . > > > > My doubt: > > 1. how to configure certificate with Rocket and apache server? > > 2. how to make call of web service method with private keys from the > client? > > > > 3. I din't find X509Account class instead of that I found X509Auth > class, so > > is it the same, if yes then I need to create > > > > 1 rocket: > python web2py.py --ssl_certificate=<server pem encoded cert file> > --ssl_private_key=<server pem encoded key file> --ca-cert=<CA > certificate pem encoded file> > apache see mod_ssl config: > http://httpd.apache.org/docs/2.2/mod/mod_ssl.html > > You can use a single file pem encoded containing: server cert, server > key, CA cert. Pass it to all the options. > > 2 What is the client? With curl: > curl --cert <client pem encoded cert + key file> ... > > With python: > you can use pycurl or httplib > (http://docs.python.org/library/httplib.html) see their docs. > > > 3 You did the right thing using X509_Auth. The error in the comment > is corrected in trunk. > The interesting part that you may want to override in a child class > is the get_user() method. Look how certificate properties are mapped > to the auth.user record (the profile variable that). You may override > those to fit your needs. > > mic > > > > > > > auth.settings.login_form = X509Auth() instance ? > > > > > > > > Thanks, > > Amit > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Jul 25, 2012 at 2:28 PM, Michele Comitini > > <michele.comit...@gmail.com> wrote: > >> > >> ---- > >> simpatica > >> > >> - generate ca priv key + self signed certificate > >> - generate server priv keys + certificates signed by the above ca > >> certificate > >> - generate client priv keys + certificates signed by the above ca > >> certificate > >> > >> The client and server certificate are generated after compilation of a > >> form that requires the user to assign a password to protect the > >> private key. > >> The certificate + private keys are encoded in pkcs12 format > >> downloadable to a browser or to be unpacked with openssl or similar > >> tools after providing the above password. Remeber that if you loose > >> the password you cannot open the pkcs12. There is a recovery > >> mechanism in simpatica since the private keys are also encoded with a > >> randomly generated secret that is crypted with the ca private key. > >> It also send emails to email associated with the client informing that > >> a certificate is ready to download. > >> > >> ----- > >> Sample code > >> > >> Just look at gluon/contrib/login_methods/x509_auth.py. Look at the > >> docstring in the X509_Auth class and put that code in your model to > >> configure authentication with x509. > >> > >> Use the @auth.requires_login() annotation as you would with any action > >> requiring authentication. It is explained in: > >> > >> > http://web2py.com/books/default/chapter/29/10?search=rest#Access-Control > >> > >> > >> mic > >> > >> > >> 2012/7/25 Amit <amit.khaw...@gmail.com>: > >> > sure Michele, let me go through the code,If i am not wrong simpatica > is > >> > to > >> > generate the certificate file for the client and if you are having any > >> > sample code to use x509 in case of web service then please do share > with > >> > me. > >> > > >> > Thanks, > >> > Amit > >> > > >> > > >> > On Wed, Jul 25, 2012 at 12:34 PM, Michele Comitini > >> > <michele.comit...@gmail.com> wrote: > >> >> > >> >> Amit > >> >> If you need advice with simpatica don't worry to ask. I never had > time > >> >> to > >> >> write some documentation so you have to look at the code and/or > ask... > >> >> > >> >> mic > >> >> > >> >> > >> >> Il giorno mercoledì 25 luglio 2012 05:14:52 UTC+2, Amit ha scritto: > >> >>> > >> >>> Thanks Michele and Derek..nice post , i am looking exactly the same > :) > >> >>> > >> >>> On Wed, Jul 25, 2012 at 4:09 AM, Michele Comitini > >> >>> <michele.comit...@gmail.com> wrote: > >> >>>> > >> >>>> > >> >>>> This is very similar to what TSL accomplishes with x509 > certificates. > >> >>>> There is a slight difference, the server does not own a public key > >> >>>> for each > >> >>>> client: it verifies that the client owns an x509 certificate > signed > >> >>>> by the > >> >>>> correct certification authority. So no need to store public keys. > in > >> >>>> any > >> >>>> case AFAIK in public/private key algorithms the private key always > >> >>>> allows > >> >>>> generation of the corresponding public key, not the contrary of > >> >>>> course. > >> >>>> > >> >>>> To accomplish what you need in the simplest way you have to: > >> >>>> > >> >>>> - create a certification authority with self signed certificate > >> >>>> - create certificate for you webserver signed with the private key > of > >> >>>> the certification authority above. > >> >>>> - configure your webserver to require a client certificate (with > >> >>>> rocket > >> >>>> look at --ca-cert option) > >> >>>> - In case you need to know some infos about the connecting client > as > >> >>>> reported in its certificate you can use x509_auth.py to use x509 > >> >>>> authentication and configure your REST action with > >> >>>> @auth.requires_login(). > >> >>>> This will give you access to information contained in the > >> >>>> certificate such > >> >>>> common name or serial id. To customize you can extend the > X509_Auth > >> >>>> class. > >> >>>> > >> >>>> To generate test certificates fast you can use simpatica as Derek > >> >>>> correctly suggests. > >> >>>> > >> >>>> mic > >> >>>> > >> >>>> Il giorno martedì 24 luglio 2012 10:33:48 UTC+2, Amit ha scritto: > >> >>>>> > >> >>>>> Hi, > >> >>>>> I have to provide public/private key authentication for accessing > >> >>>>> web > >> >>>>> service (REST) from client in my web2py application.How to achieve > >> >>>>> it? > >> >>>>> > >> >>>>> Scenario: > >> >>>>> 1.Each client will have unique private key which will be sent to > the > >> >>>>> server alongwith request. > >> >>>>> 2. Server has to authenticate private key using public key(unique > >> >>>>> for > >> >>>>> each client) and then allow to access the web service method. For > >> >>>>> e.g. > >> >>>>> suppose one client say X has requested for web service "add()" so > >> >>>>> server has > >> >>>>> to first validate the public key with client's private key and if > >> >>>>> validation > >> >>>>> is successful then allow to access the web service "add()". > >> >>>>> > >> >>>>> Challenges: > >> >>>>> where to store public key of each client?we can't store it in the > db > >> >>>>> because server can't access db before validation of web service > >> >>>>> method.So > >> >>>>> will it be store somewhere in PC(where server is running)?if yes > >> >>>>> then how > >> >>>>> and which format? > >> >>>>> > >> >>>>> > >> >>>>> NOTE: Here Server will be completely written in web2py and client > is > >> >>>>> separate application running on the hardware device. > >> >>>>> > >> >>>> -- > >> >>>> > >> >>>> > >> >>>> > >> >>> > >> >>> > >> >> -- > >> >> > >> >> > >> >> > >> > > >> > > >> > -- > >> > > >> > > >> > > >> > >> -- > >> > >> > >> > > > > -- > > > > > > > > -- > > > > --