Hi,

 I have a small problem using the M2Crypto for SSL certificate verification.
I have a client and a server who wants to get the certificates verified by
the other in order start the communication. I am able to get the server
certificate verified by the client but not the client certificate in the
server.

I have attached the code which I use for this. Kindly tell me where I had
gone wrong.

I would appreciate a quick reply since I have not been able to make progress
in my project due to this problem.


I am using Python 2.6.1 version in Ubuntu 8.10. I have the OpenSSL version
0.9.8 and SWIG 1.33.
The M2Crypto I am using is 0.18.

I am also using my own CA to sign the certificates. The CA certificates are
available with both the server and the client.

Please let me know if you require additional information on this.

Thanks
Karthik
import select
import socket
import sys
import string
import M2Crypto

HOST = "127.0.0.1"
PORT = 5050
BACKLOG = 5
BUFF_SIZE = 1024

from M2Crypto import SSL


class client:

	def run(self):
		con = SSL.Context('tlsv1')

		#con.load_verify_locations('cacert.pem','/home/kchandr1/Desktop/sc/')
		##con.load_verify_locations('cacert.pem')
		#con.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, depth = 9)
		con.load_client_ca('cacert.pem')
		con.load_cert(certfile = "client_crt.pem",keyfile = "client_key.pem")
		con.set_client_CA_list_from_file('cacert.pem')

		c= SSL.Connection(con)
		c.connect((HOST,5050))
		if c.get_peer_cert() is not None:
			print "Server Certificate verified"
			print c.get_verify_result()
			print c.get_peer_cert()
			con.load_client_ca('cacert.pem')
			con.load_cert(certfile = "client_crt.pem",keyfile = "client_key.pem")
		else:
			print "CLIENT: Not able to get certificate"
			sys.exit()

		data = raw_input("Enter")
		while data:
			c.send(data)
			data = raw_input("Enter to pass to server")
		c.close()
				

if __name__ == "__main__":
    client1 = client()
    try:

	client1.run()
        
    except KeyboardInterrupt:
        print "Keyboard Interrupt recieved"
        s.close_socket()



import select
import socket
import sys
import string

HOST = "127.0.0.1"
PORT = 5050
BACKLOG = 5
BUFF_SIZE = 1024

from M2Crypto import SSL

class server:
	
	def run(self):

		con = SSL.Context('tlsv1')
		con.load_client_ca('cacert.pem')
		con.load_cert(certfile = "server_crt.pem",keyfile = "server_key.pem")
		con.load_verify_locations('cacert.pem')
		#con.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, depth = 9)

			
		bindsocket = SSL.Connection(con)
		bindsocket.bind((HOST,PORT))
		bindsocket.listen(BACKLOG)
		print "waiting for connection"

		(connectsocket, fromaddress) = bindsocket.accept()
		c= SSL.Connection(con)

		if c.get_peer_cert() is not None:
			print "Client Certificate verified"
			print c.get_verify_result()
		else:
			print "Server: Not able to get certificate"
			print c.get_verify_result()
			print c.get_peer_cert()
			sys.exit()

		data = connectsocket.read()
		while data:
			print data
			data = connectsocket.read()
			connectsocket.write('200 OK\r\n\r\n')

		connectsocket.close()
		bindsocket.close()
		
		
if __name__ == "__main__":
    s = server()
    try:
        s.run()
    except KeyboardInterrupt:
        print "Keyboard Interrupt recieved"
        s.close_socket()



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to