ç°å¨è®°å½HTTPSæå¡ç«¯çç¼åã
import ssl, socket, time
if __name__ == "__main__":
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
#context.load_cert_chain(certfile=âkey_pub.pemâ, keyfile=âkey_priv.pem') #å¯ä»¥åå¼å®ä¹å
¬é¥åç§é¥æ件ï¼ä¹å¯ä»¥å并æä¸ä¸ªæ件
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)
try:
data = connstream.recv(1024)
print(data)
buf = 'Hi NN%f\n\n\n\n'%time.time()
buf = buf.encode()
connstream.send(buf)
finally:
connstream.shutdown(socket.SHUT_RDWR)
connstream.close()
bindsocket.close()
æ¤ä¾æ²¡æ使ç¨socketserveræ¡æ¶ï¼ç®çå¨äºæµè¯ssl模åçç¨æ³ã
继ç»ï¼ç¨æ¡æ¶å®ç°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")
SSLSocket = context.wrap_socket(self.request, server_side=True)
self.data = SSLSocket.recv(1024)
print(self.data)
buf = 'test HTTPS Server Handler<br>%f'%time.time()
buf = buf.encode()
SSLSocket.send(buf)
if __name__ == "__main__":
port = 443
httpd = socketserver.TCPServer(('localhostâ, port), MyHTTPSHandler_socket)
print(âhttps serving at port', port)
httpd.serve_forever()
说æï¼handle()å½æ°è´è´£ææä¸å®¢æ·ç«¯çéä¿¡ã客æ·ç«¯è¿æ¥è¿æ¥ä¹åï¼ssl模åè½½å
¥è¯ä¹¦ï¼å¹¶ç¨SSLSocket对socketè¿è¡å°è£
ï¼å±è½åºå±çå å¯éä¿¡ç»èã
ä¸é¢åç»åºHTTPSæ件æå¡å¨ä»£ç ï¼æ件访é®åè½ç±SimpleHTTPRequestHandlerå®ç°ï¼æ°æ®å å¯ä¼ è¾ç±sslå®ç°ã
import socketserver, ssl, time, http.server
class 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__":
port = 443
httpd = socketserver.TCPServer(("localhost", port), MyHTTPS_SimpleHTTPRequestHandler)
print('https serving at port', port)
httpd.serve_forever()
æåï¼è¦æåºçæ¯setup()åhandle()é½æ¯å¨å®¢æ·ç«¯å¼å§è¿æ¥ä¹åæ被è°ç¨ï¼ä»é¡ºåºä¸æ¥è¯´setup()å
äºhandle()ã
追é®æimport sslå没æè¿ä¸ªâssl.SSLContextâï¼æ使ç¨çæ¯python2.6.6