• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    一種基于TSL的安全TCP通信實現(xiàn)方法

    2019-03-07 05:22:46文志華周序生
    電腦知識與技術(shù) 2019年36期

    文志華 周序生

    摘要:TSL(Transpon Layer Security)協(xié)議是重要的互聯(lián)網(wǎng)標準協(xié)議。重點分析了TSL協(xié)議握手協(xié)議的過程,通過請求公鑰與多次協(xié)商最終形成會話密鑰。描述了證書、私鑰的生成方法,實現(xiàn)一個服務(wù)端、客戶端使用TSL協(xié)議傳輸?shù)姆椒?,并驗證TSL安全傳輸?shù)男Ч?/p>

    關(guān)鍵詞:傳輸層安全傳輸;TSUSSL; TCP安全通訊信

    中圖分類號:TP393.08

    文獻標識碼:A

    文章編號:1009-3044(2019)36-0040-03

    1概述

    傳輸層安全協(xié)議(TSL, Transport Layer Security)是如今互聯(lián)網(wǎng)上應(yīng)用最廣泛的加密方法[1],是重要的互聯(lián)網(wǎng)標準,其前身為網(wǎng)景公司于提出的安全套協(xié)議(SSL, Secure Socket Layer)。在TLS/SSL出現(xiàn)之前,大部分應(yīng)用層協(xié)議(http、ftp、smtp等)存在著網(wǎng)絡(luò)安全問題。例如,互聯(lián)網(wǎng)重要的基礎(chǔ)協(xié)議http協(xié)議,在傳輸過程中使用的是明文信息,傳輸報文一旦被截獲便會泄露傳輸內(nèi)容;傳輸過程中報文如果被篡改,無法輕易發(fā)現(xiàn);無法保證消息交換的對端身份的可靠性。為了解決此類場景下的問題.研究人員提出了在應(yīng)用層和傳輸層之間加入了TLS/SSL協(xié)議[2-4]。https協(xié)議由此產(chǎn)生,并廣泛運用于互聯(lián)網(wǎng)的安全傳輸。但是,由此也容易讓人誤以為類似于https是一種全新的安全協(xié)議,然而其本質(zhì)是包裹于TLS/SSL之上的http協(xié)議[5]。因此,基于TSL協(xié)議直接實現(xiàn)TCP的安全傳輸,通過代碼分析和還原TSL安全傳輸?shù)谋举|(zhì)是有必要的。

    2 TSL原理

    TLS協(xié)議可以分為兩部分:記錄協(xié)議(ReCord ProtoCol)和握手協(xié)議(Handshake Protocol)。記錄協(xié)議通過使用客戶端和服務(wù)端協(xié)商后的秘鑰進行數(shù)據(jù)加密傳輸。握手協(xié)議客戶端和服務(wù)端進行協(xié)商,確定一組用于數(shù)據(jù)傳輸加密的密鑰串[6]。在握手協(xié)議階段的基本過程是:1)客戶端向服務(wù)器端索要并驗證公鑰;2)雙方協(xié)商生成“對話密鑰”。

    TSL的關(guān)鍵在握手協(xié)議階段,握手協(xié)議完成之時就已經(jīng)構(gòu)建了基于“對話密鑰”的安全傳輸基礎(chǔ)。握手階段的過程及原理分為6個步驟[7]:

    第一步客戶端發(fā)起請求:客戶端給出協(xié)議版本號、一個自動生成的隨機數(shù)(Client random),以及客戶端支持的加密方法。第二步服務(wù)端回應(yīng):服務(wù)端確認雙方使用的加密方法,并給出數(shù)字證書以及一個服務(wù)端生成的隨機數(shù)(Server random)。第三步證書校驗及客戶端請求:客戶端確認數(shù)字證書有效,然后生成一個新的隨機數(shù)(Premaster secret),并使用數(shù)字證書中的公鑰,加密這個隨機數(shù),發(fā)給服務(wù)端。第四步服務(wù)端解密:服務(wù)端使用自己的私鑰,獲取客戶端發(fā)來的隨機數(shù)(即Premaster se-eret)。第五步對話密鑰生成:客戶端和服務(wù)端根據(jù)約定的加密方法,使用前面的三個隨機數(shù),生成”對話密鑰”(session key),用來加密接下來的整個對話過程。第六步握手結(jié)束:客戶端計算所有接收信息的hash值,并采用協(xié)商密鑰解密encrypt-ed_handshake_message,驗證服務(wù)器發(fā)送的數(shù)據(jù)和密鑰,驗證通過則握手完成。

    3基于TSL的安全TCP傳輸實現(xiàn)

    3.1密鑰及證書的生成

    在TSL的握手階段,至少需要一個證書及密鑰,才能完成握手生成一個安全的對話密鑰。OpenSSL是一個開放源代碼的軟件庫包,能通用于主流操作系統(tǒng)。利用OpenSSL,可以生成服務(wù)端密鑰及證書[8]。

    (1)OpenSSL安裝

    下并安裝好之后,需要用openssl version在命令行查看當前版本,驗證是否安裝成功。如果安裝成功,需要配置OpenS-SL的兩個環(huán)境變量信息,在命令行中輸入:set RANDFILE=D:\OpenSSL-Win64V rnd和set OPENSSL_CONF=D: \OpenSSL-Win64\bin\cnflopenssl.enf'。其中“D:\OpenSSL-Win64”是OpenS-SL的安裝目錄,“openssl.enf'”是OpenSSL的配置信息。

    (2)生成私鑰

    使用命令openssl genrsa -des3 -out privatekey.pem 2048生成一個2048位的RSA密鑰privatekey.pem,同時需要輸入一個des3加密的密碼,如果不想每次輸入密碼,則可以使用命令openssl genrsa -out privatekey.pem 2048生成一個無密的2048位密鑰。如果需要生成安全的密鑰,可以將2048更改為4096或更長。

    (3)生成公鑰

    利用上一步中生成的私鑰文件privatekey.pem,使用命令openssl req -new -keyprivatekey.pem -out cert.csr生成cert.csr證書請求文件。在互聯(lián)網(wǎng)環(huán)境中,需要用cert.csr證書請求文件去數(shù)字證書頒發(fā)機構(gòu)(即CA)申請一個正式的數(shù)字證書。為了便于測試,使用命令openssl req -new -x509 -key privatekey.pem -out cert.crt -days 365生成一個申請機構(gòu)和頒發(fā)機構(gòu)都是自身的測試數(shù)字證書cert.crt。

    數(shù)字證書生成中需要輸入的一些信息說明:Country Name(2 letter code) [AU]:CN ISO國家代碼(只支持兩位字符)State or Province Name (full name) [Some-State]:ZJ所在省份Locality Name (eg, city) []:HZ所在城市Organization Name (eg, company):SW_TECH公司名稱Organizational Unit Name (eg,section) []:SW_TECH組織名稱Common Name (eg,YOUR name) []:127.0.0.1申請證書的域名(為了測試方便,此處使用本機回環(huán)地址)Email Address []:admin@aclmin.com管理員郵箱

    (4)清除私鑰密碼

    將加密的RSA密鑰轉(zhuǎn)成未加密的RSA密鑰,避免每次讀取都要求輸入解密密碼。使用命令openssl rsa -in privatekey.pem-out privatekey.pem.un

    用私鑰privatekey.pem.un和公鑰cert.crt證書文件,在程序中使用并開發(fā)一個加密通訊的服務(wù)器。

    3.2安全服務(wù)端實現(xiàn)

    在安全服務(wù)端,需要傳人私鑰privatekey.pem.un和公鑰cert.ert證書文件。私鑰文件需要謹慎保存,一旦文件泄露或被第三方獲取內(nèi)容,在密鑰過期之前第三方能一直冒充服務(wù)端欺騙客戶端連接。服務(wù)端部分實現(xiàn)代碼(基于Python,客戶端相同1:

    def tsl_server(address):

    context = ssl. create_default_context(ssl. Purpose. CLI-ENT_AUTH)

    context. load_cert_chain(certfile= "cert. crt", keyfile= "pri-vatekey.pem.un")

    listener =

    socket. socket(socket. AF_INET,

    socket.SOCK_STREAM)

    listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSE-ADDR,11

    lis,tener.bincl(address)

    listener.listen(l)

    print('Listening at interface {!r) and port(".format(*address》

    raw_sock, address= listener.accept0

    print('Connection from host {!r) and port {}'.format(*address》

    ssl_sock= context.wrap_socket(raw_sock, server_side=True)

    ssl_sock.sendall('My name is TSLServer.'.encode('ascii'》

    ssl_sock.close0

    3.3客戶端實現(xiàn)

    客戶端需要公鑰證書cert.crt文件,不需要服務(wù)端私鑰。在測試時,需要提供與證書生成時對應(yīng)的common name項對應(yīng)的正確域名,本次測試使用127.0.0.1,在互聯(lián)網(wǎng)環(huán)境中需要使用正確的域名。部分客戶端代碼:

    def tsl_cleint(address):

    cafile= "{:ert.crt"

    host, port= address

    purpose= ssl.Purpose.SERVER_AUTH

    context= ssl.create_default_context(purpose, caf/le=caf/le)

    raw_sock = socket. socket(socket. AF_INET, socket.SOCK_STREAM)

    raw_sock.connect《host, port》

    print('Connected to host(!r} and port {".format(host, port》

    4測試與結(jié)論

    4.1測試

    啟動服務(wù)端,同時啟動RawCap抓包工具,運行客戶端程序?qū)Ψ?wù)端發(fā)送請求并獲得服務(wù)端的返回數(shù)據(jù)。對本地ip抓包捕獲9000端口內(nèi)容,與沒有采用TSL安全傳輸進行對比;對TSL握手階段不同階段的抓包內(nèi)容進行對比。

    對比圖1和圖2中內(nèi)容,在沒有采用TLS協(xié)議的TCP通信中,傳輸?shù)氖敲魑膬?nèi)容;使用了TSL協(xié)議之后,捕獲的TCP傳輸內(nèi)容不再可見,是加密的內(nèi)容。

    對比圖3和圖4中的內(nèi)容,得知TSL握手協(xié)議的前面三次會話是采用的明文傳輸,所以服務(wù)端發(fā)送給客戶端的證書也是明文傳輸?shù)?直到會話密鑰產(chǎn)生后的傳輸內(nèi)容才采用密文傳輸。

    4.2結(jié)論

    在典型的TSL通信場景中,客戶端向服務(wù)器索取證書,證書被信任機構(gòu)簽名生效,且包含一個公鑰。客戶端對證書中聲明的身份進行第三方驗證,確認其安全匹配??蛻舳伺c服務(wù)器就加密算法、壓縮以及密鑰等設(shè)定進行協(xié)商,最后使用協(xié)商結(jié)果的方案對套接字上雙向傳輸?shù)臄?shù)據(jù)進行安全保護。

    通過測試對比,采用TSL協(xié)議后的TCP傳輸內(nèi)容為密文,對傳輸數(shù)據(jù)起到了明顯的安全保護,進步改進TCP服務(wù)端,可以在此基礎(chǔ)上構(gòu)建出完整安全的TCP服務(wù)器。

    參考文獻:

    [1]古爾利(David Gourley)等.HTTP權(quán)威指南[M].北京:人民郵電出版社,2012.

    [2] RESCORLA E.The Transport Layer Security (TLS) ProtocolVersion l.3 - draft - ietf - tls - tls13 - 10[DB/OL].[2018 - 03 -30].https://tools.ietf.org/html/draft - ietf - tlstls13 - 10 (2015).

    [3] RESCORLA E.rlhe Transport Layer Security (TLS) Protocol Ver-sion l.3 - draft - ietf - tls - tls13 - 13[DB/OL].[2018 - 03 -30].https://tools.ietf.org/htmUdraft - ietf - tlstls13 - 13 (2016).

    [4] RESCORLA E.'rhe Transport Layer Security (TLS) Protocol Ver-sion l.3 - draft - ietf - tls - tls13 - 18[DB/OL].[2018 - 03 -30].https://tools.ietf.org/html/draft - ietf - tlstls13 - 18 (2016).

    [5]閆露,鄧浩,江陳曉.TLS協(xié)議現(xiàn)狀與研究綜述[J].網(wǎng)絡(luò)新媒體技術(shù),2019,8(01):1-8.

    [6]百度百科.TSL[EB/OL].https://baike. baidu. com/item/TLS/2979545.

    [7]張興隆,程慶豐,馬建峰.TLS l.3協(xié)議研究進展[J].武漢大學(xué)學(xué)報:理學(xué)版,2018,64(06):471-484.

    [8]簡書.OpenSSL下載安裝[EB/OL].htfps://www.jianshu.c om/p/12aldc4ah7aO

    【通聯(lián)編輯:代影】

    收稿日期:2019-11-11

    基金項目:湖南省教育廳科學(xué)研究規(guī)劃課題(編號:17C0477)作者簡介:文志華(1982-),男,湖南桃江人,講師,碩士,主要研究方向為網(wǎng)絡(luò)安全、智能醫(yī)療信息處理;周序生,副教授,碩士,主要

    研究方向為網(wǎng)絡(luò)安全、大數(shù)據(jù)處理。

    耒阳市| 博野县| 鲜城| 沂水县| 黎城县| 海伦市| 盘山县| 剑阁县| 禄劝| 长葛市| 靖宇县| 金堂县| 贵南县| 邓州市| 虎林市| 藁城市| 乌拉特后旗| 五寨县| 客服| 安丘市| 德庆县| 大英县| 永城市| 印江| 湖口县| 乌兰察布市| 姚安县| 枣庄市| 冀州市| 平顺县| 滨海县| 甘谷县| 临潭县| 南投县| 马龙县| 潼关县| 偏关县| 八宿县| 威海市| 孝感市| 汪清县|