1. 程式人生 > >JDK自帶keytool生成SSL證書,搭建tomcat+https協議

JDK自帶keytool生成SSL證書,搭建tomcat+https協議

1、生成伺服器證書:

CMD進入JDK安裝目錄:cd c:/"Program Files"/java/jdk1.6.0_43/bin。輸入命令:

keytool -genkey -v -alias tomcat -keyalg RSA -keystore F:/ssl/tomcat.keystore -validity 365


(引數說明:genkey生成方式,對稱或者非對稱。alias定義別名。F:/ssl/tomcat.keystore指定生成伺服器證書庫路徑。validity證書有效期,365為一年

注:以上的keystore密碼建議設定成一致,避免混亂。這裡設定測試密碼為123456。輸入密碼後,提示輸入名字與姓氏,這裡輸入瀏覽器訪問域名。這裡本地測試,故輸入localhost。其他項直接回車跳過即可。

2、生成客戶端證書:

keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore F:/ssl/clientkey.p12


3、這裡服務端跟客戶端生成完證書,雙向需要認證。首先,讓伺服器信任客戶端證書:

由於不能直接將PKCS12格式的證書庫匯入,所以必須先把客戶端證書匯出為一個單獨的CER檔案。

keytool -export -alias clientkey -keystore F:/ssl/clientkey.p12 -storetype PKCS12 -storepass 123456 -rfc -file F:/ssl/clientkey.cer


注:alias的別名clientkey必須與客戶端證書別名一致。storepass為上述設定的密碼。

4、將客戶端證書匯入伺服器證書庫。(伺服器信任客戶端證書)

keytool -import -v -file f:/ssl/clientkey.cer -keystore f:/ssl/tomcat.keystore


5、客戶端信任伺服器證書:

keytool -keystore f:/ssl/tomcat.keystore -export -alias tomcat -file f:/ssl/tomcat.cer


匯入後,本地安裝證書。雙擊tomcat.cer根據提示安裝。

6、配置tomcat中server.xml中8443埠。觀察tomcat中埠配置:

<Connector executor="tomcatThreadPool"  port="8080" protocol="HTTP/1.1"   connectionTimeout="20000"  redirectPort="8443"/>

這裡有配置redirectPort="8443" 。猜測這裡如果添加了SSL/TLS證書後,利用http協議8080埠訪問將自動重定向到8443埠。所以這裡修改8443為TLS認證協議:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
      keystoreFile="F:/ssl/tomcat.keystore" keystorePass="123456"
  ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_ 
CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_C 
BC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RS 
A_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
  />

引數說明:keystoreFile證書路徑。keystorePass設定證書密碼。ciphers設定這個引數,避免chrome瀏覽器由於安全機制過濾,提示“

7、配置工程web.xml,新增SSL認證,將http請求全部需要SSL認證:

<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>
8、本地使用http://localhost:8443/測試訪問。9、如果使用分散式工程。需要將另一個tomcat訪問埠重定向redirectPort="8443"進行修改。比如修改為8444,此時ssl配置Connector 也應改為8444。否則將提示埠被佔用。