一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python3+ssl實(shí)現(xiàn)加密通信

 ly88 2023-07-25 發(fā)布于山西

2023-05-19 123 吉林舉報(bào)

簡(jiǎn)介: Python3+ssl實(shí)現(xiàn)加密通信

一、說(shuō)明

1. python標(biāo)準(zhǔn)庫(kù)ssl可實(shí)現(xiàn)加密通信

2. ssl庫(kù)底層使用openssl,做了面向?qū)ο窕脑旌秃?jiǎn)化,但還是可以明顯看出openssl的痕跡

3. 本文先給出python實(shí)現(xiàn)的socket通信,在此基礎(chǔ)上再給出ssl通信以便讀者更方便地看到socket和ssl在python編程中的區(qū)別

4. 說(shuō)到ssl很多人都會(huì)想到https,但本質(zhì)而言ssl是在傳輸層和應(yīng)用層之間新插入的一個(gè)層,根據(jù)不同層無(wú)關(guān)原則ssl和https并沒(méi)有任何綁定關(guān)系,ssl之上完全可以是其他任何應(yīng)用層協(xié)議(比如pop/imap/telnet等等)

二、程序?qū)崿F(xiàn)

2.1 socket通信實(shí)現(xiàn)

客戶端代碼:

import socketclass client_class:    def send_hello(self):        # 與服務(wù)端建立連接        client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)        client_socket.connect(('127.0.0.1',9999))        # 向服務(wù)端發(fā)送消息        msg = "do i connect with server ?".encode("utf-8")        client_socket.send(msg)        # 接收服務(wù)端返回的消息        msg = client_socket.recv(1024).decode('utf-8')        print(f"receive msg from server : {msg}")        client_socket.close()if __name__ == "__main__":    client = client_class()    client.send_hello()

服務(wù)端代碼:

import socketclass server_class :    def build_listen(self):        # 監(jiān)聽(tīng)端口        server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)        server_socket.bind(('127.0.0.1',9999))        server_socket.listen(5)        while True:            # 接收客戶端連接            client_socket, addr = server_socket.accept()            # 接收客戶端信息            msg = client_socket.recv(1024).decode("utf-8")            print(f"receive msg from client {addr}:{msg}")            # 向客戶端發(fā)送信息            msg = f"yes , you have client_socketect with server.\r\n".encode("utf-8")            client_socket.send(msg)            client_socket.close()if __name__ == "__main__":    server = server_class()    server.build_listen()

2.2 ssl通信實(shí)現(xiàn)

客戶端代碼:

import socketimport sslclass client_ssl:    def send_hello(self,):        # 生成SSL上下文        context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)        # 加載信任根證書        context.load_verify_locations('cert/ca.crt')        # 與服務(wù)端建立socket連接        with socket.create_connection(('127.0.0.1', 9443)) as sock:            # 將socket打包成SSL socket            # 一定要注意的是這里的server_hostname不是指服務(wù)端IP,而是指服務(wù)端證書中設(shè)置的CN,我這里正好設(shè)置成127.0.1而已            with context.wrap_socket(sock, server_hostname='127.0.0.1') as ssock:                # 向服務(wù)端發(fā)送信息                msg = "do i connect with server ?".encode("utf-8")                ssock.send(msg)                # 接收服務(wù)端返回的信息                msg = ssock.recv(1024).decode("utf-8")                print(f"receive msg from server : {msg}")                ssock.close()if __name__ == "__main__":    client = client_ssl()    client.send_hello()

服務(wù)端代碼:

import socketimport sslclass server_ssl:    def build_listen(self):        # 生成SSL上下文        context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)        # 加載服務(wù)器所用證書和私鑰        context.load_cert_chain('cert/server.crt', 'cert/server_rsa_private.pem.unsecure')        # 監(jiān)聽(tīng)端口        with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:            sock.bind(('127.0.0.1', 9443))            sock.listen(5)            # 將socket打包成SSL socket            with context.wrap_socket(sock, server_side=True) as ssock:                while True:                    # 接收客戶端連接                    client_socket, addr = ssock.accept()                    # 接收客戶端信息                    msg = client_socket.recv(1024).decode("utf-8")                    print(f"receive msg from client {addr}:{msg}")                    # 向客戶端發(fā)送信息                    msg = f"yes , you have client_socketect with server.\r\n".encode("utf-8")                    client_socket.send(msg)                    client_socket.close()if __name__ == "__main__":    server = server_ssl()    server.build_listen()

三、運(yùn)行結(jié)果

當(dāng)前項(xiàng)目結(jié)構(gòu)如圖所示,證書生成可參考:openssl實(shí)現(xiàn)雙向認(rèn)證教程(服務(wù)端代碼+客戶端代碼+證書生成)

3.1 socket通信運(yùn)行結(jié)果

客戶端:

服務(wù)端:

3.2 ssl通信運(yùn)行結(jié)果

客戶端:

服務(wù)端:



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    老熟妇2久久国内精品| 欧美成人高清在线播放| 精品高清美女精品国产区| 日本一二三区不卡免费| 国内精品一区二区欧美| 国产成人精品久久二区二区| 熟女少妇一区二区三区蜜桃| 伊人天堂午夜精品草草网| 中文字幕亚洲精品乱码加勒比| 91福利视频日本免费看看| 美国女大兵激情豪放视频播放 | 国产麻豆视频一二三区| 国产精品午夜小视频观看| 国产美女精品午夜福利视频| 精品视频一区二区三区不卡| 九九热精品视频免费观看| 欧美精品女同一区二区| 亚洲一区二区三区三州| 99久久精品午夜一区二| 国产精品香蕉免费手机视频| 欧美日韩亚洲国产精品| 日韩精品中文在线观看| 粉嫩国产美女国产av| 国产又粗又长又大高潮视频| 亚洲综合天堂一二三区| 熟女一区二区三区国产| 韩日黄片在线免费观看| 中文字幕乱子论一区二区三区| 亚洲一区二区三区日韩91| 日韩夫妻午夜性生活视频| 国产精品激情对白一区二区| 草草夜色精品国产噜噜竹菊| 日本精品最新字幕视频播放| 91福利视频日本免费看看| 久久大香蕉精品在线观看| 国产欧美日韩一级小黄片| 人妻偷人精品一区二区三区不卡| 国内九一激情白浆发布| 日韩精品福利在线观看| 亚洲免费视频中文字幕在线观看 | 天海翼精品久久中文字幕|