在命令提示符窗口,進入Tomcat目錄,執行以下命令:
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
通過以上步驟生成server.keystore證書文件、
注意: localhost,是網站的域名或者ip,根據實際情況填寫,比如 www.baidu.com 192.168.0.85 否則會出現證書上的名稱無效,或者與站點名稱不匹配。
將servlet.xml一下的的註釋打開(最好拷貝此段)
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="server.keystore"
keystorePass="changeit"/>
到這一步訪問https;//ip:8443/item
一般Tomcat默認的SSL端口號是8443,但是對於SSL標準端口號是443,這樣在訪問網頁的時候,直接使用https而不需要輸入端口號就可以訪問,如https://loalhost/webserver
想要修改端口號,需要修改Tomcat的server.xml文件:
1.non-SSL HTTP/1.1 Connector定義的地方,一般如下:
<Connector port="80" maxHttpHeaderSize="8192"
maxThreads="500" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
將其中的redirectPort端口號改爲:443
2.SSL HTTP/1.1 Connector定義的地方,修改端口號爲:443,如下:
<Connector
port="443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100" scheme="https"
secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/tomcat.keystore"
keystorePass="123456" />
3.AJP 1.3 Connector定義的地方,修改redirectPort爲443,如下:
<Connector port="8009"
enableLookups="false" redirectPort="443" protocol="AJP/1.3" />
重新啓動Tomcat就可以了。到這一步可以形成訪問方式 http://ip/item
到tomcat下面的webapps下面的ROOT下面的index.jsp文件的內容
<?xml version="1.0" encoding="ISO-8859-1"?>
<%response.sendRedirect("/item");%>
修改web.xml文件的內容
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
刪除lib目錄下的lib文件
重啓Tomcat服務器,在這一步可以直接通過https:ip來訪問項目
(附錄:)tomcat的配置文件SSL部分詳細說明
配置文件server.xml,SSL部分:
- <!-- A "Connector" represents an endpoint by which requests are received
- and responses are returned. Documentation at :
- Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
- Java AJP Connector: /docs/config/ajp.html
- APR (HTTP/AJP) Connector: /docs/apr.html
- Define a non-SSL HTTP/1.1 Connector on port 8080
- -->
- <Connector port="8443" maxHttpHeaderSize="8192"
- maxThreads="150"
- minSpareThreads="25"
- maxSpareThreads="75"
- enableLookups="false"
- disableUploadTimeout="true"
- acceptCount="100"
- scheme="https"
- secure="true"
- clientAuth="false"
- sslProtocol="TLS"
- keystoreFile="D:/Tomcat/conf/tomcatKey.keystore"
- keystorePass="changeit"
- algorithm="SunX509"
- />
<!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="D:/Tomcat/conf/tomcatKey.keystore" keystorePass="changeit" algorithm="SunX509" />
屬性說明:
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 將會被使用。