博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TSL
阅读量:6534 次
发布时间:2019-06-24

本文共 1931 字,大约阅读时间需要 6 分钟。

通过python的ssl模块(OPENSSL)

#!/usr/bin/env python3#-*- encoding:utf8 -*-import argparse,socket,ssldef 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)

 

转载于:https://www.cnblogs.com/alben-cisco/p/7092263.html

你可能感兴趣的文章
[AHOI2013]作业
查看>>
[bzoj 4241]历史研究
查看>>
git push被忽略的文件 处理
查看>>
C#中用ILMerge将所有引用的DLL打成一个DLL文件
查看>>
PHP生成HTML静态页面
查看>>
服务器启动django
查看>>
Makefile 中:= ?= += =的区别【转】
查看>>
使用makecontext实现用户线程【转】
查看>>
Comet:基于 HTTP 长连接的“服务器推”技术
查看>>
BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
查看>>
四种方法校验数组中是否包含某个指定的字符串
查看>>
29、Java并发性和多线程-非阻塞算法
查看>>
安装OpenResty开发环境
查看>>
第0课 从0开始
查看>>
python class和class(object)用法区别
查看>>
hadoop无法启动DataNode问题
查看>>
java泛型中<?>和<T>区别
查看>>
这里是指推送通知跟NSNotification有区别:
查看>>
Linux中断(interrupt)子系统之一:中断系统基本原理【转】
查看>>
用户ID的代码生成
查看>>