---- 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. >>>>> >>>> -- >>>> >>>> >>>> >>> >>> >> -- >> >> >> > > > -- > > > --