Red de conocimiento informático - Material del sitio web - ¿Cómo utilizar el módulo python::SocketServer.socket.ssl ​​​​?

¿Cómo utilizar el módulo python::SocketServer.socket.ssl ​​​​?

Ahora registra la escritura del servidor HTTPS.

importar?ssl,?socket,?hora

if?__name__?==?"__main__":

contexto?=?ssl.SSLContext(ssl .PROTOCOL_SSLv23)

#context.load_cert_chain(certfile='key_pub.pem',?keyfile='key_priv.pem')#Puede definir los archivos de clave pública y privada por separado, o fusionarlos en uno solo archivo

context.load_cert_chain(certfile='cert.pem')

bindsocket?=?socket.socket()

bindsocket.bind(('127.0 .0.1 ',?443))

bindsocket.listen(5)

newsocket,?fromaddr?=?bindsocket.accept()

connstream?= ?context .wrap_socket(newsocket,?server_side=True)

prueba:

data?=?connstream.recv(1024)

print(data)

buf?=?'Hola?NN%f\n\n\n\n'%time.time()

buf?=?buf.encode()

connstream.send(buf)

finalmente:

connstream.shutdown(socket.SHUT_RDWR)

connstream.close()

bindsocket.close()

Este ejemplo no utiliza el marco de socketserver y está destinado a probar el uso del módulo ssl.

Continuar y utilizar el marco para implementar servicios HTTPS

import?socketserver,?ssl,?time

class?MyHTTPSHandler_socket(socketserver.BaseRequestHandler):

def?handle(self):

context?=?ssl.SSLContext(ssl.PROTOCOL_SSLv23)

context.load_cert_chain(certfile="cert.pem")

p>

SSLSocket?=?context.wrap_socket(self.request,?server_side=True)

self.data?=?SSLSocket.recv(1024)

print( self.data)

buf?=?'test?HTTPS?Server?Handler
%f'%time.time()

buf?=? buf.encode( )

SSLSocket.send(buf)

if?__name__?==?"__main__":

puerto?=?443

httpd?=?socketserver.TCPServer(('localhost',?port),?MyHTTPSHandler_socket)

print('https?serving?at?port',?port)

httpd.serve_forever()

Descripción: La función handle() es responsable de todas las comunicaciones con el cliente. Después de que el cliente se conecta, el módulo SSL carga el certificado y encapsula el socket con SSLSocket, protegiendo los detalles de comunicación cifrados subyacentes.

El código del servidor de archivos HTTPS se proporciona a continuación. La función de acceso a archivos se implementa mediante SimpleHTTPRequestHandler y la transmisión de cifrado de datos se implementa mediante SSL.

importar?socketserver,?ssl,?time,?http.server

clase?MyHTTPS_SimpleHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):

def?setup( self):

print('setup')

context?=?ssl.SSLContext(ssl.PROTOCOL_SSLv23)

context.load_cert_chain(certfile='cert .pem')

SSLSocket?=?context.wrap_socket(self.request,?server_side=True)

self.rfile?=?SSLSocket.makefile('rb',? self.rbufsize)

self.wfile?=?SSLSocket.makefile('wb',?self.wbufsize)

if?__name__?==?"__main__":

puerto?=?443

httpd?=?socketserver.TCPServer(("localhost",?port),?MyHTTPS_SimpleHTTPRequestHandler)

print('https?serving ?at?port',?port)

httpd.serve_forever()

Finalmente, cabe señalar que setup() y handle() se ejecutan después de que el cliente comienza a Se llama a connect, setup() precede a handle() en secuencia.