Tomcat配置成https方式訪問(單向認證)

在命令提示符窗口,進入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部分:
Xml代碼 複製代碼
  1.     <!-- A "Connector" represents an endpoint by which requests are received   
  2.          and responses are returned. Documentation at :   
  3.          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)   
  4.          Java AJP  Connector: /docs/config/ajp.html   
  5.          APR (HTTP/AJP) Connector: /docs/apr.html   
  6.          Define a non-SSL HTTP/1.1 Connector on port 8080   
  7.     -->  
  8.     <Connector  port="8443" maxHttpHeaderSize="8192"  
  9.         maxThreads="150"  
  10.         minSpareThreads="25"  
  11.         maxSpareThreads="75"  
  12.         enableLookups="false"  
  13.         disableUploadTimeout="true"  
  14.         acceptCount="100"  
  15.         scheme="https"  
  16.         secure="true"  
  17.         clientAuth="false"  
  18.         sslProtocol="TLS"  
  19.         keystoreFile="D:/Tomcat/conf/tomcatKey.keystore"  
  20.         keystorePass="changeit"  
  21.         algorithm="SunX509"  
  22.     />  
    <!-- 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 將會被使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章