使用tomcat進行靜態文件掛載(html、image、js等)
通過tomcat home目錄下conf/server.xml
文件來進行配置
Server->Service->Connector : 開啓Https的配置
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/home/admin/.ios-ipa-server/192.168.1.101/server.keystore"
keystorePass="123456"
clientAuth="false"
sslProtocol="TLS"
/>
屬性 | 描述 |
---|---|
clientAuth | 如果設爲true,表示Tomcat要求所有的SSL客戶出示安全證書,對SSL客戶進行身份驗證 |
keystoreFile | 指定keystore文件的存放位置,可以指定絕對路徑,也可以指定相對於<CATALINA_HOME>(Tomcat安裝目錄)環境變量 的相對路徑。如果此項沒有設定,默認情況下,Tomcat將從當前操作系統用戶的用戶目錄下讀取名爲“.keystore”的文件。 |
keystorePass | 指定keystore的密碼,如果此項沒有設定,在默認情況下,Tomcat將使用“changeit”作爲默認密碼。 |
sslProtocol | 指定套接字(Socket)使用的加密/解密協議,默認值爲TLS,用戶不應該修改這個默認值。 |
ciphers | 指定套接字可用的用於加密的密碼清單,多個密碼間以逗號(,)分隔。如果此項沒有設定,在默認情況下,套接字可以使用任意一個可用的密碼。 |
生成自己的keystore
keytool -genkey -alias server.keystore -keyalg RSA -validity 36500 -keystore server.keystore -v
注:
-genkey :生成文件
-alias :別名,證書項的名字,必填項;
-keyalg :加密算法,證書籤名算法,tomcat建議RSA
-validity :證書有效期,36500天,即100年
-storepass :密鑰庫密碼,也就是等下要生成的keystore的訪問密碼,妥善保管
-keystore :要生成的文件的位置(相對路徑或絕對路徑)
-v: :顯示比較詳細的信息
添加新密鑰對的操作
keytool -genkeypair -alias test -keyalg RSA -validity 36500 -storepass 123456 -keystore ./server.keystore
查看keystore中的項
keytool -list -keystore ./test.keystore
C:\Users\jayzhen>keytool -list -keystore ./server.keystore
輸入密鑰庫口令:
密鑰庫類型: JKS
密鑰庫提供方: SUN
您的密鑰庫包含 2 個條目
server.keystore, 2019-7-29, PrivateKeyEntry,
證書指紋 (SHA1): FA:86:55:56:B1:B4:4F:63:B9:16:7C:D4:F9:1F:B3:26:CB:B1:85:45
test, 2019-7-29, PrivateKeyEntry,
證書指紋 (SHA1): 6C:FF:64:18:FB:20:2F:3C:25:D6:8D:2F:FB:5E:AA:B5:C3:B9:88:89
導出證書
keytool -exportcert -alias test -file ./test.cer -storepass 123456 -keystore ./server.keystore -v
-alias test:要導出的證書的名字,即剛纔創建的密鑰的名字,即keytool -list時顯示的名字
-file ./test.cer:要導出的證書的存儲位置,這裏我放在當前目錄下
-keystore ./server.keystore:剛纔創建的密鑰庫的位置
使用證書
- copy密鑰庫文件
test.cer
- 將剛纔生成的密鑰庫文件
test.cer
copy到你tomcat的conf目錄,跟server.xml同級。
注意:這裏一定要放在你實際運行的tomcat的conf目錄下。
配置tomcat(開頭那個已經展示了,這裏略)
關於瀏覽器配置
一個網站使用https的證書一般都是通過購買公衆證書,所以瀏覽器無法認證,所以此時只需要將剛纔導出的證書,也就是test.cer導入操作系統即可,雙擊證書。還有一個問題是一個密鑰庫裏放多個密鑰,可能會導致tomcat無法識別導致的,所以這不是個問題。
注意:關於配置https操作方式,tomcat版本不同,會有不同的操作方式,具體參考官網文檔。從tomcat8.5開始tomcat更改了配置形式,如上配置估計在tomcat10的時候會完全廢棄,在tomcat9.0下測試成功的配置如下:
<!-- 在tomcat9下配置->
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443" />
<Connector port="443" protocol="org.apache.coyote.http11.Http11Nio2Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/test.keystore" certificateKeystorePassword="123456" />
</SSLHostConfig>
</Connector>
補充靜態文件掛載(源文件)
<?xml version='1.0' encoding='utf-8'?>
<Server port="9005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<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>
<Service name="Catalina">
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/home/admin/.ios-ipa-server/192.168.18.85/server.keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
<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" />
<Context path="/download" reloadable="true" docBase="/Users/admin/data/ftp/data/ota"/>
</Host>
</Engine>
</Service>
</Server>
使用context
標籤來指定靜態文件的位置path
指定url訪問路徑,直接映射到docBase
路徑下,功能可參考nginx。