小程序員之歌
                      java先(我應該為它寫點什么了?。?/div>

                      tomcat 配置 SSL

                      筆者:何鋼


                      一、 配置環境


                      1.1? tomcat 簡介


                      tomcat 是 apache jakarta 的子項目之一,作為一個優秀的開源 web 應用服務器,全面支持 jsp1.2 以及 servlet2.3 規范。因其技術先進、性能穩定,而且免費,因而深受 java 愛好者的喜愛并得到了部分軟件開發商的認可,成為目前比較流行的 web 應用服務器。


                      1.2? ssl(server socket layer) 簡介


                      在網絡上信息在源 - 宿的傳遞過程中會經過其它的計算機。一般情況下,中間的計算機不會監聽路過的信息。但在使用網上銀行或者進行信用卡交易的時候有可能被監視,從而導致個人隱私的泄露。由于 internet 和 intranet 體系結構的原因,總有某些人能夠讀取并替換用戶發出的信息。隨著網上支付的不斷發展,人們對信息安全的要求越來越高。因此 netscape 公司提出了 ssl 協議,旨在達到在開放網絡 (internet) 上安全保密地傳輸信息的目的,這種協議在 web 上獲得了廣泛的應用。 之后 ietf(www.ietf.org) 對 ssl 作了標準化,即 rfc2246 ,并將其稱為 tls ( transport layer security ),從技術上講, tls1.0 與 ssl3.0
                      .3? ssl 工作原理

                      ssl協議使用不對稱加密技術實現會話雙方之間信息的安全傳遞。可以實現信息傳遞的保密性、完整性,并且會話雙方能鑒別對方身份。不同于常用的http協議,我們在與網站建立ssl安全連接時使用https協議,即采用https://ip:port/的方式來訪問。


                      當我們與一個網站建立https連接時,我們的瀏覽器與web server之間要經過一個握手的過程來完成身份鑒定與密鑰交換,從而建立安全連接。具體過程如下:



                      1. 用戶瀏覽器將其 ssl 版本號、加密設置參數、與 session 有關的數據以及其它一些必要信息發送到服務器。
                      2. 服務器將其 ssl 版本號、加密設置參數、與 session 有關的數據以及其它一些必要信息發送給瀏覽器,同時發給瀏覽器的還有服務器的證書。如果配置服務器的 ssl 需要驗證用戶身份,還要發出請求要求瀏覽器提供用戶證書。
                      3. 客戶端檢查服務器證書,如果檢查失敗,提示不能建立 ssl 連接。如果成功,那么繼續。
                      4. 客戶端瀏覽器為本次會話生成 pre-master secret ,并將其用服務器公鑰加密后發送給服務器。
                      5. 如果服務器要求鑒別客戶身份,客戶端還要再對另外一些數據簽名后并將其與客戶端證書一起發送給服務器。
                      6. 如果服務器要求鑒別客戶身份,則檢查簽署客戶證書的 ca 是否可信。如果不在信任列表中,結束本次會話。如果檢查通過,服務器用自己的私鑰解密收到的 pre-master secret ,并用它通過某些算法生成本次會話的 master secret 。
                      7. 客戶端與服務器均使用此 master secret 生成本次會話的會話密鑰 ( 對稱密鑰 ) 。在雙方 ssl 握手結束后傳遞任何消息均使用此會話密鑰。這樣做的主要原因是對稱加密比非對稱加密的運算量低一個數量級以上,能夠顯著提高雙方會話時的運算速度。
                      8. 客戶端通知服務器此后發送的消息都使用這個會話密鑰進行加密。并通知服務器客戶端已經完成本次 ssl 握手。
                      9. 服務器通知客戶端此后發送的消息都使用這個會話密鑰進行加密。并通知客戶端服務器已經完成本次 ssl 握手。
                      10. 本次握手過程結束,會話已經建立。雙方使用同一個會話密鑰分別對發送以及接受的信息進行加、解密。

                        1.4? 所需軟件包



                        • tomcat 4.0.2
                          用途: web server 。

                          下載: http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.3/bin/
                        • jsse 1.0,2
                          用途:用來產生 tocmcat 使用的秘鑰對 (keystore) 。

                          下載: http://java.sun.com/products/jsse/
                        • openssl 0.9.9.6 用途:用來產生ca證書、簽名并生成ie可導入的pkcs#12格式私鑰。
                          下載: http://www.openssl.org/
                        • genrsa [ 產生密鑰命令 ] ╟out [ 密鑰文件輸出路徑 ] 1024 [ 密鑰位數 ]


                          3. 生成待簽名的證書


                          openssl req -new -out mageca/ca-req.csr -key mageca/ca-key.pem


                          req[ 產生證書命令 ]-new[ 新生成 ]-out[ 證書文件輸出路徑 ]-key[ 私鑰文件路徑]


                          4. 用 ca 私鑰自簽名


                          二? ??????????? 配置步驟


                          2.1? 建立自己的 ca 證書


                          1. 在 openssl 的 apps 目錄下建立自己的 ca 目錄,例如: mageca


                          mkdir mageca


                          2. 生成 ca 密鑰


                          openssl genrsa -out mageca/ca-key.pem 1024

                        • openssl x509 -req -in mageca/ca-req.csr -out mageca/ca-cert.pem -signkey mageca/ca-key.pem -days 365
                        • x509[ 簽發 x509 證書命令] -req[ 輸入待簽發證書 ]-in[ 輸入待簽發證書文件路徑 ]-out[ 產生 x509 證書文件輸出路徑 ]-signkey[ 自簽發密鑰文件路徑 ]-days [證書有效期 ]╟ca [簽發跟證書 ]-cakey[ 根證書密鑰文件 ] ╟cacreateserial[ 創建序列號 ]


                          ?

                          [ 注 ] 將自動生成的 ca-key.srl 文件拷貝到創建的 ca 目錄下 . 。


                          ?

                          2.2? 配置 tomcat 4.x


                          ?

                          2.2.1? ????? 建立服務器證書


                          ?

                          [ 注 ] 在本文中用符號 "%jdk_home%" 來表示 jdk 的安裝位置,用符號 "%tcat_home%" 表示 tomcat 的安裝位置。


                          ?

                          1. ??????? 建立工作目錄


                          ?

                          在 %jdk_home% 的 bin 目錄下建立自己的 server 目錄,例如: server


                          ?

                          mkdir server


                          ?

                          2. ??????? 生成 server 密鑰對


                          ?

                          %jdk_home% /bin/keytool -genkey -alias tomcat_server -validity 365 -keyalg rsa -keysize 1024 -keypass changeit -storepass changeit -dname "cn=localhost, ou=department, o=company, l=beijing, st=beijing, c=cn" -keystore server/server_keystore


                          ?

                          ?-genkey[ 產生密鑰對 ]-alias[ 密鑰對別名 ]-validity[ 密鑰有效期 ]-keyalg[ 密鑰算法參數 ]-keysize[ 密鑰位數 ]-keypass[ 密鑰保護密碼 ]-storepass[ 存儲密碼 ]-dname[ 別名相關附加信息 ]-keystore[ 密鑰存儲文件路徑 ]

                      ?

                      [ 注 ]? -alias 后的 tomcat_server 是密鑰對的名字可替換為自己需要的名字;


                      -keypass 與 -storepass 后的 changeit 為保護密碼必須 6 位,將其替換為你的密碼即可;


                      -dname 為包含的 server 信息。其中 cn 是服務器的名字一定要與 web 服務器中設置的一樣。


                      3. ??????? 生成待簽名證書


                      %jdk_home% /bin/keytool -certreq -alias tomcat_server -sigalg md5withrsa -file server/server.csr -keypass changeit -keystore server/server_keystore -storepass changeit


                      -certreq[ 產生待簽名證書 ]-alias[ 證書別名 ]-sigalg[ 證書算法參數 ]-file [ 產生文件輸出路徑 ]-keypass[ 密鑰保護密碼 ]-keystore[ 存儲文件路徑 ]-storepass[ 存儲密碼]

                      4. ??????? 用 ca 私鑰簽名


                      openssl x509 -req -in server/server.csr -out server/server-cert.pem -ca mageca/ca-cert.pem -cakey mageca/ca-key.pem -days 365


                      [注] 先將生成的 server.csr 文件 ftp 到 linux 上 openssl 的目錄下的 server 子目錄中, ftp 的傳輸模式應設為 bin 模式,以下同。


                      2.2.2? ????? 將 ca 根證書和服務器證書導入 tomcat


                      1. ??????? 導入 ca 根證書


                      將 ca 根證書( ca-cert.pem ) ftp 到 java 工作目錄下的 ca 子目錄中


                      %jdk_home%/bin/keytool -import -v -trustcacerts -storepass changeit -alias my_ca_root -file ca/ca-cert.pem -keystore %jdk_home%/jre/lib/security/cacerts

                      -import[ 導入命令 ]-v ╟trustcacerts[ 導入信任證書 ] ╟storepass[ 存儲密碼 ]-alias[ 證書別名 ]-file[ 證書文件路徑 ]-keystore[ 導入文件路徑 ]


                      [ 注 ] 此處的 -storepass 為默認的“ changeit ”。 -alias 為 ca 根證書的別名。


                      2. ??????? 導入服務器證書


                      將服務器證書( server-cert.pem ) ftp 到 java 工作目錄下的 server 子目錄中。


                      %jdk_home%/bin/keytool -import -v -trustcacerts -storepass changeit -alias tomcat_server -file server/server-cert.pem -keystore server/server_keystore


                      [ 注 ] 此時的 -storepass 為生成證書時輸入密碼。 -alias 為服務器證書的別名。

                      3. ??????? 查看證書


                      查看ca證書


                      keytool -list -keystore %jdk_home%/jre/lib/security/cacerts


                      查看服務器證書


                      keytool -list -keystore server/server_keystore


                      2.2.3? ????? 修改 tomcat 的配置文件


                      修改 conf 目錄下 server.xml 文件找到以下內容去掉其注釋并修改。


                      <!-- define an ssl http/1.1 connector on port 8443 -->


                      ??? <connector classname="org.apache.catalina.connector.http.httpconnector"


                      ?????????????? port="8443" minprocessors="5" maxprocessors="75"


                      ?????????????? enablelookups="false"


                      ?????? ?????? acceptcount="10" debug="0" scheme="https" secure="true">


                      ????? <factory classname="org.apache.catalina.net.sslserversocketfactory"


                      ?????????????? clientauth="true" protocol="tls"


                      keystorefile="c:/jakarta-tomcat-4.0-b1/conf/server_keystore" keystorepass="780608"

                      />


                      ??? </connector>


                      然后把文件 server/ server_keystore 復制到目錄 %tcat_home%\conf\ 下


                      2.3? 配置 ie 客戶端


                      2.3.1? ????? 建立 client 證書


                      1. ??????? ?openssl 的 apps 目錄下建立自己的 client 目錄,例如: client


                      2. ????????????????? 生成 client 密鑰對


                      openssl genrsa -out client/ client ╟key.pem 1024


                      3. ????????????????? 生成待簽名的證書


                      openssl req -new -out client/ client-req.csr -key client/ client-key.pem

                      4. ????????????????? 用 ca 私鑰簽名


                      openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey c lient/client-key.pem -ca ca/ca-cert.pem -cakey ca/ca-key.pem -cacreateserial -days 365


                      5. ????????????????? 生成 client 端可以導入的個人證書


                      openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12


                      pkcs12[ 生成pks12格式證書命令 ]-export[ 導出文件 ]-clerts[ 僅導出client證書 ]-in[ 輸入的client證書文件路徑 ]-inkey[ client證書密鑰文件路徑 ]-out[ 導出pks12格式文件路徑]


                      2.3.2? ????? 將 ca 證書與 client 證書導入 ie


                      1. ??????? 導入 ca 根證書

                      將已經 ftp 到 java 工作目錄下 ca 子目錄中的 ca-cert.pem 改名為 ca-cert.cer ;


                      在 client 端的 ie 中使用 < 工具 >,< internet 選項 >,< 內容 >,< 證書 >,< 導入 >, 把我們生成的 ca 根證書導入,使其成為用戶信任的 ca 。


                      2. ??????? 導入 client 證書


                      將 client 證書( client.p12 ) ftp 到 client 端,把 client.p12 導入到 client 端的 ie 中作為 client 證書,導入過程同上

                      三? ??????????? 用 ie 瀏覽器使用 ssl 協議訪問 tomcat


                      1. ??????? 執行 %tcat_home%/bin/startup.bat 啟動 tomcat 4.x ;


                      2. ??????? 在 ie 瀏覽器的地址欄中輸入 https://localhost:8443 ,如果前面的操作都正確,應該可以看到 tomcat 的歡迎頁面。同時狀態欄上的小鎖處于閉合狀態,表示您已經成功地與服務器建立了要求客戶端驗證的 ssl 安全連接。


                      ?


                      posted on 2006-07-18 16:40 liujg 閱讀(755) 評論(0)  編輯  收藏

                      新用戶注冊  刷新評論列表  

                      只有注冊用戶登錄后才能發表評論。


                      網站導航:
                      博客園   IT新聞   Chat2DB   C++博客   博問   管理
                       

                      Powered by:
                      BlogJava
                      Copyright © liujg

                      <2025年5月>
                      日一二三四五六
                      27282930123
                      45678910
                      11121314151617
                      18192021222324
                      25262728293031
                      1234567

                      導航

                      • BlogJava
                      • 首頁
                      • 新隨筆
                      • 聯系
                      • 聚合
                      • 管理

                      統計

                      • 隨筆 - 10
                      • 文章 - 40
                      • 評論 - 6
                      • 引用 - 0

                      常用鏈接

                      • 我的隨筆
                      • 我的評論
                      • 我的參與
                      • 最新評論

                      留言簿(1)

                      • 給我留言
                      • 查看公開留言
                      • 查看私人留言

                      隨筆分類

                      • js (rss)
                      • linux(1) (rss)
                      • strus2 (rss)
                      • Struts2 Tag語法(轉) (rss)

                      隨筆檔案

                      • 2014年12月 (1)
                      • 2011年9月 (1)
                      • 2011年5月 (2)
                      • 2011年1月 (1)
                      • 2007年11月 (1)
                      • 2007年10月 (1)
                      • 2007年5月 (1)
                      • 2006年12月 (1)

                      文章分類

                      • Java基礎(10) (rss)
                      • JDBC(1) (rss)
                      • js(1) (rss)
                      • portlet(1) (rss)
                      • Tapestry(1) (rss)
                      • 數據庫(9) (rss)
                      • 算法(1) (rss)

                      文章檔案

                      • 2011年10月 (1)
                      • 2011年5月 (2)
                      • 2011年1月 (1)
                      • 2010年12月 (1)
                      • 2010年8月 (1)
                      • 2010年7月 (1)
                      • 2010年5月 (2)
                      • 2010年4月 (1)
                      • 2009年7月 (1)
                      • 2009年4月 (1)
                      • 2009年3月 (2)
                      • 2009年1月 (2)
                      • 2008年12月 (1)
                      • 2008年11月 (1)
                      • 2008年7月 (3)
                      • 2008年4月 (2)
                      • 2008年3月 (2)
                      • 2008年1月 (2)
                      • 2007年11月 (3)
                      • 2007年7月 (1)
                      • 2007年6月 (4)
                      • 2007年1月 (1)
                      • 2006年7月 (4)

                      相冊

                      • me

                      收藏夾

                      • rmi(5) (rss)

                      boddiy

                      • boddi's blog

                      搜索

                      •  

                      最新評論

                      • 1.?re: oracle 取子串(轉)
                      • @aaa
                        別處轉來的,具體的不懂。
                      • --liujg
                      • 2.?re: oracle 取子串(轉)[未登錄]
                      • 樓主,你說的substring是在oracle哪個版本的???能用嗎???
                        charindex又是哪里的函數,能用嗎????搞笑
                      • --aaa
                      • 3.?re: oracle 取子串(轉)[未登錄]
                      • kao
                      • --aaa
                      • 4.?re: prototype詳解(轉)
                      • 郁悶,.NET的!,JAVA里面有MemberwiseClone這個方法么。怎么用JAVA搞原型模式呢?
                      • --hehei
                      • 5.?re: 轉載一篇jms的文章
                      • Thanks for you kind to share the article~~
                      • --lingruoxu

                      閱讀排行榜

                      • 1.?java程序員的5個好習慣()(806)
                      • 2.?java 關閉IE(586)
                      • 3.?OERR: ORA-12519(563)
                      • 4.?doGet()和doPost()的區別(轉)(482)
                      • 5.?看了下java核心技術中的代理,還是很暈(398)

                      評論排行榜

                      • 1.?執行./startup.sh,或者./shutdown.sh的時候,爆出了Permission denied(0)
                      • 2.?submit()和onsubmit()的區別(轉)(0)
                      • 3.?doGet()和doPost()的區別(轉)(0)
                      • 4.?轉載 Vim 基本用法(0)
                      • 5.?OERR: ORA-12519(0)
                      狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频
                      主站蜘蛛池模板: 宁夏| 札达县| 上饶县| 河东区| 峨眉山市| 海淀区| 永丰县| 都昌县| 舞钢市| 溧阳市| 阳江市| 邵阳市| 呼和浩特市| 江津市| 揭阳市| 长治县| 昌吉市| 剑阁县| 临沭县| 贵州省| 肃宁县| 阜南县| 湄潭县| 石嘴山市| 阳新县| 江川县| 繁峙县| 信丰县| 中牟县| 鄄城县| 习水县| 靖边县| 遵义县| 大理市| 新兴县| 乐陵市| 鄂托克前旗| 阜宁县| 鄂尔多斯市| 巨鹿县| 平远县|