【Tomcat8】开启Https及挂载静态文件

使用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:刚才创建的密钥库的位置 

使用证书

  1. copy密钥库文件test.cer
  2. 将刚才生成的密钥库文件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 &quot;%r&quot; %s %b" />
       <Context path="/download" reloadable="true" docBase="/Users/admin/data/ftp/data/ota"/>
      </Host>
    </Engine>
  </Service>
</Server>

使用context标签来指定静态文件的位置path指定url访问路径,直接映射到docBase路径下,功能可参考nginx。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章