tomcat 配置 SSL

          筆者:何鋼


          一、 配置環(huán)境


          1.1? tomcat 簡(jiǎn)介


          tomcat apache jakarta 的子項(xiàng)目之一,作為一個(gè)優(yōu)秀的開(kāi)源 web 應(yīng)用服務(wù)器,全面支持 jsp1.2 以及 servlet2.3 規(guī)范。因其技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi),因而深受 java 愛(ài)好者的喜愛(ài)并得到了部分軟件開(kāi)發(fā)商的認(rèn)可,成為目前比較流行的 web 應(yīng)用服務(wù)器。


          1.2? ssl(server socket layer) 簡(jiǎn)介


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

          ssl協(xié)議使用不對(duì)稱加密技術(shù)實(shí)現(xiàn)會(huì)話雙方之間信息的安全傳遞。可以實(shí)現(xiàn)信息傳遞的保密性、完整性,并且會(huì)話雙方能鑒別對(duì)方身份。不同于常用的http協(xié)議,我們?cè)谂c網(wǎng)站建立ssl安全連接時(shí)使用https協(xié)議,即采用https://ip:port/的方式來(lái)訪問(wèn)。


          當(dāng)我們與一個(gè)網(wǎng)站建立https連接時(shí),我們的瀏覽器與web server之間要經(jīng)過(guò)一個(gè)握手的過(guò)程來(lái)完成身份鑒定與密鑰交換,從而建立安全連接。具體過(guò)程如下:



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

            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
              用途:用來(lái)產(chǎn)生 tocmcat 使用的秘鑰對(duì) (keystore)

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


              3. 生成待簽名的證書


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


              req[ 產(chǎn)生證書命令 ]-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[ 簽發(fā) x509 證書命令] -req[ 輸入待簽發(fā)證書 ]-in[ 輸入待簽發(fā)證書文件路徑 ]-out[ 產(chǎn)生 x509 證書文件輸出路徑 ]-signkey[ 自簽發(fā)密鑰文件路徑 ]-days [證書有效期 ]╟ca [簽發(fā)跟證書 ]-cakey[ 根證書密鑰文件 ] ╟cacreateserial[ 創(chuàng)建序列號(hào) ]


              ?

              [ ] 將自動(dòng)生成的 ca-key.srl 文件拷貝到創(chuàng)建的 ca 目錄下 .


              ?

              2.2? 配置 tomcat 4.x


              ?

              2.2.1? ????? 建立服務(wù)器證書


              ?

              [ ] 在本文中用符號(hào) "%jdk_home%" 來(lái)表示 jdk 的安裝位置,用符號(hào) "%tcat_home%" 表示 tomcat 的安裝位置。


              ?

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


              ?

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


              ?

              mkdir server


              ?

              2. ??????? 生成 server 密鑰對(duì)


              ?

              %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[ 產(chǎn)生密鑰對(duì) ]-alias[ 密鑰對(duì)別名 ]-validity[ 密鑰有效期 ]-keyalg[ 密鑰算法參數(shù) ]-keysize[ 密鑰位數(shù) ]-keypass[ 密鑰保護(hù)密碼 ]-storepass[ 存儲(chǔ)密碼 ]-dname[ 別名相關(guān)附加信息 ]-keystore[ 密鑰存儲(chǔ)文件路徑 ]

          ?

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


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


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


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


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


          -certreq[ 產(chǎn)生待簽名證書 ]-alias[ 證書別名 ]-sigalg[ 證書算法參數(shù) ]-file [ 產(chǎn)生文件輸出路徑 ]-keypass[ 密鑰保護(hù)密碼 ]-keystore[ 存儲(chǔ)文件路徑 ]-storepass[ 存儲(chǔ)密碼]

          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 的傳輸模式應(yīng)設(shè)為 bin 模式,以下同。


          2.2.2? ????? ca 根證書和服務(wù)器證書導(dǎo)入 tomcat


          1. ??????? 導(dǎo)入 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[ 導(dǎo)入命令 ]-v ╟trustcacerts[ 導(dǎo)入信任證書 ] ╟storepass[ 存儲(chǔ)密碼 ]-alias[ 證書別名 ]-file[ 證書文件路徑 ]-keystore[ 導(dǎo)入文件路徑 ]


          [ ] 此處的 -storepass 為默認(rèn)的“ changeit ”。 -alias ca 根證書的別名。


          2. ??????? 導(dǎo)入服務(wù)器證書


          將服務(wù)器證書( 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


          [ ] 此時(shí)的 -storepass 為生成證書時(shí)輸入密碼。 -alias 為服務(wù)器證書的別名。

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


          查看ca證書


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


          查看服務(wù)器證書


          keytool -list -keystore server/server_keystore


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


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


          <!-- 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 復(fù)制到目錄 %tcat_home%\conf\


          2.3? 配置 ie 客戶端


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


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


          2. ????????????????? 生成 client 密鑰對(duì)


          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 端可以導(dǎo)入的個(gè)人證書


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


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


          2.3.2? ????? ca 證書與 client 證書導(dǎo)入 ie


          1. ??????? 導(dǎo)入 ca 根證書

          將已經(jīng) ftp java 工作目錄下 ca 子目錄中的 ca-cert.pem 改名為 ca-cert.cer


          client 端的 ie 中使用 < 工具 >,< internet 選項(xiàng) >,< 內(nèi)容 >,< 證書 >,< 導(dǎo)入 >, 把我們生成的 ca 根證書導(dǎo)入,使其成為用戶信任的 ca


          2. ??????? 導(dǎo)入 client 證書


          client 證書( client.p12 ftp client 端,把 client.p12 導(dǎo)入到 client 端的 ie 中作為 client 證書,導(dǎo)入過(guò)程同上

          ? ??????????? ie 瀏覽器使用 ssl 協(xié)議訪問(wèn) tomcat


          1. ??????? 執(zhí)行 %tcat_home%/bin/startup.bat 啟動(dòng) tomcat 4.x


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


          ?


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


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          收藏夾

          boddiy

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 全椒县| 巴彦县| 应用必备| 松溪县| 靖宇县| 敖汉旗| 鹤岗市| 长乐市| 石狮市| 连城县| 衡东县| 楚雄市| 东乡族自治县| 新源县| 荔波县| 晴隆县| 吉隆县| 襄樊市| 鹤岗市| 温宿县| 岳阳县| 温州市| 保亭| 隆安县| 张家口市| 林口县| 正蓝旗| 咸宁市| 喀什市| 德安县| 措美县| 正镶白旗| 隆子县| 勃利县| 高密市| 凤庆县| 弥渡县| 红原县| 墨竹工卡县| 海淀区| 汽车|