一:概念簡介
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試 JSP 程序的首選。
HTTP 超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標准。
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。
HTTPS和HTTP的區別:
- HTTP 是超文本傳輸協議,信息是明文傳輸,HTTPS 則是具有安全性的 SSL 加密傳輸協議。
- HTTPS 協議需要到 CA 申請證書,一般免費證書很少,需要交費。
- HTTP 和 HTTPS 使用的是完全不同的連接方式,用的端口也不一樣,前者是 80,后者是 443。
- HTTP 的連接很簡單,是無狀態的;HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,比 HTTP 協議安全。
二:為服務器生成證書
HTTPS 如果生產環境應用在域名上是需要直接或間接的從 CA 申請證書,來取得瀏覽器的信任的。我們先在本地模擬測試一下這個過程,自己使用jdk的keytool工具生成證書。
2.1 找到自己的%JAVA_HOME%/bin目錄
計算機---->屬性---->高級系統配置---->系統屬性
2.2 生成服務器證書
(1)打開DOS窗口,通過命令進入到jdk的bin目錄下。(C:\Program Files\Java\jdk1.8.0_60)
(2)創建存放生成證書的文件夾(G:\tomcat_cer)
(3)執行命令: keytool -genkey -v -alias tomcat -keyalg RSA -keystore G:\tomcat_cer\tomcat.keystore -validity 36500
參數說明: G:\tomcat_cer\ -->自己創建的存放證書的文件夾 ; tomcat.keystore -->生成的證書名稱 ; validity 36500 -->證書有效期,36500表示100年,默認值是90天
(4)密鑰庫口令: password(這個密碼非常重要,要求大於6個字符)
名字與姓氏:192.168.0.105(以后訪問的域名或IP地址,非常重要,證書和域名或IP綁定)
組織單位名稱,組織名稱,城市,省市自治區,國家地區代碼(隨便填)
(5)打印 [正在存儲G:\tomcat_cer\tomcat.keystore] ,證書生成完成
三:配置tomcat服務器
3.1 打開tomcat配置文件,如:D:/apache-tomcat/conf/server.xml,修改如下:
<?xml version="1.0" encoding="UTF-8"?> <Server port="8003" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <!-- 修改第一步:注釋 className="org.apache.catalina.core.AprLifecycleListener" --> <!--<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> --> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <!-- 修改第二步:redirectPort端口改為443 (port端口,根據自己需要設置即可) --> <Service name="Catalina"> <Connector port="11000" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" /> <!-- 修改第三步:增加enableLookups="false" (port端口,根據自己需要設置即可) --> <Connector port="8002" enableLookups="false" protocol="AJP/1.3" redirectPort="443" /> <!-- 修改第四步:去掉注釋且修改keystoreFile(證書文件的位置)、keystorePass(<tomcat>的主密碼即剛剛設置的證書密碼) 兩個參數 --> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="G:\tomcat_cer/tomcat.keystore" keystorePass="password"/> <!-- 修改結束 --> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name="127.0.0.1" appBase="phpwebapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>
3.2 打開tomcat配置文件,如:D:/apache-tomcat/conf/web.xml,在該文件</welcome-file-list>后面添加一段:
<!--配置證書開始--> <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> <!--配置證書結束-->
3.3 啟動tomcat服務器,訪問系統
使用以前保存的地址去訪問,我們發現,默認的已經變成https協議了,但是沒用權限訪問,接下來,我們繼續,為客戶端生成證書
三:為客戶端生成證書
具體步驟參考2.2,這里就不過多描述了( keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore G:\tomcat_cer\tomcat.p12 )
3.1 生成客戶端p12證書
3.2 把客戶端p12證書轉為.cer格式證書
具體步驟參考2.2,這里就不過多描述了( keytool -export -alias mykey -keystore G:\tomcat_cer\tomcat.p12 -storetype PKCS12 -storepass password -rfc -file G:\tomcat_cer\tomcat.cer )
執行成功之后,我們在文件夾中可以看到相關證書
四:讓服務器信任客戶端證書(詳見教程下)