[英]python client authentication using ssl and socket
i have a python server that needs a client to authenticate using certificates, how can i make a client script that uses client certificates to be authenticated by the server in python using ssl and socket modules. 我有一个需要客户端使用证书进行身份验证的python服务器,我如何制作一个使用ssl和socket模块在python中使用客户端证书进行身份验证的客户端脚本。
is there example for this using socket and ssl only with out twisted? 有没有使用socket和ssl而没有扭曲的例子?
from OpenSSL import SSL
from twisted.internet import ssl, reactor
from twisted.internet.protocol import ClientFactory, Protocol
class EchoClient(Protocol):
def connectionMade(self):
"print connected"
def dataReceived(self, data):
print "Server said:", data
self.transport.loseConnection()
class EchoClientFactory(ClientFactory):
protocol = EchoClient
def clientConnectionFailed(self, connector, reason):
print "Connection failed - goodbye!"
reactor.stop()
def clientConnectionLost(self, connector, reason):
print "Connection lost - goodbye!"
reactor.stop()
class CtxFactory(ssl.ClientContextFactory):
def getContext(self):
self.method = SSL.TLSv1_METHOD
ctx = ssl.ClientContextFactory.getContext(self)
ctx.use_certificate_file('client.crt')
ctx.use_privatekey_file('client.key')
return ctx
if __name__ == '__main__':
factory = EchoClientFactory()
reactor.connectSSL('localhost', 8080, factory, CtxFactory())
reactor.run()
import socket, ssl, pprint
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# require a certificate from the server
ssl_sock = ssl.wrap_socket(s,
keyfile="client.key",
certfile="client.crt",
ca_certs="ca.crt",
cert_reqs=ssl.CERT_REQUIRED)
ssl_sock.connect(('127.0.0.1', 8080))
print repr(ssl_sock.getpeername())
print ssl_sock.cipher()
print pprint.pformat(ssl_sock.getpeercert())
ssl_sock.write("testing")
data = ssl_sock.read()
print data
ssl_sock.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.