




已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
HTTPS簡介1HTTPS解決的問題與限制2IE瀏覽器如何驗證SSL證書3SSL介紹4SSL協議的握手過程5證書各部分的含義5加密技術簡介7幾個驗證小例子8Java 操作ssl socket8keytool證書與密鑰管理8Java sslSocket 聊天實例9用commview工具截獲瀏覽器訪問支付寶的TCP/IP包14Java ssl socket 操作http 訪問支付寶(https)18Java ssl socket 雙向認證19建立一個信息安全通道,來保證數據傳輸的安全;確認網站的真實性即認證https簡介 它是由Netscape開發(fā)并內置于其瀏覽器中,用于對數據進行壓縮和解壓操作,并返回網絡上傳送回的結果。HTTPS實際上應用了Netscape的安全套接字層(SSL)作為HTTP應用層的子層。(HTTPS使用端口443,而不是象HTTP那樣使用端口80來和TCP/IP進行通信。)SSL使用40 位關鍵字作為RC4流加密算法,這對于商業(yè)信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證,如果需要的話用戶可以確認發(fā)送者是誰。 也就是說它的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。HTTPS和HTTP的區(qū)別一、https協議需要到ca申請證書,一般免費證書很少,需要交費。二、http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。三、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。四、http的連接很簡單,是無狀態(tài)的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。它的安全保護依賴瀏覽器的正確實現以及服務器軟件、實際加密算法的支持.一種常見的誤解是“銀行用戶在線使用https:就能充分徹底保障他們的銀行卡號不被偷竊?!睂嶋H上,與服務器的加密連接中能保護銀行卡號的部分,只有用戶到服務器之間的連接及服務器自身。并不能絕對確保服務器自己是安全的,這點甚至已被攻擊者利用,常見例子是模仿銀行域名的釣魚攻擊。少數罕見攻擊在網站傳輸客戶數據時發(fā)生,攻擊者會嘗試竊聽傳輸中的數據。商業(yè)網站被人們期望迅速盡早引入新的特殊處理程序到金融網關,僅保留傳輸碼(transaction number)。不過他們常常存儲銀行卡號在同一個數據庫里。那些數據庫和服務器少數情況有可能被未授權用戶攻擊和損害。TLS 1.1之前這段僅針對TLS 1.1之前的狀況。因為SSL位于http的下一層,并不能理解更高層協議,通常SSL服務器僅能頒證給特定的IP/端口組合。這是指它經常不能在虛擬主機(基于域名)上與HTTP正常組合成HTTPS。這一點已被即將來臨的TLS 1.1更新為種完全支持基于域名的虛擬主機。HTTPS解決的問題與限制一、信任主機的問題.采用https的服務器必須從CA (Certificate Authority)申請一個用于證明服務器用途類型的證書。該證書只有用于對應的服務器的時候,客戶端才信任此主機。所以目前所有的銀行系統(tǒng)網站,關鍵部分應用都是https 的??蛻敉ㄟ^信任該證書,從而信任了該主機。其實這樣做效率很低,但是銀行更側重安全。這一點對我們沒有任何意義,我們的服務器,采用的證書不管是自己發(fā)布的還是從公眾的地方發(fā)布的,其客戶端都是自己人,所以我們也就肯定信任該服務器。IE瀏覽器中已經內置了大量證書頒發(fā)機構的公鑰,通過下面的操作我們可以查看到已經被信任的證書頒發(fā)機構。在IE瀏覽器的菜單中點擊“工具/Internet選項”,選擇“內容”標簽,點擊“證書”按鈕,然后就可以看到IE瀏覽器已經信任了許多“中級證書頒發(fā)機構”和“受信任的根證書頒發(fā)機構。當我們在訪問該網站時,瀏覽器就會自動下載該網站的SSL證書,并對證書的安全性進行檢查。 由于證書是分等級的,網站擁有者可能從根證書頒發(fā)機構領到證書,也可能從根證書的下一級(如某個國家的認證中心,或者是某個省發(fā)出的證書)領到證書。假設我們正在訪問某個使用了 SSL技術的網站,IE瀏覽器就會收到了一個SSL證書,如果這個證書是由根證書頒發(fā)機構簽發(fā)的,IE瀏覽器就會按照下面的步驟來檢查:瀏覽器使用內置的根證書中的公鑰來對收到的證書進行認證,如果一致,就表示該安全證書是由可信任的頒證機構簽發(fā)的,這個網站就是安全可靠的;如果該SSL證書不是根服務器簽發(fā)的,瀏覽器就會自動檢查上一級的發(fā)證機構,直到找到相應的根證書頒發(fā)機構,如果該根證書頒發(fā)機構是可信的,這個網站的SSL證書也是可信的。二、通訊過程中的數據的泄密和被篡改1 一般意義上的https,就是服務器有一個證書。a) 主要目的是保證服務器就是他聲稱的服務器,這個跟第一點一樣。b) 服務端和客戶端之間的所有通訊,都是加密的。i. 具體講,是客戶端產生一個對稱的密鑰,通過服務器的證書來交換密鑰,即一般意義上的握手過程。ii. 接下來所有的信息往來就都是加密的。第三方即使截獲,也沒有任何意義,因為他沒有密鑰,當然篡改也就沒有什么意義了。2 少許對客戶端有要求的情況下,會要求客戶端也必須有一個證書。a) 這里客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼,還有一個CA 認證過的身份。因為個人證書一般來說是別人無法模擬的,所有這樣能夠更深的確認自己的身份。b) 目前少數個人銀行的專業(yè)版是這種做法,具體證書可能是拿U盤(即U盾)作為一個備份的載體。IE瀏覽器如何驗證SSL證書IE瀏覽器中已經內置了大量證書頒發(fā)機構的公鑰,通過下面的操作我們可以查看到已經被信任的證書頒發(fā)機構。在IE瀏覽器的菜單中點擊“工具/Internet選項”,選擇“內容”標簽,點擊“證書”按鈕,然后就可以看到IE瀏覽器已經信任了許多“中級證書頒發(fā)機構”和“受信任的根證書頒發(fā)機構。當我們在訪問該網站時,瀏覽器就會自動下載該網站的SSL證書,并對證書的安全性進行檢查。 由于證書是分等級的,網站擁有者可能從根證書頒發(fā)機構領到證書,也可能從根證書的下一級(如某個國家的認證中心,或者是某個省發(fā)出的證書)領到證書。假設我們正在訪問某個使用了 SSL技術的網站,IE瀏覽器就會收到了一個SSL證書,如果這個證書是由根證書頒發(fā)機構簽發(fā)的,IE瀏覽器就會按照下面的步驟來檢查:瀏覽器使用內置的根證書中的公鑰來對收到的證書進行認證,如果一致,就表示該安全證書是由可信任的頒證機構簽發(fā)的,這個網站就是安全可靠的;如果該SSL證書不是根服務器簽發(fā)的,瀏覽器就會自動檢查上一級的發(fā)證機構,直到找到相應的根證書頒發(fā)機構,如果該根證書頒發(fā)機構是可信的,這個網站的SSL證書也是可信的。client端接收到了server的證書,怎樣和client中的public key來認證服務端呢?需要回答4個問題:1.server的證書過期了嗎?2.server證書中的issuing CA是trusted CA? 如果server證書中的issuing CA的distinguished name和client的trusted CA的某個證書的distinguished name相同,則答案是肯定的。 如果server證書中的issuing CA沒有在trusted CA列表中,但the client can verify a certificate chain ending in a CA that is on the list,仍然可以。3.client的issuing CA的public key能否驗證server證書中的issuers digital signature?4.在server證書中的domain name和server的domain name是不是相同的?SSL介紹為Netscape所研發(fā),用以保障在Internet上數據傳輸之安全,利用數據加密(Encryption)技術,可確保數據在網絡上之傳輸過程中不會被截取及竊聽。目前一般通用之規(guī)格為40 bit之安全標準,美國則已推出128 bit之更高安全標準,但限制出境。只要3.0版本以上之I.E.或Netscape瀏覽器即可支持SSL。當前版本為3.0。它已被廣泛地用于Web瀏覽器與服務器之間的身份認證和加密數據傳輸。SSL協議位于TCP/IP協議與各種應用層協議之間,為數據通訊提供安全支持。SSL協議可分為兩層:SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用于在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。SSL協議提供的服務主要有哪些?1)認證用戶和服務器,確保數據發(fā)送到正確的客戶機和服務器2)加密數據以防止數據中途被竊取3)維護數據的完整性,確保數據在傳輸過程中不被改變。SSL協議的工作流程服務器認證階段:1)客戶端向服務器發(fā)送一個開始信息“Hello”以便開始一個新的會話連接;2)服務器根據客戶的信息確定是否需要生成新的主密鑰,如需要則服務器在響應客戶的“Hello”信息時將包含生成主密鑰所需的信息;3)客戶根據收到的服務器響應信息,產生一個主密鑰,并用服務器的公開密鑰加密后傳給服務器;4)服務器恢復該主密鑰,并返回給客戶一個用主密鑰認證的信息,以此讓客戶認證服務器。用戶認證階段在此之前,服務器已經通過了客戶認證,這一階段主要完成對客戶的認證。經認證的服務器發(fā)送一個提問給客戶,客戶則返回(數字)簽名后的提問和其公開密鑰,從而向服務器提供認證。從SSL 協議所提供的服務及其工作流程可以看出,SSL協議運行的基礎是商家對消費者信息保密的承諾,這就有利于商家而不利于消費者。在電子商務初級階段,由于運作電子商務的企業(yè)大多是信譽較高的大公司,因此這問題還沒有充分暴露出來。但隨著電子商務的發(fā)展,各中小型公司也參與進來,這樣在電子支付過程中的單一認證問題就越來越突出。雖然在SSL3.0中通過數字簽名和數字證書可實現瀏覽器和Web服務器雙方的身份驗證,但是SSL協議仍存在一些問題,比如,只能提供交易中客戶與服務器間的雙方認證,在涉及多方的電子交易中,SSL協議并不能協調各方間的安全傳輸和信任關系。在這種情況下,Visa和MasterCard兩大信用卡公組織制定了SET協議,為網上信用卡支付提供了全球性的標準。SSL協議的握手過程客戶端的瀏覽器向服務器傳送客戶端SSL 協議的版本號,加密算法的種類,產生的隨機數,以及其他服務器和客戶端之間通訊所需要的各種信息。服務器向客戶端傳送SSL 協議的版本號,加密算法的種類,隨機數以及其他相關信息,同時服務器還將向客戶端傳送自己的證書??蛻衾梅掌鱾鬟^來的信息驗證服務器的合法性,服務器的合法性包括:證書是否過期,發(fā)行服務器證書的CA 是否可靠,發(fā)行者證書的公鑰能否正確解開服務器證書的“發(fā)行者的數字簽名”,服務器證書上的域名是否和服務器的實際域名相匹配。如果合法性驗證沒有通過,通訊將斷開;如果合法性驗證通過,將繼續(xù)進行第四步。用戶端隨機產生一個用于后面通訊的“對稱密碼”,然后用服務器的公鑰(服務器的公鑰從步驟中的服務器的證書中獲得)對其加密,然后將加密后的“預主密碼”傳給服務器。如果服務器要求客戶的身份認證(在握手過程中為可選),用戶可以建立一個隨機數然后對其進行數據簽名,將這個含有簽名的隨機數和客戶自己的證書以及加密過的“預主密碼”一起傳給服務器。如果服務器要求客戶的身份認證,服務器必須檢驗客戶證書和簽名隨機數的合法性,具體的合法性驗證過程包括:客戶的證書使用日期是否有效,為客戶提供證書的CA 是否可靠,發(fā)行CA 的公鑰能否正確解開客戶證書的發(fā)行CA 的數字簽名,檢查客戶的證書是否在證書廢止列表(CRL)中。檢驗如果沒有通過,通訊立刻中斷;如果驗證通過,服務器將用自己的私鑰解開加密的“預主密碼”,然后執(zhí)行一系列步驟來產生主通訊密碼(客戶端也將通過同樣的方法產生相同的主通訊密碼)。服務器和客戶端用相同的主密碼即“通話密碼”,一個對稱密鑰用于SSL 協議的安全數據通訊的加解密通訊。同時在SSL 通訊過程中還要完成數據通訊的完整性,防止數據通訊中的任何變化??蛻舳讼蚍掌鞫税l(fā)出信息,指明后面的數據通訊將使用的步驟中的主密碼為對稱密鑰,同時通知服務器客戶端的握手過程結束。服務器向客戶端發(fā)出信息,指明后面的數據通訊將使用的步驟中的主密碼為對稱密鑰,同時通知客戶端服務器端的握手過程結束。SSL 的握手部分結束,SSL 安全通道的數據通訊開始,客戶和服務器開始使用相同的對稱密鑰進行數據通訊,同時進行通訊完整性的檢驗。證書各部分的含義證書版本號,不同版本的證書格式不同Serial Number序列號,同一身份驗證機構簽發(fā)的證書序列號唯一Algorithm Identifier 簽名算法,包括必要的參數Issuer 身份驗證機構的標識信息Period of Validity 有效期Subject證書持有人的標識信息Subjects Public Key證書持有人的公鑰Signature身份驗證機構對證書的簽名證書的格式認證中心所發(fā)放的證書均遵循X.509 V3 標準,其基本格式如下:證書版本號(Certificate Format Version)含義:用來指定證書格式采用的X.509 版本號。證書序列號(Certificate Serial Number)含義:用來指定證書的唯一序列號,以標識CA 發(fā)出的所有公鑰證書。簽名(Signature)算法標識(Algorithm Identifier)含義:用來指定 CA 簽發(fā)證書所用的簽名算法。簽發(fā)此證書的 CA 名稱(Issuer )含義:用來指定簽發(fā)證書的 CA 的X.500 唯一名稱(DN,Distinguished Name)。證書有效期(Validity Period)起始日期(notBefore) 終止日期(notAfter)含義:用來指定證書起始日期和終止日期。用戶名稱(Subject)含義:用來指定證書用戶的X.500 唯一名稱(DN,Distinguished Name)。用戶公鑰信息(Subject Public Key Information)算法(algorithm) 算法標識(AlgorithmIdentifier)用戶公鑰(subjectPublicKey)含義:用來標識公鑰使用的算法,并包含公鑰本身。證書擴充部分(擴展域)(Extensions)含義:用來指定額外信息。X.509 V3 證書的擴充部分(擴展域)及實現方法如下:CA 的公鑰標識(AuthorityKeyIdentifier)公鑰標識(SET 未使用)(KeyIdentifier)簽發(fā)證書者證書的簽發(fā)者的甄別名(CertificateIssuer)簽發(fā)證書者證書的序列號(Certificate Serial Number)X.509 V3 證書的擴充部分(擴展域)及實現CA 的公鑰標識(AuthorityKeyIdentifier)公鑰標識(SET 未使用)(KeyIdentifier)簽發(fā)證書者證書的簽發(fā)者的甄別名(Certificat簽發(fā)證書者證書的序列號(Certificate Serial Number)含義:CA 簽名證書所用的密鑰對的唯一標識用戶的公鑰標識(SubjectKeyIdentifier)含義:用來標識與證書中公鑰相關的特定密鑰進行解密。證書中的公鑰用途(KeyUsage)含義:用來指定公鑰用途。用戶的私鑰有效期(PrivateKeyUsagePeriod)起始日期(NoteBefore) 終止日期(NoteAfter)含義:用來指定用戶簽名私鑰的起始日期和終止日期。CA 承認的證書政策列表(Certificate Policies)含義:用來指定用戶證書所適用的政策,證書政策可由對象標識符表示。用戶的代用名(SubstitutionalName)含義:用來指定用戶的代用名。CA 的代用名(IssuerAltName)含義:用來指定 CA 的代用名?;局萍s(BasicConstraints)含義:用來表明證書用戶是最終用戶還是CA。 在SET 系統(tǒng)中有一些私有擴充部分(擴展域)HashedRootKey 含義:只在根證書中使用,用于證書更新時進行回溯。證書類型(CertificateType)含義:用來區(qū)別不同的實體。該項是必選的。商戶數據(MerchantData)含義:包含支付網關需要的所有商戶信息。持卡人證書需求(CardCertRequired)含義:顯示支付網關是否支持與沒有證書的持卡人進行交易。SET 擴展(SETExtensions)含義:列出支付網關支持的支付命令的 SET 信息擴展。CRL 數據定義版本(Version)含義:顯示 CRL 的版本號。CRL 的簽發(fā)者(Issuer)含義:指明簽發(fā) CRL 的CA 的甄別名。CRL 發(fā)布時間(thisUpdate)預計下一個 CRL 更新時間(NextUpdate)撤銷證書信息目錄(RevokedCertificates) CRL 擴展(CRLExtension)CA 的公鑰標識(AuthorityKeyIdentifier)CRL 號(CRLNumber)加密技術簡介加密技術包括兩個元素:算法和密鑰。算法是將普通的文本(或者可以理解的信息)與一串數字(密鑰)的結合,產生不可理解的密文的步驟,密鑰是用來對數據進行編碼和解碼的一種算法。在安全保密中,可通過適當的密鑰加密技術和管理機制來保證網絡的信息通訊安全。密鑰加密技術的密碼體制分為對稱密鑰體制和非對稱密鑰體制兩種。相應地,對數據加密的技術分為兩類,即對稱加密(私人密鑰加密)和非對稱加密(公開密鑰加密)。對稱加密以數據加密標準(DES,Data Encryption Standard)算法為典型代表,非對稱加密通常以RSA(Rivest Shamir Ad1eman)算法為代表。對稱加密的加密密鑰和解密密鑰相同,而非對稱加密的加密密鑰和解密密鑰不同,加密密鑰可以公開而解密密鑰需要保密。對稱加密采用了對稱密碼編碼技術,它的特點是文件加密和解密使用相同的密鑰,即加密密鑰也可以用作解密密鑰,這種方法在密碼學中叫做對稱加密算法,對稱加密算法使用起來簡單快捷,密鑰較短,且破譯困難,除了數據加密標準(DES),另一個對稱密鑰加密系統(tǒng)是國際數據加密算法(IDEA),它比DES的加密性好,而且對計算機功能要求也沒有那么高。IDEA加密標準由PGP(Pretty Good Privacy)系統(tǒng)使用。1976年,美國學者Dime和Henman為解決信息公開傳送和密鑰管理問題,提出一種新的密鑰交換協議,允許在不安全的媒體上的通訊雙方交換信息,安全地達成一致的密鑰,這就是“公開密鑰系統(tǒng)”。相對于“對稱加密算法”這種方法也叫做“非對稱加密算法”。與對稱加密算法不同,非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密 (privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。幾個驗證小例子Java 操作ssl socketkeytool證書與密鑰管理1)創(chuàng)建服務端密鑰庫keytool -genkey -keystore c:serverkey.jks -keyalg rsa -alias ssl1 -validity 700上述命令中:-genkey 生成密鑰對-keystore 指定密碼倉庫的文件地址-keyalg 密鑰所使用的算法-alias 密鑰別名.使用密鑰時是使用此別名來區(qū)分的-validity 密鑰有效期(天).從當前系統(tǒng)時間開始計算該命令成功后會要求輸入密碼倉庫的密碼.例如changeit然后是輸入你的個人信息.最后會要求輸入別名的密碼.例如changeit創(chuàng)建成功后.在建立服務端的SSL連接時用下述方法導入密鑰.String keyFile = serverkey.jksString keyFilePass = changeitKeyStore ks = KeyStore.getInstance(JKS);ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray();再利用該密碼倉庫來進行相應操作.2)將服務端的公鑰導出成證書keytool -export -alias ssl1 -file c:ssl1.cer -keystore c:serverkey.jks-export 導出導出成功后就得到了ssl1.cer這一份證書了.然后就是要將這一份證書分發(fā)給客戶端.客戶端有了該證書后就能與服務端建立安全連接了.3)生成客戶端的密鑰倉庫方法與1)類似keytool -genkey -keystore c:clientkey.jks -keyalg rsa -alias ssl1 -validity 7004)將*.cer導入到客戶端的密鑰倉庫里keytool -import -file c:ssl1.cer -keystore c:clientkey.jks-import 導入上述命令成功后會要求輸入客戶端密鑰倉庫的密碼.成功后在每次要訪問服務端之前還要將該證書添加到受信域中.系統(tǒng)會自動從受信域中檢查可用的證書來完成SSL連接通訊.String keyFile = clientkey.jksString keyFilePass = changeitSystem.setProperty(.ssl.trustStore,keyFile);System.setProperty(.ssl.trustStorePassword,keyFilePass);Java sslSocket 聊天實例-server-package com.test.http;/* *SSL Socket的服務器端 *Author lixingang */import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import .InetSocketAddress;import .SocketAddress;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import .ssl.KeyManagerFactory;import .ssl.SSLContext;import .ssl.SSLServerSocket;import .ssl.SSLServerSocketFactory;import .ssl.SSLSocket;public class SSLServer public static void startSSLServer() throws IOException int port = 16666;/ 監(jiān)聽端口String keyFile = c:testserverkey.jks;/ 密鑰庫文件String keyFilePass = changeit;/ 密鑰庫的密碼String keyPass = changeit;/ 密鑰別名的密碼SSLServerSocket sslsocket = null;/ 安全連接套接字KeyStore ks;/ 密鑰庫KeyManagerFactory kmf;/ 密鑰管理工廠SSLContext sslc = null;/ 安全連接方式/ 初始化安全連接的密鑰try ks = KeyStore.getInstance(JKS);ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray();/ 創(chuàng)建管理JKS密鑰庫的X.509密鑰管理器kmf = KeyManagerFactory.getInstance(SunX509);kmf.init(ks, keyPass.toCharArray();/構造SSL環(huán)境,指定SSL版本為3.0,也可以使用TLSv1,但是SSLv3更加常用sslc = SSLContext.getInstance(SSLv3);/初始化SSL環(huán)境。第二個參數是告訴JSSE使用的可信任證書的來源,/設置為null是從.ssl.trustStore中獲得證書。第三個參數是JSSE生成的隨機數,/這個參數將影響系統(tǒng)的安全性,設置為null是個好選擇,可以保證JSSE的安全性。sslc.init(kmf.getKeyManagers(), null, null); catch (KeyManagementException ex) catch (KeyStoreException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (NoSuchAlgorithmException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (CertificateException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (UnrecoverableKeyException e) / TODO Auto-generated catch blocke.printStackTrace();/ 用安全連接的工廠來創(chuàng)建安全連接套接字SSLServerSocketFactory sslssf = sslc.getServerSocketFactory();sslsocket = (SSLServerSocket) sslssf.createServerSocket();/ 創(chuàng)建并進入監(jiān)聽SocketAddress sa=new InetSocketAddress(localhost,port);sslsocket.bind(sa);System.out.println(Listening.);SSLSocket ssocket = (SSLSocket) sslsocket.accept();/ 接受客戶端的連接System.out.println(Server Connection OK);System.out.println(=);System.out.println();/ 以下代碼同socket通訊實例中的代碼BufferedReader socketIn = new BufferedReader(new InputStreamReader(ssocket.getInputStream();BufferedReader userIn = new BufferedReader(new InputStreamReader(System.in);PrintStream socketOut = new PrintStream(ssocket.getOutputStream();String s;while (true) System.out.println(Please wait client s message.);System.out.println();s = socketIn.readLine();System.out.println(Client Message: + s);if (s.trim().equals(BYE)break;System.out.print(Server Message: );s = userIn.readLine();socketOut.println(s);if (s.trim().equals(BYE)break;socketIn.close();socketOut.close();userIn.close();sslsocket.close();public static void main(String args) try startSSLServer(); catch (Exception e) System.out.println(Error: + e);-client-import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import .Socket;import .ssl.SSLSocketFactory;public class SSLClient static int port = 16666;public static void startSSLClient() throws IOException int port = 16666;/ 要連接的服務器端口String serverAdd = localhost;/ 要連接的服務器地址9try System.setProperty(.ssl.trustStore, c:testserverkey.jks);/ 設置可信任的密鑰倉庫System.setProperty(.ssl.trustStorePassword, changeit); / 設置可信任的密鑰倉庫的密碼SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault();/ 利用工廠來創(chuàng)建SSLSocket安全套接字Socket csocket = sslsf.createSocket(serverAdd, port);/ 創(chuàng)建并連接服務器System.out.println(Client OK);System.out.println(=);System.out.println();/ 以下代碼同socket通訊實例中的代碼BufferedReader socketIn = new BufferedReader(new InputStreamReader(csocket.getInputStream();/ 接受到的信息PrintStream socketOut = new PrintStream(csocket.getOutputStream();/ 要發(fā)送的信息BufferedReader userIn = new BufferedReader(new InputStreamReader(System.in);/ 用戶輸入信息String s;while (true) System.out.print(Client Message: );s = userIn.readLine();socketOut.println(s);if (s.trim().equals(BYE)break;else System.out.println(Please wait Server Message.);System.out.println();s = socketIn.readLine();System.out.println(Server Message: + s);if (s.trim().equals(BYE)break;socketIn.close();socketOut.close();userIn.close();csocket.close(); catch (Exception e) e.printStackTrace();public static void main(String args) try startSSLClient(); catch (Exception e) System.out.println(Error: + e);截圖是聊天客戶端發(fā)送“111”后,通過工具截獲的tcp數據包,可以發(fā)現數據已經被加密過了,上面有一部分是明文就是證書信息。用commview工具截獲瀏覽器訪問支付寶的TCP/IP包本節(jié)目的是驗證用https后網絡傳輸的是明文還是密文。首先介紹抓包工具。抓包軟件最優(yōu)秀(個人觀點)是wireshark,是很好的學習協議的軟件, 不過該軟件無法(官網上有)在windows上抓取回環(huán)包(就是通過發(fā)送給自己的包)。有點遺憾。找到一款可以抓回環(huán)包的工具commview。先介紹軟件的使用,這里只是簡單介紹,用到的話請看幫助文檔,很詳細。截獲本地回環(huán)包:1. 選中“l(fā)oopback”,啟動(如果抓取與外網連接的包 請選“本地連接”)2. 用socket(不帶ssl)寫一個聊天程序3. 輸入聊天信息(圖中輸入“你好”),此時在comview主界面顯示有TCP/IP包,雙擊一條記錄,顯示包內容。用該工具進行抓取支付寶連接的包,首先啟動該軟件,然后通過瀏覽器連接該網站/ 抓取結果如下圖。可見用https訪問網站時,在網絡上傳輸的數據時加密的。Java ssl socket 操作http 訪問支付寶(https)用ssl socket 操作http 訪問支付寶網站。首先用瀏覽器導出證書,然后用keytool將證書導入自己建立的一個信任庫(aa.jks)。public static void no_proxy_SSLsocket1() int port = 443;/ 要連接的服務器端口String serverAdd = ;/ 要連接的服務器地址try System.setProperty(.ssl.trustStore, c:aa.jks);/ 設置可信任的密鑰倉庫System.setProperty(.ssl.trustStorePassword, changeit); / 設置可信任的密鑰倉庫的密碼SSLSocketFactory sslsf = (SSLSocketFactory) SSLSocketFactory.getDefault();/ 利用工廠來創(chuàng)建SSLSocket安全套接字Socket csocket = sslsf.createSocket(serverAdd, port);/ 創(chuàng)建并連接服務器/ 以下代碼同socket通訊實例中的代碼BufferedReader socketIn = new BufferedReader(new InputStreamReader(csocket.getInputStream(), gb2312);/ 接受到的信息OutputStreamWriter bo= new OutputStreamWriter(csocket.getOutputStream();/ 要發(fā)送的信息StringBuffer sb = new StringBuffer(GET / HTTP/1.1);HttpUtils.appendRN(sb);sb.append(Host: );HttpUtils.appendRN(sb);sb.append(Connection: close);HttpUtils.appendRN(sb);HttpUtils.appendRN(sb);sb.append(Host:nn);bo.write(sb.toString();bo.flush();String d;while( d= socketIn.readLine()!=null)System.out.println(d);bo.close();csocket.close(); catch (UnknownHostException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (UnsupportedEncodingException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();測試結果:Java ssl socket 雙向認證總體思路步驟是1. 分別生成客戶端何服務器端密鑰庫keytool -genkey -keystore c:client.jks -keyalg rsa -alias ssl1 -validity 7
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 傳統(tǒng)食品企業(yè)2025年技術改造項目實施保障措施研究報告
- 四季特色飲品市場消費者購買行為與品牌關系研究報告001
- 中草藥足浴培訓課件
- 中國歷代疆域變化
- 周口紅色歷史文化課件
- 原地跑步課件作品介紹
- 中國冬夏氣溫課件大全
- 陳鶴琴教育思想與實踐體系
- 腫瘤患者血管評估體系構建
- 中國八音課件
- 汽車美容質量管理制度
- 躁動患者約束帶的使用及護理
- 云南省大理2025年八年級下學期語文期末模擬考試卷三套及答案
- 國家開放大學國開電大《統(tǒng)計與數據分析基礎》形考任務1-4 參考答案
- 風電居間合同協議書
- 浙江開放大學2025年《社會保障學》形考任務4答案
- 教育數字化轉型背景下的小學英語教學研究
- 醬料研發(fā)知識培訓課件
- 2025核輻射突發(fā)事件放射性污染人員洗消流程及技術要求
- 湖北省黃岡市黃梅縣2023-2024學年六年級下學期語文期末質量監(jiān)測試卷(含答案)
- 醫(yī)療廢物處置項目可行性研究報告(范文)
評論
0/150
提交評論