天天看點

tomcat實作SSL單向認證(tomcat5)

轉自:http://cnzhangleon.lofter.com/post/4b3a3_855ca

一、基礎知識

 Tomcat 簡介

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

 https(Secure Hypertext Transfer Protocol)安全超文本傳輸協定 簡介

https是以安全為目标的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層。

它是由Netscape開發并内置于其浏覽器中,旨在達到在開放網絡(Internet)上安全保密地傳輸資訊的目的。

用于對資料進行壓縮和解壓操作,并傳回網絡上傳送回的結果。HTTPS實際上應用了Netscape的完全套接字層(SSL)作為HTTP應用層的子層。(HTTPS使用端口443,而不是象HTTP那樣使用端口80來和TCP/IP進行通信。)SSL使用40 位關鍵字作為RC4流加密算法,這對于商業資訊的加密是合适的。HTTPS和SSL支援使用X.509數字認證,如果需要的話使用者可以确認發送者是誰。。

SSL (Secure Socket Layer)簡介

為Netscape所研發,用以保障在Internet上資料傳輸之安全,利用資料加密(Encryption)技術,可確定資料在網絡上之傳輸過程中不會被截取及竊聽。

具體分析見: 點選打開連結

 二、tomcat實作SSL配置

 第一步 生成KeyStore

keytool -genkey -alias tomcat -keyalg RSA –keysize 1024 –validity 730 -keystore D:\server.keystore

生成.keystore檔案在 使用者目錄下

輸入keystore密碼: ************

您的名字與姓氏是什麼?

[Unknown]: localhost

您的組織機關名稱是什麼?

[Unknown]: dept

您的組織名稱是什麼?

[Unknown]: Inc

您所在的城市或區域名稱是什麼?

[Unknown]: bj

您所在的州或省份名稱是什麼?

[Unknown]: bj

該機關的兩字母國家代碼是什麼

[Unknown]: CN

CN=localhost, OU= dept, O= Inc, L=bj, ST=bj, C=CN 正确嗎?

[否]: Y

輸入的主密碼

(如果和 keystore 密碼相同,按回車):*************

注意: localhost,是網站的域名或者ip,根據實際情況填寫,比如 www.baidu.com  192.168.0.85  否則會出現證書上的名稱無效,或者與站點名稱不比對。

 建議:将生成的 server.keystore檔案,放到%TOMCAT_HOME%或其子目錄中(如:%TOMCAT_HOME%/conf)

(其實放哪裡都一樣,隻是放到%TOMCAT_HOME%裡面會友善一些)

 第二步 修改server.xml

  修改%TOMCAT_HOME%/conf/server.xml

去掉下面SSL HTTP那個注釋,修改為如下:

注意不同版本的修改代碼不同,具體形式見注釋!!!!

Xml代碼(例子)

<Connector port="8443" protocol="HTTP/1.1" connectionTimeout="20000"  

             SSLEnabled="true" 

             maxThreads="150" 

             scheme="https" 

             secure="true" 

             clientAuth="false" 

             sslProtocol="TLS"   

             keystoreFile="/conf/server.keystore"

             keystorePass="changeit" />             

 keystoreFile 是server.keystore放置的位置,keystorePass是密碼 (預設密碼是changeit)

第三步

重新開機Tomcat,通路位址https://ip:8443/

(附錄:)tomcat的配置檔案SSL部分詳細說明

配置檔案server.xml,SSL部分:

Xml代碼

19           <!– A "Connector" represents an endpoint by which requests are received  

20                and responses are returned. Documentation at :  

21                Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)  

22                Java AJP  Connector: /docs/config/ajp.html  

23                APR (HTTP/AJP) Connector: /docs/apr.html  

24                Define a non-SSL HTTP/1.1 Connector on port 8080  

25           –> 

26           <Connector  port="8443" maxHttpHeaderSize="8192" 

27               maxThreads="150" 

28               minSpareThreads="25" 

29               maxSpareThreads="75" 

30               enableLookups="false" 

31               disableUploadTimeout="true" 

32               acceptCount="100" 

33               scheme="https" 

34               secure="true" 

35               clientAuth="false" 

36               sslProtocol="TLS" 

37               keystoreFile="D:/Tomcat/conf/tomcatKey.keystore" 

38               keystorePass="changeit" 

39               algorithm="SunX509" 

40           /> 

41           <!-- A "Connector" represents an endpoint by which requests are received 

42                and responses are returned. Documentation at : 

43                Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) 

44                Java AJP  Connector: /docs/config/ajp.html 

45                APR (HTTP/AJP) Connector: /docs/apr.html 

46                Define a non-SSL HTTP/1.1 Connector on port 8080 

47           --> 

48           <Connector  port="8443" maxHttpHeaderSize="8192" 

49               maxThreads="150" 

50               minSpareThreads="25" 

51               maxSpareThreads="75" 

52               enableLookups="false" 

53               disableUploadTimeout="true" 

54               acceptCount="100" 

55               scheme="https" 

56               secure="true" 

57               clientAuth="false" 

58               sslProtocol="TLS" 

59               keystoreFile="D:/Tomcat/conf/tomcatKey.keystore" 

60               keystorePass="changeit" 

61               algorithm="SunX509" 

62           /> 

屬性說明:

 port:     這個port屬性(預設值是8443)是 TCP/IP端口數位,Tomcat在其上監聽安全連接配接。你可以把它更改成任何你願意要的數值(如預設的https通信,數目是443)。不過,在許多作業系統中,要想在比1024小的端口數位上運作Tomcat,需要特殊的設定(它超出了這個文檔資料的範圍)。

redirectPort: 如果你在這裡更改端口數值,你還必須更改在non-SSL連接配接器上的redirectPort 這個屬性特定的值。這允許Tomcat自動地redirect那些試圖通路有安全限制頁面的使用者,指明根據 Servlet 2.4 Specification要求,SSL是必需的

clientAuth: 如果你想要Tomcat要求所有的SSL客戶在使用這個socket時出示使用者認證書,把這個值設定為 true 。如果你想要Tomcat要求出示使用者認證書,但是如果沒有認證書也可以, 就把這個值設定為want 。

keystoreFile: 如果你産生的keystore檔案不在Tomcat期望的預設地方(一個叫做.keystore 的檔案在Tomcat運作的主目錄),就添加這個屬性。你可以指定一個絕對路徑名稱, 或者一個由$CATALINA_BASE環境變量而派生的相對路徑名稱。

keystorePass: 如果你使用一個不同的keystore(以及認證書)密碼,而不是Tomcat期望的密碼 (就是changeit),添加這個元素。

keystoreType: 如果使用一個PKCS12 keystore的話,就添加這個element。 有效的值是JKS 和 PKCS12

sslProtocol: 要在這個socket上被使用的加密/解密協定。如果你在使用Sun的JVM,我們不提倡更改 這個值。據報道,TLS協定的IBM's 1.4.1 實作與一些通用的浏覽器不相容。 如果是這樣,就使用value SSL

ciphers: 這個socket允許使用的由逗号分隔開的加密密碼列單。預設的情況下,任何可用的密碼都允許被使用。

algorithm: 可用的X509算法。預設是Sun的實作( SunX509 )。 對于IBM JVMs,你應該使用值 IbmX509。對于其他賣主,查閱JVM文檔資料來 找正确的值。

truststoreFile: 用來驗證使用者認證書的TrustStore檔案。

truststorePass: 通路TrustStore的密碼。預設值就是keystorePass的值。

truststoreType: 如果你在使用與KeyStore不同格式的TrustStore,添加這個元素。 合法的值是JKS和PKCS12

keyAlias: 如果 keystore 裡面有多個 key,你可以為用這個選項為加入的 key 起一個名字。 如果沒有指定名字,使用時 keystore 内的第一個 key 将會被使用