¿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): p>
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 p>
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__": p>
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.