tomcat8的apr模式配置SLL證書


應公司的的推廣需求,要求所有的一些廣告頁面都必須可以被https訪問,網上搜了一些方法,發現很多都沒有寫下什么環境和版本下的配置很多都是轉載,現在寫下自己的碰到的一些問題和解決方法。
1.環境和配置:
服務器操作系統,Windows Server 2012 R2
JDK版本:jdk1.8_074
tomcat版本:tomcat8.0.39
服務器為國內租用的雲服務器
域名為公司正規注冊的域名
(本文中藍色的文字都是根據你實際的情況進行修改不要復制本文當中的)

2.所用的文件與工具:
證書: test.jks(證書根據自己實際情況來看,文本最終需要的是一個cer文件,和一個key文件)
JDK自帶的keytool工具
jks2pfx這個證書轉換工具(jks2pfx這個工具中自帶了openssl工具)


3.關於證書文件,網上有很多自己生成證書的,這里不做介紹,我的證書是在域名購買的網站上直接申請的OV免費證書,關於證書OV級別 EV等,請自己查找,這里也不在敘述,我這里的證書文件為test.jks


4.關於tomcat的工作方式,雖然我不是做運維,但是tomcat確實有三種工作模式,bio,nio,apr,三種工作模式根據網上的資料來說性能的大小依次是bio<nio<apr,而且apr相對於nio性能提升很明顯
那怎么判斷你的tomcat是以什么方式啟動的呢?如下圖

這是tomcat啟動完成的語句,其中畫橫線的地方為tomcat中的conf文件夾下 server.xml里面的<Connector>的啟動方式,后面是端口號。
如果是配置nio模式 就是如下配置方式
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />

這樣配置后,tomcat啟動結尾就是 http-nio-你配置的端口號,和ajp-nio-端口號
如果是配置apr模式 就是http-apr-你配置的端口號,和ajp-apr-端口號,和http-apr-443
現在確定的是需要用apr模式來配置SSL證書文件,既然有高效的模式肯定是要用的。
tomcat8自帶的就有 apr SSL引擎,網上很多篇文章都是告訴你 注銷掉conf\server.xml中的這一行
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

但是我發現只要注銷掉這一行,無論你怎么配置<Connector>里的 protocol為"org.apache.coyote.http11.Http11AprProtocol",都無法啟動apr模式,tomcat自動啟動為nio模式,所以很多配置方法都最終配置成了Nio模式。
所以這一行不能注銷,我修改了<Connector>的配置如下
<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true"
keystoreFile="conf\test.jks"
keystorePass=“你證書的密碼”
clientAuth="false" sslProtocol="TLS"
/>
啟動發現錯誤,SSL無法找到SSLCertificateFile在tomcat剛啟動時就報錯,然后自動轉變為Nio模式,而且一樣不能通過https訪問你的任何頁面。
后來經過一番折騰終於在一個前輩的博客當中找到了線索(在此感謝這位前輩) http://www.cnblogs.com/zhuawang/p/5125382.html

關鍵的是這一句,APR的Tomcat,需要使用server.key和server.cer文件,並按mod_ssl的語法來更新Server.xml文件配置
5.好,現在就去找到jks中的.key和.cer這兩個文件,JDK的安裝目錄當中的bin目錄下可以看到有一個keytool的exe文件,這個文件可以在開始菜單中用cmd進入到你JDK 安裝的路徑,比如安裝在D:\java\jdk1.8.074\bin,先把你的test.jks文件放到這個路徑下面,那么你就通過cmd進入到這個文件夾下,運行keytool工具(其中下划線為空格)
keytool_-export_-alias_ sksalias_-keystore_ test.jks_-storepass_ 123456_-file_ scert.cer
其中藍色的部分根據自己的情況來改,第一個-alias是別名的意思,也就是別名是sksalias,第二個藍色的就是你的jks文件了。 然后就是你的證書密碼,最后是給要導出的cer文件取一個名字。這個文件會保存在D:\java\jdk1.8.074\bin,也就是和keytool一個文件夾下。
下面獲得key文件,需要兩步
1)用keytool把test.jsk轉換為PKCS12,命令如下(其中下划線為空格)
keytool_-importkeystore_-srckeystore_ test.jks_\_-destkeystore_ outtest.p12_-deststoretype_PKCS12
(命令是可以使用的,之間有空格,調一下斜杠的位置,我第一次沒成功)
這句是把test.jks 轉化成outtest.p12文件
2)再用openssl 將P12文件轉成key
openssl_pkcs12_-in_outtest.p12_-out_outfinaltest.pem_-nodes
6.將cer和key這兩個文件放入tomcat的conf的server.xml里如下配置
<Connector port="443" 
protocol="org.apache.coyote.http11.Http11AprProtocol" 
enableLookups="true" 
disableUploadTimeout="true"  
acceptCount="100" maxThreads="200"  
scheme="https" 
secure="true" 
SSLEnabled="true"  
SSLCertificateFile="scert.cer的絕對路徑"  
SSLCertificateKeyFile="outfinaltest.key的絕對路徑"  
SSLVerifyClient="none" sslProtocol="TLS"/>
7.重啟tomcat,大功告成!
 
以下是常用的證書格式用keytool 和OpenSSL轉換的命令,在windows的cmd中執行,導出的文件在同級目錄

1. cer格式——>JKS (keytool 為JDK自帶的,可以在bin目錄下找到)

keytool -import -alias mycert -file d:\def.cer -keystore mykeystore.jks (導入證書到keystore)

2. JKS——>cer格式

keytool -import -alias mycert- keystore mykeystore.jks -file d:\def.cer (從keystore導出)

3. p12——>pem (OpenSSL為loadrunner自帶的,可以在Vgen的bin目錄下找到)

OpenSSL> pkcs12 –in d:\tomcatclient.p12 –out d:\key.pem

4. cer格式——>pem

x509 –in d:\wer.cer –inform –out d:\ope.pem


以上是2017-04-18 14:43之前更新的內容,但是后來用ssl狀態驗證的網站進行驗證,發現證書鏈不完整的問題,對之前的SSL部署,進行補充

     SSL證書狀態,檢查地址(亞洲誠信): https://www.trustasia.com/tools-ssl-state
   
   以下是之前的tomcat的server.xml部署,但是這樣部署會有SSL證書鏈不完整,所以經過研究 發現,證書頒發,不是僅僅兩者A頒發給B,存在多層的頒發,所以這個證書鏈要完整例如以下的狀態(根據上面測試工具測試百度的結果)
   
   關於證書鏈的正確的tomcat配置如下:
    
    <Connector protocol="org.apache.coyote.http11.Http11AprProtocol"
           port="443"
           enableLookups="true" disableUploadTimeout="true" 
           acceptCount="100"  maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           SSLProtocol="SSLv2+SSLv3+TLSv1+TLSv1.1+TLSv1.2"
            SSLCertificateFile="C:\tomcat8\conf\www.xxxxx.com.pem_nochain.crt"
            SSLCertificateKeyFile="C:\tomcat8\conf\www.xxxxx.com.key"
            SSLCertificateChainFile="C:\tomcat8\conf\www.xxxxx.com_ca.crt"/>

其中的SSLCertificateKeyFile文件就是之前配置中的key文件,SSLCertificateFile和SSLCertificateChainFile是證書文件和包含了證書鏈的文件,這兩個文件的制作請參考這篇帖子

全面講解Tomcat下SSL證書的配置(三)

全面講解Tomcat下SSL證書的配置(四)

得到了這兩個crt文件之后,放入tomcat的conf文件夾下,按照如上的配置,重啟tomcat 再用SSL測試工具進行測試,證書鏈狀態完整


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM