Tomcat配置HTTPS(此處驗證了tomcat7和tomcat9)

    以前因爲工做須要,項目須要從HTTP改爲了HTTPS,配置過程也很簡單,下面是詳細步驟.java

1. 生成證書
  1.1生成服務端證書
 
開始在jre的bin目錄下啓動dos窗口執行下執行命令:
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 18000
按照提示輸入密碼名稱等參數
說明:keytool 是JDK提供的證書生成工具,全部參數的用法參見keytool –help
-genkey 建立新證書
-v 詳細信息
-alias tomcat 以」tomcat」做爲該證書的別名。這裏能夠根據須要修改
-keyalg RSA 指定算法
-keystore D:/tomcat.keystore 保存路徑及文件名
 
-dname "CN=127.0.0.1,OU=,O=,L=,ST=,C=CN" 證書發行者身份,這裏的CN要與發佈後的訪問域名一致,其餘參數均可以忽略。因爲是本身發行的證書,在瀏覽器訪問,仍然會有警告提示。
-validity 18000證書有效期,單位爲天
-storepass admin123 證書的存取密碼
-keypass admin123 證書的私鑰web


    1.2 生成客戶端證書 
    執行命令:keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:/client.p12 -validity 18000
    一樣根據提示輸入密碼等參數.
說明:參數說明同上。這裏的-dname 證書發行者身份能夠和前面不一樣,到目前爲止,這2個證書能夠沒有任何關係。下面要作的工做纔是創建2者之間的信任關係。
 
    1.3 導出客戶端證書 
    執行命令:keytool -export -alias client -keystore D:/client.p12 -storetype PKCS12 -storepass admin123 -rfc -file D:/client.cer
 
說明:-export 執行導出
 -file 導出文件的文件路徑
 
    1.4 把客戶端證書加入服務端證書信任列表 
    執行命令:keytool -import -alias client -v -file D:/client.cer -keystore D:/tomcat.keystore -storepass admin123
 
說明:參數說明同前。這裏提供的密碼是服務端證書的存取密碼。
 
    1.5 導出服務端證書 
    執行命令:keytool -export -alias tomcat -keystore D:/tomcat.keystore -storepass admin123 -rfc -file D:/tomcat.cer
 
說明:把服務端證書導出。這裏提供的密碼也是服務端證書的密碼。
 
    1.6 生成客戶端信任列表
    執行命令:keytool -import -file D:/tomcat.cer -storepass admin123 -keystore D:/client.truststore -alias tomcat -noprompt算法

    經過list命令查看服務器的證書庫  keytool -list -v -keystore bsm.keystoreapache

2.Tomcat配置
    2.1修改conf/server.xml文件,找到對應的段落修改爲如下
    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />
    <!--  tomcat7配置 -->
    <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" 
                SSLEnabled="true" 
                maxThreads="150" 
                scheme="https" 
                secure="true" 
                clientAuth="true" 
                sslProtocol="TLS" 
                keystoreFile="D:/tomcat.keystore" 
                keystorePass="admin123" 
                truststoreFile="D:/tomcat.keystore" 
                truststorePass="admin123"/>
    <!-- tomcat9配置 -->
    <Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="./keystore/tomcat.keystore" 
           keystorePass="CloudSino" keyAlias="tomcat" 
           clientAuth="false" sslProtocol="TLS"/>
    clientAuth="true" 指定了雙向證書認證  keyAlias="tomcat" 爲證書的別名(生成證書時別名不是tomcat時須要指定)瀏覽器

    <Connector port="8009" protocol="AJP/1.3" redirectPort="443" />tomcat

    2.2修改Tomcat 下conf/web.xml文件, 在</welcome-file-list>後面加入下面的節點,讓服務器強制使用https(須要強轉才加).
    <login-config>
        <!-- Authorization setting for SSL -->
        <auth-method>CLIENT-CERT</auth-method>
        <realm-name>Client Cert Users-only Area</realm-name>
    </login-config>
    <security-constraint>
        <!-- Authorization setting for SSL -->
        <web-resource-collection >
            <web-resource-name >SSL</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>服務器


    2.3 改爲HTTPS鏈接後原來服務器上面的接口將沒法訪問,解決方法是在接口訪問以前加入如下幾句代碼或者修改JVM啓動參數(加入如下幾個參數)工具

        雙向認證:
        System.setProperty("javax.net.ssl.trustStore", "D:/client.truststore"); 
        System.setProperty("javax.net.ssl.trustStorePassword","admin123");
        System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
        System.setProperty("javax.net.ssl.keyStore","D:/client.p12");
        System.setProperty("javax.net.ssl.keyStorePassword","admin123");
        單向認證:
        System.setProperty("javax.net.ssl.trustStore", "D:/client.truststore"); url

相關文章
相關標籤/搜索