使用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。