轉自: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 将會被使用