瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          tomcat https

          Posted on 2011-06-25 23:06 瘋狂 閱讀(1444) 評論(0)  編輯  收藏 所屬分類: java 、java安全

          HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL,因此加密

          的詳細內(nèi)容就需要SSL
            SSL協(xié)議的握手過程
          SSL 協(xié)議既用到了公鑰加密技術(shù)又用到了對稱加密技術(shù),對稱加密技術(shù)雖然比公鑰加密技術(shù)的速度快,可是公鑰加密技術(shù)提供了更好的身份認證技術(shù)。SSL 的握手協(xié)議非常有效的讓客戶和服

          務(wù)器之間完成相互之間的身份認證,其主要過程如下:   
          ①客戶端的瀏覽器向服務(wù)器傳送客戶端 SSL 協(xié)議的版本號,加密算法的種類,產(chǎn)生的隨機數(shù),以及其他服務(wù)器和客戶端之間通訊所需要的各種信息。   
          ②服務(wù)器向客戶端傳送 SSL 協(xié)議的版本號,加密算法的種類,隨機數(shù)以及其他相關(guān)信息,同時服務(wù)器還將向客戶端傳送自己的證書。   
          ③客戶利用服務(wù)器傳過來的信息驗證服務(wù)器的合法性,服務(wù)器的合法性包括:證書是否過期,發(fā)行服務(wù)器證書的 CA 是否可靠,發(fā)行者證書的公鑰能否正確解開服務(wù)器證書的“發(fā)行者的數(shù)字

          簽名”,服務(wù)器證書上的域名是否和服務(wù)器的實際域名相匹配。如果合法性驗證沒有通過,通訊將斷開;如果合法性驗證通過,將繼續(xù)進行第四步。   
          ④用戶端隨機產(chǎn)生一個用于后面通訊的“對稱密碼”,然后用服務(wù)器的公鑰(服務(wù)器的公鑰從步驟②中的服務(wù)器的證書中獲得)對其加密,然后將加密后的“預(yù)主密碼”傳給服務(wù)器。   
          ⑤如果服務(wù)器要求客戶的身份認證(在握手過程中為可選),用戶可以建立一個隨機數(shù)然后對其進行數(shù)據(jù)簽名,將這個含有簽名的隨機數(shù)和客戶自己的證書以及加密過的“預(yù)主密碼”一起傳

          給服務(wù)器。   
          ⑥如果服務(wù)器要求客戶的身份認證,服務(wù)器必須檢驗客戶證書和簽名隨機數(shù)的合法性,具體的合法性驗證過程包括:客戶的證書使用日期是否有效,為客戶提供證書的CA 是否可靠,發(fā)行CA

          的公鑰能否正確解開客戶證書的發(fā)行 CA 的數(shù)字簽名,檢查客戶的證書是否在證書廢止列表(CRL)中。檢驗如果沒有通過,通訊立刻中斷;如果驗證通過,服務(wù)器將用自己的私鑰解開加密的

          “預(yù)主密碼”,然后執(zhí)行一系列步驟來產(chǎn)生主通訊密碼(客戶端也將通過同樣的方法產(chǎn)生相同的主通訊密碼)。   
          ⑦服務(wù)器和客戶端用相同的主密碼即“通話密碼”,一個對稱密鑰用于 SSL 協(xié)議的安全數(shù)據(jù)通訊的加解密通訊。同時在 SSL 通訊過程中還要完成數(shù)據(jù)通訊的完整性,防止數(shù)據(jù)通訊中的任何

          變化。   
          ⑧客戶端向服務(wù)器端發(fā)出信息,指明后面的數(shù)據(jù)通訊將使用的步驟⑦中的主密碼為對稱密鑰,同時通知服務(wù)器客戶端的握手過程結(jié)束。   
          ⑨服務(wù)器向客戶端發(fā)出信息,指明后面的數(shù)據(jù)通訊將使用的步驟⑦中的主密碼為對稱密鑰,同時通知客戶端服務(wù)器端的握手過程結(jié)束。   
          ⑩SSL 的握手部分結(jié)束,SSL 安全通道的數(shù)據(jù)通訊開始,客戶和服務(wù)器開始使用相同的對稱密鑰進行數(shù)據(jù)通訊,同時進行通訊完整性的檢驗。

           


          下面是在tomcat下實現(xiàn)https,使用jdk自帶的keytool工具生成自簽名證書。

          1 生成keystore文件,keystore文件用來存儲密鑰和證書
             keystore的詳細參數(shù)可使用 可使用keystore命令查看。
            
          keytool -genkeypair -keyalg rsa -keysize 2048 -sigalg sha1withrsa -validity 3600 -alias www.joe.com -keystore e:\ssl\joe.keystore
          輸入keystore密碼:
          再次輸入新密碼:
          您的名字與姓氏是什么?
            [Unknown]:  www.joe.com
          您的組織單位名稱是什么?
            [Unknown]:  joe
          您的組織名稱是什么?
            [Unknown]:  joe
          您所在的城市或區(qū)域名稱是什么?
            [Unknown]:  bj
          您所在的州或省份名稱是什么?
            [Unknown]:  bj
          該單位的兩字母國家代碼是什么
            [Unknown]:  cn
          CN=www.joe.com, OU=joe, O=joe, L=bj, ST=bj, C=cn 正確嗎?
            [否]:  y

          輸入<www.joe.com>的主密碼
                  (如果和 keystore 密碼相同,按回車):
          2 導(dǎo)出自簽名證書。正是平臺需要導(dǎo)出csr文件并去權(quán)威的ca認證機構(gòu)獲取受信任證書,一般是收費的。
             keytool -exportcert -alias www.joe.com -keystore e:\ssl\joe.keystore -file e:\ssl\joe.cer -rfc
          輸入keystore密碼:
          保存在文件中的認證 <e:\ssl\joe.cer>
          下面配置tomcat(server.xml)使其支持https.
          <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
                         maxThreads="150" scheme="https" secure="true"
                         clientAuth="false" sslProtocol="TLS"  keystoreFile="conf/joe.keystore" keystorePass="123456"/>
             

          3 修改操作系統(tǒng)host文件,添加127.0.0.1 www.joe.com

          4 新建web應(yīng)用httpstest
          并添加indexjsp:
           <body>
              <%
               for(Enumeration en = request.getAttributeNames();en.hasMoreElements();){
               String name = (String)en.nextElement();
               out.println(name);
               out.println("="+request.getAttribute(name));
               out.println();
               }
              %>
            </body>

          5 為了讓瀏覽器信任我們的證書,需要在瀏覽器導(dǎo)入我們的證書為信任根證書。
          6 訪問:https://www.joe.com/httpstest
          輸出:
          javax.servlet.request.ssl_session =4e05eb849ac41a45b56725488b68c28cc8c2ea94e2ec599852e1665297b2822b
          javax.servlet.request.key_size =128
          javax.servlet.request.cipher_suite =SSL_RSA_WITH_RC4_128_MD5 (通訊的加密信息,由瀏覽器和服務(wù)器協(xié)商確定)。

           

          主站蜘蛛池模板: 探索| 年辖:市辖区| 内江市| 平山县| 新绛县| 高唐县| 蒙城县| 东城区| 上高县| 陈巴尔虎旗| 临西县| 宜州市| 太保市| 万源市| 兴隆县| 洞口县| 平南县| 乐都县| 时尚| 同德县| 合江县| 确山县| 中牟县| 呼伦贝尔市| 年辖:市辖区| 百色市| 江阴市| 台北县| 新兴县| 上犹县| 巴青县| 文登市| 临泽县| 安溪县| 徐闻县| 华亭县| 策勒县| 马鞍山市| 小金县| 会宁县| 德令哈市|