zoukankan      html  css  js  c++  java
  • TSL

    通过python的ssl模块(OPENSSL)

    #!/usr/bin/env python3
    #-*- encoding:utf8 -*-
    
    import argparse,socket,ssl
    
    def client(host,port,cafile=None):
        purpose = ssl.Purpose.SERVER_AUTH
        context = ssl.create_default_context(purpose,cafile=cafile)
    
        raw_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        raw_sock.connect((host,port))
        print("Connect to host {!r} and port {}".format(host,port))
    
        ssl_sock = context.wrap_socket(raw_sock,server_hostname=host)
    
        while True:
            data = ssl_sock.recv(1024)
            if not data:break
            print(repr(data))
    
    
    def server(host,port,certifle,cafile=None):
        purpose = ssl.Purpose.CLIENT_AUTH
        context = ssl.create_default_context(purpose,cafile=cafile)
        context.load_cert_chain(certifle)
    
        listener = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        listener.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        listener.bind((host,port))
        listener.listen(1)
        print('Listening at interface {!r} and port {}'.format(host,port))
    
        raw_sock,address = listener.accept()
        print('Connection from host {!r} and port {}'.format(*address))
        ssl_sock = context.wrap_socket(raw_sock,server_side=True)
        ssl_sock.sendall(b'Simple is better than Complex')
        ssl_sock.close()
        listener.close()
    
    if __name__ == "__main__":
        parser = argparse.ArgumentParser(description='Safe TLS client and server')
        parser.add_argument('host',help='Hostname or IP Address')
        parser.add_argument('port',type=int,help='TCP port number')
        parser.add_argument('-a',metavar='cafile',default=None,
                            help='authority:Path to CA certificate PEM file')
        parser.add_argument('-s',metavar='certfile',default=None,
                            help='Run as server:Path to server PEM file')
        args = parser.parse_args()
    
        if args.s:
            server(args.host,args.port,args.s,args.a)
        else:
            client(args.host,args.port,args.a)
  • 相关阅读:
    Zookeeper 系列(五)Curator API
    Zookeeper 系列(四)ZKClient API
    Zookeeper 系列(三)Zookeeper API
    Zookeeper 系列(二)安装配制
    [bzoj 2393] Cirno的完美算数教室 (容斥原理+dfs剪枝)
    [Sdoi2013] [bzoj 3198] spring (hash+容斥原理)
    [bzoj 1471] 不相交路径 (容斥原理)
    [bzoj 3701] Olympic Games (莫比乌斯反演)
    [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)
    [51Nod 1244]
  • 原文地址:https://www.cnblogs.com/alben-cisco/p/7092263.html
Copyright © 2011-2022 走看看