Amit, in your model call the derived class
auth.settings.login_form = MyX509Auth() 2012/11/7 Michele Comitini <[email protected]> > simpatiCA makes the client certificates already with needed fields. > Since you use openssl directly you can set all the fields you need in the > certificates by changing openssl.cnf in your openssl installation. > There is plenty of documentation on that. > > OR you can extend the class X509Auth to fit your needs by overriding > get_user() > > > class MyX509Auth(X509Auth): > def get_user(): > self.subject.surname = <put something here > > X509Auth.get_user(self) > > > mic > > > > 2012/11/7 Amit <[email protected]> > >> Hi, >> I filled the email address in the certificate but what I think is problem >> with surname , please check below the log: >> >> >> *File D:\web2py2.1.1\web2py\gluon\contrib\login_methods\x509_auth.py in >> get_user at line 91* code arguments variables >> Function argument list >> >> (self=<gluon.contrib.login_methods.x509_auth.X509Auth object>) >> Code listing >> >> 86. >> 87. >> 88. >> 89. >> 90. >> 91. >> >> 92. >> 93. >> 94. >> 95. >> >> >> p = profile = dict() >> >> username = p['username'] = reduce(lambda a,b: '%s | %s' % (a,b), >> self.subject.CN or self.subject.commonName) >> >> >> p['first_name'] = reduce(lambda a,b: '%s | %s' % >> (a,b),self.subject.givenName or username) >> >> p['last_name'] = reduce(lambda a,b: '%s | %s' % >> (a,b),self.subject.surname) >> >> >> p['email'] = reduce(lambda a,b: '%s | %s' % (a,b),self.subject.Email >> or self.subject.emailAddress) >> >> >> # IMPORTANT WE USE THE CERT SERIAL AS UNIQUE KEY FOR THE USER >> p['registration_id'] = self.serial >> >> Variables >> a undefined b undefined builtinreduce <built-in function reduce> >> self.subject.surname [] self <gluon.contrib.login_methods.x509_auth.X509Auth >> object> self.subject <Storage {'Email': ['[email protected]'], >> ...SG'], 'organizationUnitName': ['HSG'], 'SN': []}> p {'first_name': >> 'A | m | i | t | 1 | | K | h | a | w | a | r | e', 'username': 'Amit1 >> Khaware'} >> >> And while generating the certificates it is not asking about surname, >> it's asking below information: >> >> Country Name (2 letter code) [US]: >> State or Province Name (full name) [CA]: >> Locality Name (eg, city) [San Diego]: >> Organization Name (eg, company) [Cafesoft LLC]: >> Organizational Unit Name (eg, section) []: >> Common Name (eg, YOUR name) []:*Cafesoft CA* >> Email Address [[email protected]]: >> >> Please enter the following 'extra' attributes >> to be sent with your certificate request >> A challenge password []:*password* >> An optional company name []: >> >> >> please check the link : >> >> >> http://www.cafesoft.com/products/cams/ps/docs30/admin/ConfiguringApache2ForSSLTLSMutualAuthentication.html >> >> So x509_auth.py expects surname but above link doesn't provide option to >> fill surname :( >> >> >> Regards, >> >> Amit >> >> >> >> >> >> >> >> >> On Tue, Nov 6, 2012 at 8:34 PM, Michele Comitini < >> [email protected]> wrote: >> >>> self.subject.Email is [] i.e. an empty list. Check if that is the >>> problem. >>> >>> mic >>> Il giorno 06/nov/2012 14:32, "Amit" <[email protected]> ha scritto: >>> >>>> I have used below link to generate server certificates, client >>>> certificates and CA certificates, imported client and CA certificates to >>>> Mozilla Firefox browser and then deploy server certificates and CA >>>> certificate to the Rocket server : >>>> >>>> D:\web2py2.1.1\web2py>web2py.py -a password -i 127.0.0.1 -p 8000 -c >>>> C:\OpenSSL-Win32\bin\cirrusAwareCA\server\certificates\server.test.com.crt >>>> -k C:\OpenSSL-Win32\bin\cirrusAwareCA\server\keys\server.test.com.key >>>> --ca-cert=C:\OpenSSL-Win32\bin\cirrusAwareCA\CA\cirrusAwareCA.crt >>>> >>>> Then Open browser type https://127.0.0.1:8000/MyApp/default/index >>>> >>>> Now its giving error: >>>> <type 'exceptions.TypeError'> reduce() of empty sequence with no >>>> initial value Error snapshot [image: help] >>>> >>>> <type 'exceptions.TypeError'>(reduce() of empty sequence with no >>>> initial value) >>>> >>>> inspect attributes >>>> Frames >>>> >>>> - >>>> >>>> *File D:\web2py2.1.1\web2py\gluon\restricted.py in restricted at >>>> line 209* code arguments variables >>>> - >>>> >>>> *File >>>> >>>> D:\web2py2.1.1\web2py\applications\AuthenticationApp\controllers\default.py >>>> in <module> at line 76* code arguments variables >>>> - >>>> >>>> *File D:\web2py2.1.1\web2py\gluon\globals.py in <lambda> at line 187 >>>> * code arguments variables >>>> - >>>> >>>> *File >>>> >>>> D:\web2py2.1.1\web2py\applications\AuthenticationApp\controllers\default.py >>>> in user at line 38* code arguments variables >>>> Code listing >>>> >>>> 33. >>>> 34. >>>> 35. >>>> 36. >>>> 37. >>>> 38. >>>> >>>> 39. >>>> 40. >>>> 41. >>>> 42. >>>> >>>> use @auth.requires_login() >>>> @auth.requires_membership('group name') >>>> >>>> >>>> >>>> >>>> @auth.requires_permission('read','table name',record_id) >>>> >>>> >>>> >>>> >>>> to decorate functions that need access control >>>> """ >>>> return dict(form=auth()) >>>> >>>> >>>> >>>> def download(): >>>> """ >>>> >>>> - >>>> >>>> *File D:\web2py2.1.1\web2py\gluon\tools.py in __call__ at line 1205* >>>> code arguments variables >>>> - >>>> >>>> *File D:\web2py2.1.1\web2py\gluon\tools.py in login at line 2016* >>>> code arguments variables >>>> - >>>> >>>> *File >>>> D:\web2py2.1.1\web2py\gluon\contrib\login_methods\x509_auth.py in >>>> get_user >>>> at line 91* code arguments variables >>>> Function argument list >>>> >>>> (self=<gluon.contrib.login_methods.x509_auth.X509Auth object>) >>>> Code listing >>>> >>>> 86. >>>> 87. >>>> 88. >>>> 89. >>>> 90. >>>> 91. >>>> >>>> 92. >>>> 93. >>>> 94. >>>> 95. >>>> >>>> >>>> p = profile = dict() >>>> >>>> username = p['username'] = reduce(lambda a,b: '%s | %s' % >>>> (a,b), self.subject.CN or self.subject.commonName) >>>> >>>> >>>> >>>> >>>> p['first_name'] = reduce(lambda a,b: '%s | %s' % >>>> (a,b),self.subject.givenName or username) >>>> >>>> >>>> >>>> p['last_name'] = reduce(lambda a,b: '%s | %s' % >>>> (a,b),self.subject.surname) >>>> >>>> >>>> >>>> >>>> p['email'] = reduce(lambda a,b: '%s | %s' % >>>> (a,b),self.subject.Email or self.subject.emailAddress) >>>> >>>> >>>> >>>> >>>> # IMPORTANT WE USE THE CERT SERIAL AS UNIQUE KEY FOR THE USER >>>> p['registration_id'] = self.serial >>>> >>>> Variables a undefined b undefined builtinreduce <built-in >>>> function reduce> self.subject.surname [] self >>>> <gluon.contrib.login_methods.x509_auth.X509Auth >>>> object> self.subject <Storage {'Email': [], 'C': ['IN'], >>>> 'serialNumbe...SG'], 'organizationUnitName': ['HSG'], 'SN': []}> p >>>> {'first_name': >>>> 'A | m | i | t', 'username': 'Amit'} >>>> >>>> >>>> Regards, >>>> Amit >>>> >>>> >>>> >>>> >>>> On Tue, Nov 6, 2012 at 6:42 PM, Michele Comitini < >>>> [email protected]> wrote: >>>> >>>>> https://github.com/web2py/web2py/blob/master/gluon/main.py#L824 >>>>> >>>>> The log seems to say that your certificate file is not there, or not >>>>> accessible >>>>> >>>>> mic >>>>> >>>>> >>>>> 2012/11/6 Amit <[email protected]> >>>>> >>>>>> I am using Python 2.7.2. >>>>>> >>>>>> On Tue, Nov 6, 2012 at 6:33 PM, Michele Comitini < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> What is your python version? >>>>>>> >>>>>>> >>>>>>> 2012/11/6 Amit <[email protected]> >>>>>>> >>>>>>>> Hi Michele, >>>>>>>> I used Simpatica to generates the certificates but failed to deploy >>>>>>>> to the web2py server, please check once the first mail in this mail >>>>>>>> chain >>>>>>>> where I explained the problem in details. >>>>>>>> >>>>>>>> Regards, >>>>>>>> Amit >>>>>>>> >>>>>>>> On Tue, Nov 6, 2012 at 4:52 PM, Michele Comitini < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> I suggest looking at code gluon/contrib/login_methods/x509_auth.py. >>>>>>>>> Basically you can extract anything from client supplied cert and use >>>>>>>>> it >>>>>>>>> with the auth tables of web2py. That is really simple. >>>>>>>>> The tedious part id getting to know what stuff you can put in the >>>>>>>>> cert. That is more related to managing a CA than to web2py itself. >>>>>>>>> >>>>>>>>> I have written a simple but functional app for managing a little >>>>>>>>> CA: simpatiCA <http://goo.gl/nrAhS> ; it is simple enough to be >>>>>>>>> used as an example and extended to your needs. If you need a real CA >>>>>>>>> there >>>>>>>>> are more featured solutions around... >>>>>>>>> >>>>>>>>> mic >>>>>>>>> >>>>>>>>> >>>>>>>>> > PS: the man behind X509 auth code in web2py is mcm, sadly for >>>>>>>>> your it's documented how it works but not how to organize the certs >>>>>>>>> (which >>>>>>>>> in > theory you should know in advance) >>>>>>>>> >>>>>>>>> -- >>>>>>>>> >>>>>>>>> >>>>>>>>> 2012/11/6 Niphlod <[email protected]> >>>>>>>>> >>>>>>>>>> hem... one thing is helping you to create certs and key for a SSL >>>>>>>>>> protected webserver, quite another to help you managing a credential >>>>>>>>>> store >>>>>>>>>> (I really don't have time for that). >>>>>>>>>> You have problems on finding out what OpenSSL is and want to >>>>>>>>>> manage X509 ? Really ? >>>>>>>>>> Maybe it's time to read some docs. >>>>>>>>>> >>>>>>>>>> http://www.cafesoft.com/products/cams/ps/docs30/admin/ConfiguringApache2ForSSLTLSMutualAuthentication.html >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> PS: the man behind X509 auth code in web2py is mcm, sadly for >>>>>>>>>> your it's documented how it works but not how to organize the certs >>>>>>>>>> (which >>>>>>>>>> in theory you should know in advance) >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>>> -- >>>>> >>>>> >>>>> >>>>> >>>> >>>> -- >>>> >>>> >>>> >>>> >>> -- >>> >>> >>> >>> >> >> -- >> >> >> >> > > --

